Ansible 速度优化

1、Ansible的并发和异步

            Anisble默认是同步阻塞模式,他会等待所以机器执行完毕后才会向前台返回。Ansible默认只会创建5个进程执行并发任务。

           Anisble除了支持同步模式外还支持异步模式。下面的这种情况需要使用的异步特性

                      (1)当我们有一个task需要运行很长的时间,而且这个task可能会达到timeout时。

                      (2)当我们有一个任务需要在大量的机器上运行时

                      (3)当我们有一个任务不需要等待它完成时

官方给的示例代码如下所示:

---
- hosts: all
  remote_user: root
  tasks:
    - name: simulate long running op (15 sec),wait for up to 45 sec,poll every 5 sec
        command: /bin/sleep 15
        async: 45
        poll: 5

async:代表这个任务执行时间的上线值,如果执行所用时间超过了这个时间点,则认为任务失败,若没设置参数,则同步执行

poll:表示 任务异步执行时间轮询的时间间隔

在此异步模式下,Ansible 会将节点的任务丢在后台,每台被控制的机器都有一个job_id, Ansible 会根据这个job id去轮询该机器上任务的执行情况,例如某机器H此任务中的某一个阶段是否完成,是否进入下一个阶段等。即使任务早就结束了,也只有等轮询检查到任务结束之后才认为该任务结束。可以指定任务检查的时间间隔,默认是10秒。除非指定任务检查的时间间隔为0,否则会等待所有任务都完成后,Ansible 端才会释放占用的Shell.如果指定的时间间隔为0,则Ansible会立即返回(至少得连接上目标主机,任务发布成功之后立即返回),并且不会检查它的任务进度。

ansible  webserver -B 30 P 0 -m yum -a ' name=php' -vv

参数说明:-B 30 表示启用异步,超时时间为30秒,-P0表示轮询时间为0 既不检查任务进度,立即返回结果

2、开启 SSH MUltiplexing
我们一般远程主机都是用openssh程序进行远程连接,openssh支持一个优化 称为 SSH Multiplexing (简称为多路复用),多个连接到相同的被控主机的SSH绘画将会共享相同的TCP连接,只有第一次连接的时候进行3次握手。

具体方法:修改/root/.ssh/config文件

Host *
ControlMaster auto
ControlPath /tmp/master-%r@%h:%p
ControlPersist 10m

3、开始SSH pipelining

下面回忆一下Ansible 是如何执行一个tak任kptinge也是OoS的特性之一,的,具体步骤如下所示。
1) Asle基于调用的模块生成一个Python临时脚本。
2)它将此临时脚本复制到被控端主机上。
3)执行此Python临时脚本。
4)执行成功以后删除此临时脚本,抹去痕迹。

具体方法如下:

编辑Ansible配置文件,在【ssh_connection】加以下内容

pipelining = True

4、fscts缓存

每次在运行tasks任务时都会收集主机信息,这个过程就是在收集每台主机的facts信息,我们可以通过redis的方式来缓存facts的方式

修改ansible配置文件

gathering = smart
fact_caching = redis
fact_cashing_timeout = 86400
fact_caching_connection = 127.0.0.1:6739

......

                       

            

人生苦短,我用Python
原文地址:https://www.cnblogs.com/sunjinchao/p/14440800.html