Ansible 优化


原文链接: Ansible 优化

Ansible 优化

Ansible 优化
    开启 SSH 长连接
    开启 Pipelining
    开启 Accekerate 模式
    设置 Facts 缓存

开启 SSH 长连接

Ansible 是使用 SSH 和远端主机进行通信,Ansible 对 SSH 的依赖性非常强,SSH 5.6+ 版本可以配置 Multiplexing 设置长连接。用兴趣请看 官方文档 参数:

sh_args = -o ControlMaster=auto -o ControlPersist=5d

设置整个长连接保持设置为 5,如果通过 SSH 连接后,会在当前 ansible/cp 目录下生成一个 socket 文件,此配置需要在 ansible.cfg 中设置 SSH 项里配置。
开启 Pipelining

Pipeliing 也是 OpenSSH 的一个特性,传输文件时将会在 SSH 会话中进行,开启 pipelining 需要控制机 /etc/sudoers 文件编辑当前 Ansible SSH 用户的配置为 requiretty,否则会报错,首先在 ansible.cfg 配置文件中设置 pipelining 为 True,下面进行一项测试:

pipelining = True

未开启 piplining 之前:

开启之后 piplining :

可以看到之后整个流程少了一个 PUT 脚本去远端服务器的流程。
开启 Accekerate 模式

Ansible 还有一个 accelerate 模式,这和前面 SSH 的 Multiplexing 有点类似,Ansible 依赖中控机跟远程机器有一个长连接,但是 accelerate 是使用 Python 程序在远程机器上运行的一个守护进程,然后 Ansible 会通过这个守护进程监听的端口进行通信,开启 accelerate 模式很简单,只要在 playbook 中 配置 accelerate:true 即可。但是需要注意,如果开启 accelerate 模式,需要在 Ansible 中控机与远程机器都安装 python-keyczar 软件包,且需要通过 ansible.cfg 进行参数这是,如远程机器的端口及 timeout 设置:

[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0

可以观看 源码文件 ,可以参考 debug 参数 -vvvv 进行流程的查看。
设置 Facts 缓存

在执行的所以 Playbook 的时候,默认的第一个 task 都是 GATGERING FACTS ,这个过程就是 Ansible 收集每台主机的 Facts 信息,方便在 Playbook 中直接引用 Facts 里的信息,如果需要要 Facts 信息,可以直接在 Playbook 中这是 gather_facts: False 提提高 Playbook 效率。如果想对其进行收集,又想加速需要使用 Facts 缓存,目前 Ansible 支持使用 JSON 文件存储 Facts 信息,案例:

gathering = smart
fact_caching_timeout = 86400
fact_caching = jsonfile
fact_caching_connection = /dev/shm/ansible_fact_cache

这里设置 facts 过期时间为 86400 秒,JSON 文件放在 /dev/shm/ansible_fact_cache 下,如果执行 Playbook 会在目录下生成对应主机 IP 的 JSON 格式信息,可以使用 python -m json.tool 文件内容。

Facts 可以支持 redis 和 memcached 存储,但是只能在本地实现,不支持远端,只需要把 fact_caching 参数改为 redis 或者 memcached 即可。

`