V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
McreeWu
V2EX  ›  程序员

关于远程执行(ansible 等工具)相关问题

  •  1
     
  •   McreeWu · 11 天前 · 2719 次点击

    背景: 服务器较多,3w 台左右(且 IP 等都是浮动的,在 2-5w 台),可能会存在同时更新或执行命令的情况,现在是使用 ansible 来管理,但是因为机器数量过多导致经常性同步延迟过大,或者有部分服务器无法联通动问题卡在某个任务上,且运维平台跑 ansible 内存会挤爆( 16G ),不过这个不是大问题,如果方案可行易用,配置不是问题,可以直接上顶配服务器供给运维平台使用。

    故: 现在想结合运维平台调研一个新的远程执行方案,需要能批量跑任务,或直接跑 bash 得到输出值,服务器上可以部署 agent 。

    目前在看 saltstack ,问题点是在于我们服务器大多走公网进行维护,网络链路分布全球,没办法保证连接质量。

    想知道各位公司都是用什么方案,或者什么工具呢?

    第 1 条附言  ·  10 天前
    1.k8s 是没办法做的,这个业务模式不支持
    2.目测 saltstack 是一个合适的方案,没有更优的情况下使用 saltstack 了。
    44 条回复    2024-09-12 14:45:40 +08:00
    hetal
        1
    hetal  
       11 天前
    其实就是差一个 CI/CD 的流程呗~
    McreeWu
        2
    McreeWu  
    OP
       11 天前
    @hetal #1 目前已有 ansible 可供使用,但是速度太慢了。
    mightybruce
        3
    mightybruce  
       11 天前
    这种情况估计你们需要自己研发了,ansible 模块通过 ssh 协议(或者 Kerberos 、LDAP )推送到被管节点执行,执行完之后自动删除, 几万台服务器肯定是满足不了的, 每个服务器装 agent 是需要的
    McreeWu
        4
    McreeWu  
    OP
       11 天前
    @mightybruce #3 是的,而且 ansible 跑完一个任务卡在某台机器上就跑不下去了,我们也不知道是哪个机器,经常需要等待好久时间。。
    cqu1980
        5
    cqu1980  
       11 天前
    只有自己研发,做任务池,卡的报警,再手工查看执行
    vacuitym
        6
    vacuitym  
       11 天前
    github 上有个开源的运维平台叫 salt ,不知道是不是你们要的
    NevadaLi
        7
    NevadaLi  
       11 天前 via iPhone
    checkmk 试试?
    dododada
        8
    dododada  
       11 天前
    我记得前司当年是请腾讯来做的,大概 4W 台机器,后来慢慢的就自研了,CI/CI 是基于禅道做的二开,其他的不太了解,反正你这个 3W 台,比较复杂,你这个可能还有异地多活的网络,要找个运维架构师咨询一下,没经验的话比较难搞
    McreeWu
        9
    McreeWu  
    OP
       11 天前
    @NevadaLi #7 这个好像倾向于监控一体化
    hetal
        10
    hetal  
       11 天前
    @McreeWu CI/CD 有很多方案,比较简单的就是容器化服务,根据版本的 tag,branch 等发版的 hooks ,然后自动部署,这个需要一些研发投入进行改造,不过是一劳永逸,上万台服务器了,这个是有必要的
    McreeWu
        11
    McreeWu  
    OP
       11 天前
    @hetal #10 没,不是 CI/CD 方案,我们的业务也不适用 k8s ,不然早就上了😂
    rushpu
        12
    rushpu  
       11 天前
    你可以看下这个,基于 ansible ,https://github.com/ansible/awx/blob/devel/docs/clustering.md
    dbak
        13
    dbak  
       11 天前
    可以看看 salt-syndic 分布式架构
    povsister
        14
    povsister  
       11 天前
    声明式+agent ,自研吧。做好任务管理下发,执行和回报交给 agent 。
    超大规模的想走 worker+shell 真的是坐大牢。

    当然,我觉得最简单的方式。k8s ,damonset 跑 agent ,或者直接上 job ,日志也能统一回收。以 pod 状态/job 状态作为任务执行的结果标识。
    GeekGao
        16
    GeekGao  
       11 天前   ❤️ 1
    可以试试使用 mitogen 插件加速 SSH 连接 https://mitogen.networkgenomics.com/ansible_detailed.html
    ic3z
        17
    ic3z  
       10 天前 via iPhone
    tywtyw2002
        18
    tywtyw2002  
       10 天前   ❤️ 1
    ansible 分组呗 一个组 1k-2k 台 分批次执行,多 node 并行执行也行。

    或者换 salt ,带 agent 的,不过 2w+ 不分组,效率也不行。

    规模大了,执行和监控就要分开了,执行完了扔数据库,然后控制到数据库里面去查。
    ExplodingFKL
        19
    ExplodingFKL  
       10 天前
    3w 的数量已经不太适合 ansible / ssh 了 ... 执行太太太太太慢了,如果执行的任务中不存在多机器联动的话可以直接自研 agent 之类的拉取任务 , 同时结合 p2p 分发降低请求负载 ...
    guanzhangzhang
        20
    guanzhangzhang  
       10 天前
    换 salt 这种带 agent 的,不然纯本地 ansible run 的机器调度会很慢
    liuliancao
        21
    liuliancao  
       10 天前
    要不考虑下 awx ( ansible 的 web 版本) 支持动态资产 支持定时任务 可以参考下我写的这个 https://blog.liuliancao.com/roams/ansible/#headline-12 搭建个 demo 试试吧 目前用 git 管理 awx project 了 用起来很 nice
    liuliancao
        22
    liuliancao  
       10 天前   ❤️ 1
    @liuliancao https://blog.liuliancao.com/roams/2024-09-06-awx/ 之前的比较简单 我更新下之前整理的 感兴趣的可以看看~
    julyclyde
        23
    julyclyde  
       10 天前
    16G 运行 ansible 会挤爆???
    plko345
        24
    plko345  
       10 天前 via Android
    你们执行一次 fork 多大
    zizon
        25
    zizon  
       10 天前
    现成的可能确实就是 stalstack 了,tls+retry.
    规模大了某些节点失败处理这个感觉确实没什么很好的方案.

    毕竟有些也不是能重入了,光 retry 解决不了问题.
    ETiV
        26
    ETiV  
       10 天前 via iPhone
    按网游思路做就行了
    10 万同时在线,同时广播消息需要什么样的架构
    neoblackcap
        27
    neoblackcap  
       10 天前
    几万台,肯定是需要换 agent 的方案,ansible/ssh 这样的方案性能真的太差了,几千台都很卡很慢了。
    xinmans
        28
    xinmans  
       10 天前
    都几万台了,直接上 k8s 吧
    Alliot
        29
    Alliot  
       10 天前
    机器多可以试试 saltstack.
    lambdaq
        30
    lambdaq  
       10 天前
    agent 好像也支持 agent 。
    McreeWu
        31
    McreeWu  
    OP
       10 天前
    @julyclyde #23 会,之前有一次跑 2w 台,直接挤掉了其他服务,后面开了一台 128G 的裸金属来跑的。
    McreeWu
        32
    McreeWu  
    OP
       10 天前
    @xinmans #28 就是业务上不了,不适用 k8s 方案,不然也没那么折磨
    9136347
        33
    9136347  
       10 天前
    如果你不想有特别大的变化的话,例如给几万台都去安装 agent 。
    你可以多跑几个执行机。比如,你一台 master ,10 台 worker 。相当于每一台 worker 管理几千台,可以有效的处理你遇到的问题。
    如果还不行的话,我觉得你可以在你现在的服务器中,挑选一部分作为 worker ,比如拿 100 台出来,让他们通过 ansible 去更新其他服务器。
    下面很多人说的 agent 其实也是个很好的方案,直接把要做的任务广播出去。
    julyclyde
        34
    julyclyde  
       10 天前
    @McreeWu ansible 默认 batch 不是才 20 么?运行 20 个 ssh 都能爆内存?
    jorneyr
        35
    jorneyr  
       10 天前
    4W 台机器不整一个有高手的运维团队不合理。
    0o0O0o0O0o
        36
    0o0O0o0O0o  
       10 天前
    赞同 #19 ,agent+p2p 是不挑环境也适合比较恶劣的网络的方案,botnet 用了都说好
    McreeWu
        37
    McreeWu  
    OP
       10 天前
    @jorneyr #35 有一个高手,但是离职去大厂了😭
    julyclyde
        38
    julyclyde  
       9 天前
    @McreeWu 哈哈哈哈……
    tianshiyeben
        39
    tianshiyeben  
       8 天前
    你可以试试 wgcloud ,它支持批量指令下发,也支持计划任务执行,重要的是这一切都是交给每个主机的 agent 执行的
    http://www.wgstart.com
    McreeWu
        40
    McreeWu  
    OP
       7 天前
    @GeekGao #16 是一个方法,我尝试一下,感谢
    codegenerator
        41
    codegenerator  
       7 天前
    插个话题,非常希望找 ansible playbook 的实战教程,好像大家用的不多的样子
    我自己还是很喜欢 ansible 这种模式,毕竟 k8s 打个镜像实在太大了
    julyclyde
        42
    julyclyde  
       6 天前
    @codegenerator ansible 和 container 根本是两种不同的管理思维啊
    ansible 是把一个长生命周期的东西通过不断干预的方法维持在一个可控的状态
    容器是这玩意声来就是合适的状态,等不好用了直接扔了换新的
    fredz
        43
    fredz  
       4 天前
    网络链路分布全球. salt 延迟估计也很大,利用 salt 做管理和部署,批量脚本通过 anycast 或者 cdn 发布吧
    McreeWu
        44
    McreeWu  
    OP
       4 天前
    @fredz #43 一般来说推送文件比较小,大多数就是执行一些批量脚本,最远冰岛服务器也能有个 50 兆上下,所以还好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:16 · PVG 03:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.