作者:张隐耕
通常谈到批量管理的时候,很多人的第一印象就是使用ssh,在一台管理机上借助ssh密钥认证实现免输密码登陆远程成百上千乃至成千上万的服务器,然后执行指令操作。不可否认这是很好的方法。不过,使用SSH的方法有个前提,那就是要求远程主机开放ssh登录。另外,还可以借助第三方开源工具gearman等,不过需要在服务器上安装gearman客户端。
那么有没有一种方法能够不依赖于SSH,也无须在服务器上安装其它第三方工具的情况下,实现服务器的批量管理呢?在经过一段时间的思考之后,想到一个简便且还算实用的方法,经过测试,这种方法可行,而且还具备一定的通用性。
大致的架构就是,在服务器上部署一个BASH脚本,定期从管理机上获取指令列表执行,并反馈执行结果。
具体描述如下:
1、准备一台管理机CtrlServer,安装web服务,保障每台服务器都能访问即可;
2、在每一台服务器RemoteServer上部署一个bash脚本,加入crontab;
脚本的主要功能就是获取指令、执行指令、反馈结果;主要步骤:
A、获取服务器列表
访问CtrlServer的web服务获取需要执行指令的服务器IP列表(serverlist,实现可选择的指定服务器执行指令)
B、获取待执行指令列表
访问CrtlServer的web服务获取需要执行的指令(cmdlist);
校验新旧cmdlist的MD5,和新cmdlist内指定的脚本过期参数选项,避免脚本重复执行;
C、将cmdlist转换成shell脚本(cmd.sh)
D、执行cmd.sh返回执行结果
执行Cmd.sh,并将执行结果POST给CtrlServer,存入DB。
E、查看执行结果
在CtrlServer上以WEB方式查看所有服务器执行结果。
最后,为了方便的维护变更指令列表文件和服务器列表文件,可以额外开发一个网页控制台用来管理这2个文件。
你是否有更好的方法呢?欢迎分享。