关于远程执行(ansible 等工具)相关问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
McreeWu
V2EX    程序员

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

  •  1
     
  •   McreeWu 2024-09-05 17:31:25 +08:00 3818 次点击
    这是一个创建于 404 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    当然,我觉得最简单的方式。k8s ,damonset 跑 agent ,或者直接上 job ,日志也能统一回收。以 pod 状态/job 状态作为任务执行的结果标识。
    luojiyin87
        15
    luojiyin87  
       2024-09-05 22:30:53 +08:00
    R4rvZ6agNVWr56V0
        16
    R4rvZ6agNVWr56V0  
       2024-09-06 01:35:42 +08:00   1
    可以试试使用 mitogen 插件加速 SSH 连接 https://mitogen.networkgenomics.com/ansible_detailed.html
    ic3z
        17
    ic3z  
       2024-09-06 06:32:07 +08:00 via iPhone
    tywtyw2002
        18
    tywtyw2002  
       2024-09-06 07:15:43 +08:00   1
    ansible 分组呗 一个组 1k-2k 台 分批次执行,多 node 并行执行也行。

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

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

    毕竟有些也不是能重入了,光 retry 解决不了问题.
    ETiV
        26
    ETiV  
       2024-09-06 13:07:58 +08:00 via iPhone
    按网游思路做就行了
    10 万同时在线,同时广播消息需要什么样的架构
    neoblackcap
        27
    neoblackcap  
       2024-09-06 13:55:37 +08:00
    几万台,肯定是需要换 agent 的方案,ansible/ssh 这样的方案性能真的太差了,几千台都很卡很慢了。
    yb8Qes1Qae01H0xy
       28
    yb8Qes1Qae01H0xy  
       2024-09-06 14:27:17 +08:00
    都几万台了,直接上 k8s 吧
    Alliot
        29
    Alliot  
       2024-09-06 14:52:22 +08:00
    机器多可以试试 saltstack.
    lambdaq
        30
    lambdaq  
       2024-09-06 15:03:18 +08:00
    agent 好像也支持 agent 。
    McreeWu
        31
    McreeWu  
    OP
       2024-09-06 15:42:27 +08:00
    @julyclyde #23 会,之前有一次跑 2w 台,直接挤掉了其他服务,后面开了一台 128G 的裸金属来跑的。
    McreeWu
        32
    McreeWu  
    OP
       2024-09-06 15:43:27 +08:00
    @xinmans #28 就是业务上不了,不适用 k8s 方案,不然也没那么折磨
    9136347
        33
    9136347  
       2024-09-06 15:57:34 +08:00
    如果你不想有特别大的变化的话,例如给几万台都去安装 agent 。
    你可以多跑几个执行机。比如,你一台 master ,10 台 worker 。相当于每一台 worker 管理几千台,可以有效的处理你遇到的问题。
    如果还不行的话,我觉得你可以在你现在的服务器中,挑选一部分作为 worker ,比如拿 100 台出来,让他们通过 ansible 去更新其他服务器。
    下面很多人说的 agent 其实也是个很好的方案,直接把要做的任务广播出去。
    julyclyde
        34
    julyclyde  
       2024-09-06 16:55:30 +08:00
    @McreeWu ansible 默认 batch 不是才 20 么?运行 20 个 ssh 都能爆内存?
    jorneyr
        35
    jorneyr  
       2024-09-06 17:05:01 +08:00
    4W 台机器不整一个有高手的运维团队不合理。
    0o0O0o0O0o
        36
    0o0O0o0O0o  
       2024-09-06 17:22:03 +08:00
    赞同 #19 ,agent+p2p 是不挑环境也适合比较恶劣的网络的方案,botnet 用了都说好
    McreeWu
        37
    McreeWu  
    OP
       2024-09-06 18:28:16 +08:00
    @jorneyr #35 有一个高手,但是离职去大厂了
    julyclyde
        38
    julyclyde  
       2024-09-07 19:10:10 +08:00
    @McreeWu 哈哈哈哈……
    tianshiyeben
        39
    tianshiyeben  
       2024-09-08 12:33:36 +08:00
    你可以试试 wgcloud ,它支持批量指令下发,也支持计划任务执行,重要的是这一切都是交给每个主机的 agent 执行的
    http://www.wgstart.com
    McreeWu
        40
    McreeWu  
    OP
       2024-09-09 13:34:05 +08:00
    @GeekGao #16 是一个方法,我尝试一下,感谢
    codegenerator
        41
    codegenerator  
       2024-09-09 21:34:32 +08:00
    插个话题,非常希望找 ansible playbook 的实战教程,好像大家用的不多的样子
    我自己还是很喜欢 ansible 这种模式,毕竟 k8s 打个镜像实在太大了
    julyclyde
        42
    julyclyde  
       2024-09-10 14:42:59 +08:00
    @codegenerator ansible 和 container 根本是两种不同的管理思维啊
    ansible 是把一个长生命周期的东西通过不断干预的方法维持在一个可控的状态
    容器是这玩意声来就是合适的状态,等不好用了直接扔了换新的
    fredz
        43
    fredz  
       2024-09-12 14:12:48 +08:00
    网络链路分布全球. salt 延迟估计也很大,利用 salt 做管理和部署,批量脚本通过 anycast 或者 cdn 发布吧
    McreeWu
        44
    McreeWu  
    OP
       2024-09-12 14:45:40 +08:00
    @fredz #43 一般来说推送文件比较小,大多数就是执行一些批量脚本,最远冰岛服务器也能有个 50 兆上下,所以还好。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3080 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 45ms UTC 00:28 PVG 08:28 LAX 17:28 JFK 20:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86