当前位置: 首页 > news >正文

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

什么是Ansible Ansible是一个简单高效、无Agent架构的自动化编排、部署及配置管理工具,通过SSH协议实现远程节点和管理节点之间的通信。

Ansible的目的是简化大量复杂重复的运维工作, 以精简的技术思路建立公司内统一的自动化文化。无Agent的架构使其比其他工具更显简单,基于SSH可以做到的事Ansible都可以做的更好,超高的易用度使其可以简单集成到现有体系之中,因而被广泛使用。

UCloud Ansible使用场景 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)四层转发。

Ansible Playbook方式部署 我们将GlobalSSH集成到Ansible,做一个简单的软件包拷贝及安装,步骤如下所示。

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技术”。

相关文章:

  • gulp的使用方法
  • npm更新升级
  • 微信自动跳转外部浏览器打开网页或下载APP的技术源码,可以避免分享链接被微信拦截...
  • 微信小程序中使用emoji表情相关说明
  • idou老师教你学istio30:Mixer Redis Quota Adapter 实现和机制
  • Anaconda 和 JetBrains 联手推出 'Anaconda的PyCharm'
  • 苹果、三星、华为们进场,睡眠产业的百家争鸣
  • Redis主从数据库同步
  • 前嗅ForeSpider脚本教程-链接抽取:链接在源码的js变量里写脚本
  • VS2017运行旧版本下的C程序工程
  • 2019年web前端前景分析
  • Learning OSG programing---Multi Camera in one window 在单窗口中创建多相机
  • 脚本检测Kafka和Zookeeper
  • 线程池参数原理及应用
  • 说说我心中的Linux系统
  • 《深入 React 技术栈》
  • centos安装java运行环境jdk+tomcat
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS编译提示和导航提示
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • javascript面向对象之创建对象
  • Linux gpio口使用方法
  • Linux中的硬链接与软链接
  • mysql_config not found
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PHP变量
  • vuex 笔记整理
  • 程序员最讨厌的9句话,你可有补充?
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 电商搜索引擎的架构设计和性能优化
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 对象管理器(defineProperty)学习笔记
  • 给github项目添加CI badge
  • 记一次用 NodeJs 实现模拟登录的思路
  • 来,膜拜下android roadmap,强大的执行力
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 日剧·日综资源集合(建议收藏)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 译米田引理
  • 智能合约Solidity教程-事件和日志(一)
  • 2017年360最后一道编程题
  • ionic异常记录
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​如何在iOS手机上查看应用日志
  • (1) caustics\
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)事件处理——(7)简单事件(Simple events)
  • (转)IOS中获取各种文件的目录路径的方法
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .gitattributes 文件
  • .mysql secret在哪_MySQL如何使用索引
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别