背景: 服务器较多,3w 台左右(且 IP 等都是浮动的,在 2-5w 台),可能会存在同时更新或执行命令的情况,现在是使用 ansible 来管理,但是因为机器数量过多导致经常性同步延迟过大,或者有部分服务器无法联通动问题卡在某个任务上,且运维平台跑 ansible 内存会挤爆( 16G ),不过这个不是大问题,如果方案可行易用,配置不是问题,可以直接上顶配服务器供给运维平台使用。
故: 现在想结合运维平台调研一个新的远程执行方案,需要能批量跑任务,或直接跑 bash 得到输出值,服务器上可以部署 agent 。
目前在看 saltstack ,问题点是在于我们服务器大多走公网进行维护,网络链路分布全球,没办法保证连接质量。
想知道各位公司都是用什么方案,或者什么工具呢?
1 hetal 2024-09-05 17:39:00 +08:00 其实就是差一个 CI/CD 的流程呗~ |
![]() | 3 mightybruce 2024-09-05 17:46:45 +08:00 这种情况估计你们需要自己研发了,ansible 模块通过 ssh 协议(或者 Kerberos 、LDAP )推送到被管节点执行,执行完之后自动删除, 几万台服务器肯定是满足不了的, 每个服务器装 agent 是需要的 |
![]() | 4 McreeWu OP @mightybruce #3 是的,而且 ansible 跑完一个任务卡在某台机器上就跑不下去了,我们也不知道是哪个机器,经常需要等待好久时间。。 |
5 cqu1980 2024-09-05 17:58:08 +08:00 只有自己研发,做任务池,卡的报警,再手工查看执行 |
6 vacuitym 2024-09-05 18:01:57 +08:00 github 上有个开源的运维平台叫 salt ,不知道是不是你们要的 |
![]() | 7 swLoXtOtd89pGg8t 2024-09-05 18:06:38 +08:00 via iPhone checkmk 试试? |
![]() | 8 dododada 2024-09-05 18:14:21 +08:00 我记得前司当年是请腾讯来做的,大概 4W 台机器,后来慢慢的就自研了,CI/CI 是基于禅道做的二开,其他的不太了解,反正你这个 3W 台,比较复杂,你这个可能还有异地多活的网络,要找个运维架构师咨询一下,没经验的话比较难搞 |
10 hetal 2024-09-05 18:33:52 +08:00 @McreeWu CI/CD 有很多方案,比较简单的就是容器化服务,根据版本的 tag,branch 等发版的 hooks ,然后自动部署,这个需要一些研发投入进行改造,不过是一劳永逸,上万台服务器了,这个是有必要的 |
12 rushpu 2024-09-05 21:40:46 +08:00 你可以看下这个,基于 ansible ,https://github.com/ansible/awx/blob/devel/docs/clustering.md |
13 dbak 2024-09-05 21:55:10 +08:00 可以看看 salt-syndic 分布式架构 |
![]() | 14 povsister 2024-09-05 22:02:22 +08:00 声明式+agent ,自研吧。做好任务管理下发,执行和回报交给 agent 。 超大规模的想走 worker+shell 真的是坐大牢。 当然,我觉得最简单的方式。k8s ,damonset 跑 agent ,或者直接上 job ,日志也能统一回收。以 pod 状态/job 状态作为任务执行的结果标识。 |
15 luojiyin87 2024-09-05 22:30:53 +08:00 |
![]() | 16 R4rvZ6agNVWr56V0 2024-09-06 01:35:42 +08:00 ![]() 可以试试使用 mitogen 插件加速 SSH 连接 https://mitogen.networkgenomics.com/ansible_detailed.html |
17 ic3z 2024-09-06 06:32:07 +08:00 via iPhone |
![]() | 18 tywtyw2002 2024-09-06 07:15:43 +08:00 ![]() ansible 分组呗 一个组 1k-2k 台 分批次执行,多 node 并行执行也行。 或者换 salt ,带 agent 的,不过 2w+ 不分组,效率也不行。 规模大了,执行和监控就要分开了,执行完了扔数据库,然后控制到数据库里面去查。 |
19 ExplodingDragon 2024-09-06 08:47:54 +08:00 3w 的数量已经不太适合 ansible / ssh 了 ... 执行太太太太太慢了,如果执行的任务中不存在多机器联动的话可以直接自研 agent 之类的拉取任务 , 同时结合 p2p 分发降低请求负载 ... |
![]() | 20 guanzhangzhang 2024-09-06 10:07:01 +08:00 换 salt 这种带 agent 的,不然纯本地 ansible run 的机器调度会很慢 |
![]() | 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 |
![]() | 22 liuliancao 2024-09-06 11:02:28 +08:00 ![]() @liuliancao https://blog.liuliancao.com/roams/2024-09-06-awx/ 之前的比较简单 我更新下之前整理的 感兴趣的可以看看~ |
23 julyclyde 2024-09-06 11:35:56 +08:00 16G 运行 ansible 会挤爆??? |
![]() | 24 plko345 2024-09-06 12:10:15 +08:00 via Android 你们执行一次 fork 多大 |
![]() | 25 zizon 2024-09-06 13:02:46 +08:00 现成的可能确实就是 stalstack 了,tls+retry. 规模大了某些节点失败处理这个感觉确实没什么很好的方案. 毕竟有些也不是能重入了,光 retry 解决不了问题. |
![]() | 26 ETiV 2024-09-06 13:07:58 +08:00 via iPhone 按网游思路做就行了 10 万同时在线,同时广播消息需要什么样的架构 |
27 neoblackcap 2024-09-06 13:55:37 +08:00 几万台,肯定是需要换 agent 的方案,ansible/ssh 这样的方案性能真的太差了,几千台都很卡很慢了。 |
![]() | 28 yb8Qes1Qae01H0xy 2024-09-06 14:27:17 +08:00 都几万台了,直接上 k8s 吧 |
29 Alliot 2024-09-06 14:52:22 +08:00 机器多可以试试 saltstack. |
![]() | 30 lambdaq 2024-09-06 15:03:18 +08:00 agent 好像也支持 agent 。 |
![]() | 31 McreeWu OP @julyclyde #23 会,之前有一次跑 2w 台,直接挤掉了其他服务,后面开了一台 128G 的裸金属来跑的。 |
![]() | 33 9136347 2024-09-06 15:57:34 +08:00 如果你不想有特别大的变化的话,例如给几万台都去安装 agent 。 你可以多跑几个执行机。比如,你一台 master ,10 台 worker 。相当于每一台 worker 管理几千台,可以有效的处理你遇到的问题。 如果还不行的话,我觉得你可以在你现在的服务器中,挑选一部分作为 worker ,比如拿 100 台出来,让他们通过 ansible 去更新其他服务器。 下面很多人说的 agent 其实也是个很好的方案,直接把要做的任务广播出去。 |
35 jorneyr 2024-09-06 17:05:01 +08:00 4W 台机器不整一个有高手的运维团队不合理。 |
36 0o0O0o0O0o 2024-09-06 17:22:03 +08:00 赞同 #19 ,agent+p2p 是不挑环境也适合比较恶劣的网络的方案,botnet 用了都说好 |
![]() | 39 tianshiyeben 2024-09-08 12:33:36 +08:00 你可以试试 wgcloud ,它支持批量指令下发,也支持计划任务执行,重要的是这一切都是交给每个主机的 agent 执行的 http://www.wgstart.com |
41 codegenerator 2024-09-09 21:34:32 +08:00 插个话题,非常希望找 ansible playbook 的实战教程,好像大家用的不多的样子 我自己还是很喜欢 ansible 这种模式,毕竟 k8s 打个镜像实在太大了 |
42 julyclyde 2024-09-10 14:42:59 +08:00 @codegenerator ansible 和 container 根本是两种不同的管理思维啊 ansible 是把一个长生命周期的东西通过不断干预的方法维持在一个可控的状态 容器是这玩意声来就是合适的状态,等不好用了直接扔了换新的 |
43 fredz 2024-09-12 14:12:48 +08:00 网络链路分布全球. salt 延迟估计也很大,利用 salt 做管理和部署,批量脚本通过 anycast 或者 cdn 发布吧 |