使用ucloud globalssh加速ansible海外部署效率-买球的app软件下载
ansible是一个简单高效、无agent架构的自动化编排、部署及配置管理工具,通过ssh协议实现远程节点和管理节点之间的通信。ucloud内部也大量使用到了ansible。比如,ucloud机房产品部署系统,通过ansible实现了部署效率的极大提升,目前已经成为ucloud机房部署的重要工具,本文将详细介绍ansible在ucloud机房产品部署系统中的使用,相信对有多机房部署需求的读者会有帮助。
什么是ansible
ansible是一个简单高效、无agent架构的自动化编排、部署及配置管理工具,通过ssh协议实现远程节点和管理节点之间的通信。
ansible的目的是简化大量复杂重复的运维工作,以精简的技术思路建立公司内统一的自动化文化。无agent的架构使其比其他工具更显简单,基于ssh可以做到的事ansible都可以做的更好,超高的易用度使其可以简单集成到现有体系之中,因而被广泛使用。
ucloudansible使用场景
ucloud内部也大量使用到了ansible。比如,机房产品部署系统,通过ansible实现了部署效率的极大提升,目前已经成为ucloud机房部署的重要工具。又如,现网大规模灰度发布系统,通过集成ansible的基础api和callback功能,很好的解决了灰度发布、回滚、控制等难题,该系统已经在线上稳定运行3年以上,完成相关灰度发布任务上万个。
下面将详细介绍ansible在机房产品部署系统中的使用,相信对有多机房部署需求的读者会有帮助。
海外多机房部署
我们基于ansible集中式地批量部署和管理服务,集中式管理中心位于北京/上海机房。当海外节点(如拉各斯、胡志明等)需要建设时,通过ansible来远程部署云产品及内部服务。部分云产品是基于ucloud云主机作为iaas层搭建的,所以也是通过ssh连到对应的海外云主机进行操作。
这和一般用户的使用场景有很多相似之处,无论其是自建idc或用了公有云,甚至多云部署来同时管理不同云上的服务器,都有类似批量部署的需要。
海外部署有个额外的痛点,就是部署效率的问题。ansible使用ssh协议进行通信,ssh通道的创建和通信速度都较慢。当需要通过外网管理,而网络环境较差或带宽不足的情况下,执行时间基本上无法忍耐,体现在用ansible部署时,经常会出现卡顿、连接失败、传输速度较慢等现象,使用copy模块传输稍大的代码包/镜像文件时基本上要等到花儿都谢了。
我们的解决方法,是把ucloud的paas产品globalssh,集成进ansible,用于提高跨国远程管理服务器效率。
globalssh
globalssh为了保障海外数据中心的运维而推出,采用了ucloud众多iaas产品如ulb4(四层负载均衡)、udpn(洲际内网互联、0丢包)及高包量云主机,引入智能dns服务以提供就近接入的能力。网络转发基于成熟稳定的gre、nat技术,支持tcp端口(除80、443)四层转发。
ansibleplaybook方式部署
我们将globalssh集成到ansible,做一个简单的软件包拷贝及安装,步骤如下所示。
1)首先,我们通过ucloudapi或控制台在北京二和拉各斯(尼日利亚)各创建一台云主机,带宽为1mb,其中拉各斯机房会自动开启globalssh功能(所有ucloud海外机房均会自动开启),如下图所示:
2)准备一个简单的ansibleplaybook,分别完成3个步骤:gatherfacts、copy代码包以及yum安装代码。相关的playbook如下所示:
----hosts:alltasks:-name:copytestcopy:src=/data/mysql-devel-5.6.41-1.el6.x86_64.rpmdest=/data/test-name:installmysql-develyum:name=/data/mysql-devel-5.6.41-1.el6.x86_64.rpmstate=present
3)准备一个hosts文件,用于配置globalssh所生成的域名。ansible在对globalssh的支持上非常简单,只要在主机变量里面添加ansible_ssh_host=xxx.xxx.xxx.xxx.ipssh.net即可。我们的机房部署系统会结合ansible的dynamicinventory功能,直接在生成的inventory中将globalssh的加速域名加到ansible_ssh_host变量中了,使用起来也是非常容易的,如下所示。
[[email protected]~]#cathosts_nrly[all]152.32.140.39ansible_ssh_pass=example[[email protected]~]#cathosts_nrly_1[all]152.32.140.39ansible_ssh_pass=exampleansible_ssh_host=152.32.140.39.ipssh.net
4)使用ansible-playbook命令执行该playbook,任务完成。
测试对比
前面提到,globalssh大幅提高了我们海外部署的效率。可以通过另写一个无globalssh加速的playbook,来测试一下具体的加速效果。
无globalssh的playbook写起来比较简单,和上文基本类似,区别在第三步的hosts文件里不使用加速域名,而是直接填写原有的外网ip地址。
为防止单次测试结果的不准确,这里测试了10次,取平均值进行比较。
测试命令:
timeforiin`seq110`;doansible-playbook-ihosts_nrlytest_playbook.yml;donetimeforiin`seq110`;doansible-playbook-ihosts_nrly_1test_playbook.yml;done
最终的结果如下所示,可以看到在简单的ansibleplaybook部署中,经过globalssh加速后的效果提升了32.23%。
ansiblead-hoc方式
globalssh在低速的带宽下可以提升整个网络传输的稳定性和速度,尤其是对rtt(round-triptime)往返延迟的提升,更是有着外网弹性ip所不具备的速度优势。因此我们认为它对ansiblead-hoc方式也有很大帮助。
运维人员经常会用ad-hoc方式,它类似pssh,却支持ansible所有的module语法,通常的使用场景是批量执行命令并查看回显结果。为了验证假设,我们对ad-hoc方式也做了类似测试,发现globalssh后的优化效果更明显,优化速度超过50%,详细结果如下所示。
测试命令:
timeforiin`seq110`;doansible-ihosts_nrlyall-mshell-a"cat/var/log/messages";donetimeforiin`seq110`;doansible-ihosts_nrly_1all-mshell-a"cat/var/log/messages";done
测试结果:
总结
ansible是被大量使用的devops工具,我们在使用中根据需要,将globalssh很容易地集成其中,避免了服务器部署中ssh卡顿造成的不良影响。