zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【SpringBoot学习笔记】无法解析parent POM——1.5.3.RELEASE
    【WPF学习日记——[DevExpress]】GridControl 行中使用按钮
    【Web学习日记】——C#引用WebService,从配置文件改变引用地址
    【Web学习日记】——在IIS上发布一个WebService
    【WPF学习日记】——Window的DataContext绑定ViewModel
    使用kubectl管理k8s集群
    使用Kubeadm创建k8s集群之节点部署
    使用Kubeadm创建k8s集群之部署规划
    kubernetes运维
    linux常用命令大全
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/14440800.html
Copyright © 2011-2022 走看看