使用GlobalSSH加速Ansible海外部署效率

什麼是Ansible Ansible是一個簡單高效、無Agent架構的自動化編排、部署及配置管理工具,經過SSH協議實現遠程節點和管理節點之間的通訊。mysql

Ansible的目的是簡化大量複雜重複的運維工做, 以精簡的技術思路創建公司內統一的自動化文化。無Agent的架構使其比其餘工具更顯簡單,基於SSH能夠作到的事Ansible均可以作的更好,超高的易用度使其能夠簡單集成到現有體系之中,於是被普遍使用。sql

UCloud Ansible使用場景 UCloud內部也大量使用到了Ansible。好比,機房產品部署系統,經過Ansible實現了部署效率的極大提高,目前已經成爲UCloud機房部署的重要工具。又如,現網大規模灰度發佈系統,經過集成Ansible的基礎API和Callback功能,很好的解決了灰度發佈、回滾、控制等難題,該系統已經在線上穩定運行3年以上,完成相關灰度發佈任務上萬個。shell

下面將詳細介紹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)四層轉發。運維

Ansible Playbook方式部署 咱們將GlobalSSH集成到Ansible,作一個簡單的軟件包拷貝及安裝,步驟以下所示。ssh

1)首先,咱們經過UCloud API或控制檯在北京二和拉各斯(尼日利亞)各建立一臺雲主機,帶寬爲1Mb,其中拉各斯機房會自動開啓GlobalSSH功能(全部UCloud海外機房均會自動開啓),以下圖所示:

2)準備一個簡單的Ansible Playbook,分別完成3個步驟:gather facts、copy代碼包以及yum安裝代碼。相關的playbook以下所示:

--- - hosts: all tasks: - name: copy test copy: src=/data/MySQL-devel-5.6.41-1.el6.x86_64.rpm dest=/data/test - name: install mysql-devel yum: name=/data/MySQL-devel-5.6.41-1.el6.x86_64.rpm state=present 3)準備一個hosts文件,用於配置GlobalSSH所生成的域名。Ansible在對GlobalSSH的支持上很是簡單,只要在主機變量裏面添加 ansible_ssh_host=xxx.xxx.xxx.xxx.ipssh.net便可。咱們的機房部署系統會結合Ansible的Dynamic Inventory功能,直接在生成的inventory中將GlobalSSH的加速域名加到ansible_ssh_host變量中了,使用起來也是很是容易的,以下所示。

[root@10-10-83-122 ~]# cat hosts_nrly [all] 152.32.140.39 ansible_ssh_pass=example [root@10-10-83-122 ~]# cat hosts_nrly_1 [all] 152.32.140.39 ansible_ssh_pass=example ansible_ssh_host=152.32.140.39.ipssh.net 4)使用ansible-playbook命令執行該playbook,任務完成。

測試對比 前面提到,GlobalSSH大幅提升了咱們海外部署的效率。能夠經過另寫一個無GlobalSSH加速的Playbook,來測試一下具體的加速效果。

無GlobalSSH的Playbook寫起來比較簡單,和上文基本相似,區別在第三步的hosts文件裏不使用加速域名,而是直接填寫原有的外網IP地址。

爲防止單次測試結果的不許確,這裏測試了10次,取平均值進行比較。

測試命令:

time for i in seq 1 10; do ansible-playbook -i hosts_nrly test_playbook.yml; done time for i in seq 1 10; do ansible-playbook -i hosts_nrly_1 test_playbook.yml; done 最終的結果以下所示,能夠看到在簡單的Ansible Playbook部署中, 通過GlobalSSH加速後的效果提高了32.23%.

Ansible Ad-hoc方式 GlobalSSH在低速的帶寬下能夠提高整個網絡傳輸的穩定性和速度,尤爲是對RTT (Round-Trip Time)往返延遲的提高,更是有着外網彈性IP所不具有的速度優點。 所以咱們認爲它對Ansible Ad-hoc方式也有很大幫助。

運維人員常常會用Ad-hoc方式,它相似pssh,卻支持Ansible全部的module語法,一般的使用場景是批量執行命令並查看回顯結果。爲了驗證假設,咱們對Ad-hoc方式也作了相似測試,發現GlobalSSH後的優化效果更明顯,優化速度超過50%,詳細結果以下所示。

測試命令:

time for i in seq 1 10; do ansible -i hosts_nrly all -m shell -a "cat /var/log/messages"; done time for i in seq 1 10; do ansible -i hosts_nrly_1 all -m shell -a "cat /var/log/messages"; done

測試結果:

總結 Ansible是被大量使用的DevOps工具,咱們在使用中根據須要,將GlobalSSH很容易地集成其中,避免了服務器部署中SSH卡頓形成的不良影響。

更多深度技術內容,微信關注「UCloud技術」。

相關文章
相關標籤/搜索