ansible快速部署加速方案


ansible是基于Python的 自动化部署 方案,但是目前只是通过命令行

ansible -i hosts all -a 'uptime'
# or
ansible-playbook -i hosts playbook.yml -e 'args' -t deploy

实现自动化部署.

长此以往,虽然可以实现所谓的自动化,但产品业务线多且杂的情况下,项目很难维护,更不用说以文件为存储的表现形式很差,针对目前使用ansible的经验以及使用中的困难,可以针对性的提出一些解决方案

加速

问题

自动化部署其中最大的障碍就是 网络 的原因

其中需要通过网络上传一些模板文件,有的甚至还需要上传一些压缩包,虽然说几MB的东西很快就能上传成功,但如果把这上传文件所需要的2秒乘以上百,上千台主机呢,更不用说ansible的表现形式就是一个任务一个任务的往下执行,假如在上传模板这一步卡住(等待所有服务器上传成功),这时某台未模板化的服务器的某服务需要重启,是不是会出问题呢

方案

针对这一问题,目前想到的解决方案如下:

  • 适当增加fork数

    目前fork数默认为50,可以适当增加

  • 大文件使用内网(外网)下载

    从部署机上上传文件可能会出现这样那样的问题,尤其是上传到国外服务器时经常会出现ansible playbook的任务卡住问题(其实是正在以几KB/s的龟速运行),所以其中大于xxMB的文件(压缩包)全部使用从远程服务器上下载方式,并且全部进行加密处理

  • 把超过几百台服务器的节点分组多进程运行

    服务器一旦多了,对应任务的等待时间也就多了,所以将500台的节点分为十组,每组50台,使用多进程分别同时运行,这样可以有效减少任务等待时间,需要注意每组运行失败的服务器。

  • 把经常出问题或者网络不太好的节点放到最后运行

    像中国移动以及香港,国外的某些节点在运行ansible playbook的时候总会或多或少的出些问题,这些节点可以考虑放到最后,并且需要找出问题原因进行优化

目标

web界面

使用过ansible的同学一定知道ansible-tower,它是ansible的web方式部署,通过web界面就可以添加删除任务,并且运行ansible playbook,可惜,它是收费的 /捂脸

任务队列

把ansible playbook放到任务队列里,由消费者去消费对应的任务

未完待续...

There are comments.