Ansible慢?来看看怎么调优吧。

Posted 运维技术实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible慢?来看看怎么调优吧。相关的知识,希望对你有一定的参考价值。

本文根据Ansible作者Michael DeHaan的英文blog翻译整理而成。


Ansible是一个简单但却功能完整的、自动化系统上的IT工作流而不需要在其上安装任何管理代理的方案。


很多没有尝试过Ansible的人会认为基于SSH的系统运行起来没有Ansible实际上那么快(这导致了偶尔的担忧、不确定性和质疑,直到人们尝试它-特别是一些调优设置之后)。但我们已经付出了大量时间来调优底层实现-利用类似ControlPersist的东西和最少化SSH操作来确保Ansible是快速的。


特别重要的是,Ansible传输和执行模块-使用SSH作为一个传输层而不是一个完全的shell。它不仅仅执行和解析shell命令,所以它要执行的SSH操作的数量是经过极大优化的并且调用可以非常高效。而且,推(push)的架构实际上有助于避免一些在高CPU的拉式系统上出现的"惊群效应"的架构问题(虽然Ansible也可以运行在一个拉模式,稍后详细说明该点)。


随着部署规模增加,了解一些技巧来使它保持运行在最高效的状态是有帮助的。很多用户利用下面的技巧来使用Ansible管理数万台系统而在同一时间处理数千台。


让我们深入一些涉及到如何快速自动化部署的方法。即使你只有一个有限规模的基础设施,这也是一些可以遵守的好的技巧,因为随着你扩展规模,它们可以为你带来收益。


1、有效的使用镜像
 

在网络上等待是在更新过程中大部分的时间消耗所在。
如果你有数百或者数千系统,或者甚至数十个系统,每次你应用一个更新的时候让它们都从互联网来源上获取web资源是激进的。这包括类似请求远程软件包、下载压缩包等等。


最好是创建一个你所需要的包的本地镜像,这会使能更快和更可靠的部署以及更少的"惊喜"(当上游版本变化时)。类似yum的reposync和apt-cahcer-ng的工具使得创建本地镜像的工作变得相当简单。


也考虑下使用一个小的Ansible剧本(play)来下载任何你可能需要的压缩包到本地控制机器上然后使用unarchive模块把它们推送到远程节点上,而不是让你机队中的每个机器都访问某个人的web服务器集群。


2、优化包安装


Ansible是聪明的,它知道如何分组ym和apt事务以在一个事务块中安装多个包,所以在一个with_items块中安装尽可能多的包是一个巨大的优化。


3、了解你的"进程派生"


forks参数控制了Ansible可以并发的配置多少台主机。默认值是5。比较恰当的值是25,甚至100。对一个特定的剧本(play)来说,设置serial参数可以临时控制并发数量,比如滚动升级过程。


4、OpenSSH连接技巧


在大部分系统中运行Ansible时,默认的connection方法是原生OpenSSH。使用ControlPersist来控制Ansible保持连接到远程节点,减少新建TCP连接的时间。在使用了OpenSSH后,利用"pipelining"参数可以进一步提高性能。该值默认是禁用的(兼容性原因),但是绝大多数情况下值得你尝试启用该值以测试性能提升。


5、Paramiko连接技巧


此段忽略,推荐使用CentOS 7 或者Ubuntu 16.04 及以上而不是继续使用老的Paramiko实现。


6、拉模式(pull mode)


如果进行了以上的优化,基本上也不需要使用拉模式了。


7、不可变系统


使用Ansible来定义镜像构建然后使用云原生技术来部署它。例如Packer、aminiator和ansible的ec2_ami模块等工具提供了这种功能。


结论


对大部分基础设施来说,执行更新和部署的时间大部分花费在从网络上下载的过程。创建本地镜像是一个好主意。


而pipelining是进一步优化ansible的选项。配置项"forks"在控制并发执行方面起到重要作用。


以上是关于Ansible慢?来看看怎么调优吧。的主要内容,如果未能解决你的问题,请参考以下文章

Ansible自动化运维学习之五:Ansible配置文件详解与调优

Ceph ansible已支持dmcrypt

Ansible之常用模块

Ansible批量执行命令慢的解决思路

ansible的优化

Ansible自动化运维工具-上