美文网首页Ansibleansible应用合集ansible
3个让Ansible性能飞起的简单优化方案!

3个让Ansible性能飞起的简单优化方案!

作者: 乐维_lwops | 来源:发表于2018-11-26 11:54 被阅读1次

    Ansible 性能优化

    在使用 Ansible 的过程中,当管理的服务器数量增加时,不得不面对一个无法避免的问题执行效率慢,这里列出一些解决方案。

    一、gathering facts优化前的准备—收集数据

    在做性能优化之前首先需要做的是收集一些统计数据,这样才能为后面做的性能优化提供数据支持,对比优化前后的结果。非常不错的是,在 github 发现一个 Ansible 任务计时插件“ansible-profile”,安装这个插件后会显示 ansible-playbook 执行每一个任务所花费的时间。Github 地址:https://github.com/jlafon/ansible-profile。 这个插件安装很简单,只需要简单的三个命令即可完成安装。在你的 playbook 文件的目录下创建一个目录,目录名 callback_plugins 然后将下载的 profile_tasks.py 文件放到该目录下。

    cd /etc/ansible 

    mkdir callback_plugins 

    cd callback_plugins 

    wget https://raw.githubusercontent.co ... ns/profile_tasks.py

    现在,执行 ansible-playbook 命令就会看到 playbook 中每个 tasks 的用时情况。

    图 1.ansible-playbook tasks 用时情况

    在这里,我设置了 2 个 task,1 个 task sleep 10 秒,另 1 个 task sleep 15 秒,在 PLAY RECAP 处会汇总所有 task 执行消耗的时间。

    关闭 gathering facts

    如果您观察过 ansible-playbook 的执行过程中,您会发现 ansible-playbook 的第 1 个步骤总是执行 gather facts,不论你有没有在 playbook 设定这个 tasks。如果你不需要获取被控机器的 fact 数据的话,你可以关闭获取 fact 数据功能。关闭之后,可以加快 ansible-playbook 的执行效率,尤其是你管理很大量的机器时,这非常明显。关闭获取 facts 很简单,只需要在 playbook 文件中加上“gather_facts: no”即可。如下

    --- 

    - hosts: 172.16.64.240 

    gather_facts: no 

    remote_user: liheng 

    sudo: yes 

    roles: 

    - {role: profile_test}

    好的,来看关闭前后的执行时间变化。

    图 2. 关闭 gather_facts 前后的执行变化

    关闭前后,执行时间相关 1 秒,因为我这里只有一台机器,所以时间差距并不是很明显。不过,从这个例子也可以看出,关闭 facts 获取后,执行速度是快了的。

    二、SSH PIPElinING

    SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。如果不使用 sudo,建议开启。打开此选项可以减少 ansible 执行没有传输时 ssh 在被控机器上执行任务的连接数。不过,如果使用 sudo,必须关闭 requiretty 选项。修改 /etc/ansible/ansible.cfg 文件可以开启 pipelining

    pipelining=False

    修改为

    pipelining=True

    修改完后,可以批量对机器执行命令试下,可以明显感受到速度的提升。

    三、ControlPersist

    ControlPersist 特性需要高版本的 SSH 才支持,CentOS 6 默认是不支持的,如果需要使用,需要自行升级 openssh。ControlPersist 即持久化 socket,一次验证,多次通信。并且只需要修改 ssh 客户端就行,也就是 Ansible 机器即可。

    升级 openssh 的过程这里不做介绍。这里只介绍下 ControlPersist 设置的办法。

    cat ~/.ssh/config 

    Host * 

    Compression yes 

    ServerAliveInterval 60 

    ServerAliveCountMax 5 

    ControlMaster auto 

    ControlPath <a href="mailto:~/.ssh/sockets/%25r@%25h-%25p"><code>~/.ssh/sockets/%r@%h-%p</code></a>

    ControlPersist 4h

    在开启了 ControlPersist 特性后,SSH 在建立了 sockets 之后,节省了每次验证和创建的时间。在网络状况不是特别理想,尤其是跨互联网的情况下,所带来的性能提升是非常可观的。有这边需求的,试试就知道了。


    转自

    Ansible 性能一些优化方案

    (出处: 乐维论坛)

    相关文章

      网友评论

        本文标题:3个让Ansible性能飞起的简单优化方案!

        本文链接:https://www.haomeiwen.com/subject/vvzvqqtx.html