QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

  • 2019-04-30
  • 本文字数:2430 字

    阅读完需:约 8 分钟

使用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%.


使用方式运行10次总时间平均时间提升效率
使用外网IP10m52.197s65.20s
使用GlobalSSH域名加速7m21.898s44.19s32.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
复制代码


测试结果:


使用方式运行10次总时间平均时间提升效率
使用外网IP3m17.427s19.74s
使用GlobalSSH域名加速1m23.983s8.40s57.45%

总结

Ansible 是被大量使用的 DevOps 工具,我们在使用中根据需要,将 GlobalSSH 很容易地集成其中,避免了服务器部署中 SSH 卡顿造成的不良影响。


本文来源:UCloud 技术(微信公众号:ucloud_tech)


原文链接:https://mp.weixin.qq.com/s/1NqBRSAC6-EM0K079t28Ag


2019-04-30 08:005913

评论

发布
暂无评论
发现更多内容

代理服务器转发消息时的相关头部(qbit)

qbit

正向代理与反向代理 Proxy

SpringBoot 如何进行对象复制,老鸟们都这么玩的

Java 架构 后端 计算机 框架

一年数十万次实验背后的架构与数据科学

百度开发者中心

人工智能 架构 最佳实践 方法论 数据科学

分布式事务内存数据库--MemDB

hanaper

张宏江出席HICOOL 2021全球创业者峰会,阐述AI研究与创业新机遇

硬科技星球

人工智能 大模型时代 悟道2.0

什么?分布式事务现在不是都在用么?你还不会?

Java 架构 分布式 后端 计算机

TDSQL数据同步和备份

腾讯云数据库

数据库 tdsql

要不要换种方式开发软件?

鲸品堂

软件开发

TDSQL金融级特性之:数据强一致性保障

腾讯云数据库

数据库 tdsql

自定义View笔记

Changing Lin

9月日更

NoSQL数据库——Cassandra

hanaper

TDSQL是什么:腾讯如何打造一款金融级分布式数据库

腾讯云数据库

数据库 tdsql

IT大厂八股文更新上线的操作系统,刚上线点击量破百万!赶紧收藏

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

为抢人才,字节架构师竟将42W字「2021大厂真题集」,上传GitHub

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

如何让项目准时上线 - 续篇

石云升

项目管理 管理 引航计划 内容合集 9月日更

TDSQL 全时态数据库系统 -- 典型案例

腾讯云数据库

数据库 tdsql

分布式TDSQL的实践

腾讯云数据库

数据库 tdsql

马某兵VIP资料惨遭泄露,Java大厂面试手册,21年高频题版

Java架构师迁哥

爬虫初探: 一次爬虫的编写尝试

程序员架构进阶

实战问题 个人思考 9月日更 spider 搜索结果

史诗级放水…字节3-2大牛分享350道Java岗真题,刷完获阿里offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Alibaba最新发布:2021最符合Java程序员的“学习路线”

Java架构师迁哥

淘宝网 Java 千亿级并发系统架构设计笔记(全彩版小册开源)

Java 架构 面试 后端 高并发

智慧物流可视化,能否解决购物节后的爆仓危机?

ThingJS数字孪生引擎

大前端 物联网 可视化 智慧物流 数字孪生

突击 22 天面进腾讯,给到 32K*14 薪!全靠这份阿里面试参考指南了

Java 程序员 架构 面试 计算机

TDSQL核心特性:极具挑战的“四高”服务与安全可运维

腾讯云数据库

数据库 tdsql

TDSQL核心架构

腾讯云数据库

数据库 tdsql

吊打面试官必备-阿里内部性能优化实战手册

Java架构师迁哥

Alibaba内部713页Java程序性能优化实战手册首次开放!大受好评

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

阿里IM技术分享(三):闲鱼亿级IM消息系统的架构演进之路

JackJiang

架构 即时通讯 IM

字节内部进阶用的Java中高级岗技术图谱到底泄露了,和开源没区别

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

非科班杀进字节跳动,全靠GitHub公认最强的数据结构与算法笔记

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

使用GlobalSSH加速Ansible海外部署效率_软件工程_赵新宇_InfoQ精选文章