360私有云平台(HULK)命令系统
作者:互联网
360私有云平台(HULK)命令系统
赵阳 360云计算
女主宣言
“天下武功,无坚不摧,唯快不破”。今天小编妹妹要带大家看看“运维攻城狮”是如何玩转自动化,轻松管理上万台服务器的。
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!
背景:
360私有云命令执行系统之前使用的自动化运维工具是SaltStack,刚开始SaltStack满足了绝大部分的需求,但是随着网络架构的复杂以及对任务下发的成功率要求提高,慢慢的SaltStack使用的越来越吃力,而且360关于自动化运维使用的需求也在变化,从最初的批量执行任务到现在的需要在大规模集群下运行小批量的命令。
正是在这种场景下,根据自身需求,结合许多优秀的技术(站在巨人的肩膀上),开发了一款类似SaltStack的工具:Qcmd。
Qcmd是基于Golang开发,实时、异步的命令执行系统。Qcmd支持上万台服务器,扩展性好,源码简单易读,执行快,服务器之间秒级通讯,方便部署,并配合有自动更新模块。
Qcmd的优势简单来说就是执行命令成功率非常高(消息传递成功率高,几乎无丢失,尤其在网络状况极端不好的情况下),任务在超时后会更合理(超时会出发CallBack),有详细的API展示Master的状态,性能和任务处理更为优越。
下面介绍一下360私有云命令执行系统,在最后会详细介绍下Qcmd系统。
命令执行系统
介绍
360私有云命令执行系统是一个可以针对多台主机执行脚本的系统,并且可以将多个脚本进行组合,满足多种需求。目前该系统覆盖了2万多台主机,支持万台主机执行命令,底层命令执行模块由自主开发的Qcmd支持。
脚本编辑
在脚本编辑模式可以自由编写脚本,并对脚本分类进行划分,合理规划使用,在脚本属性中包括脚本名称、超时时间和参数列表等。
脚本执行
可以选择多台主机执行命令,Agent异常的主机将会自动加入“不可控”中,执行命令会将该部分主机进行过滤,多台主机可以选择任意一台主机做测试主机。
执行历史
执行历史模块可以看到所有的历史任务的详情,在历史任务模块可以重做任务,取消任务等。
Qcmd系统
原理
每一个Minion对应一个Topic和Channel,执行命令Master会将信息Publish到对应的Topic和Channel,Minion从Master Subscribe到消息,并且执行相应动作。
流程
-
master会在本地启动一个unix socket监听请求,当有请求调用pub接口,经过处理后,将合法的数据写入相应的topic,不合法的将丢弃,如果一条正确的消息都没有,将直接返回No minions matched the target.
-
topic会启动一个messageDump goroutine去从memoryChan中一直读取数据,如果没有,就阻塞;如果有,就格式化成message,会写入channnel的memoryChan
-
channel也会启动一个messageDump goroutine去从memoryChan中读取数据写入到minionChan,minionChan是一个长度只有1的channel,当有数据写入就会阻塞,直到minion去sub
- message在channel中的生存时间为任务超时时间的一半,如果这个值大于max_message_expired_time,就会重置为max_message_expired_time channel如果满了,就会从最早的队列中取出一条数据,进行drop(dropcount++),并写入新的message minion sub会从minionChan中读取数据,如果有,则返回数据,否则为空
对比
这里我们和SaltStack做了一个对比。
结尾
之后会不定期分享一些关于Qcmd系统和自动化运维方面的最新成果和思路,欢迎大家关注“HULK一线技术杂谈”公众号,一切尽在其中。
标签:脚本,私有,主机,HULK,Qcmd,message,执行,360 来源: https://blog.51cto.com/15127564/2668368