Ansible执⾏速度优化
阅读原文时间:2023年07月09日阅读:1

个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_C.ying
CSDN主页️:念舒_C.ying

优化⼀: 开启SSH长连接

Ansible模式是使⽤SSH和远程主机进⾏通信, 所以Ansible对SSH的依赖性⾮常强, 在OpenSSH 5.6版本以后SSH就⽀持了Multiplexing, 关于这个特性我们可以参考 Multiplexing⼿册. 所以如果Ansible中控机的SSH -V版本⾼于5.6时, 我们可以直接在ansible.cfg⽂件中设置SSH⻓连接, 设置参数如下:

ssh_args = -C -o ControlMaster=auto -o ControlPersist=5d

ConrolPersist=5d, 这个参数是设置整个⻓连接保持时间为5天.
开启此参数后, 通过SSH连接过的设备都会在当前ansible/cp/⽬录下⽣成⼀个socket⽂件. 也可以通过netstat命令查看, 会发现有⼀个ESTABLISHED状态的连接⼀直与远程设备进⾏着TCP连接

netstat -anptu

优化二: 开启Pipelining

pipelining也是OpenSSH的⼀个特性, 在Ansible的整个执⾏流程中, 把⽣成好的本地python脚本PUT到远程服务器. 如果开启了pipelining, 这个过程将在SSH会话中进⾏, 这样可以⼤⼤提⾼整个执⾏效率. 当然开启pipelining, 需要被控机/etc/sudoers⽂件编辑当前Ansible SSH⽤户的配置为requiretty.否则在执⾏Ansible的时候会提示报错

bavdu@ansible:~$ sudo vim /etc/ansible/ansible.cfg
pipelining = True

这样开启了pipelining之后, ansible执⾏的整个流程就少了⼀个PUT脚本去远程服务端的流程

优化三: 开启accelerate模式

Ansible还有⼀个accelerate模式, 这和前⾯的Multiplexing有点类似, 因为都依赖Ansible中控机跟远程机器有⼀个⻓连接. 但是accelerate是使⽤python程序在远程机器上运⾏⼀个守护进程, 然后Ansible会通过这个守护进程监听的端⼝进⾏通信. 开启accelerate模式很简单, 只要在playbook中配置accelerate: true即可.
但是需要注意的是: 如果开启accelerate模式, 则需要在Ansible中控机与远程机器都安装pythonkeyczar软件包. 下⾯是在ansible.cfg⽂件中定义⼀些accelerate参数, 当然也可以在写playbook的时候再定义

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

优化四: 设置facts缓存

如果细⼼的话, 就会发现执⾏playbook的时候, 默认第⼀个task都是GATHERING FACTS, 这个过程就是Ansible在收集每台主机的facts信息. ⽅便我们在playbook中直接饮⽤facts⾥的信息. 当然如果你的playbook中不需要facts信息, 可以在playbook中设置gather_facts: False来提⾼playbook效率.
但是如果我们既想在每次执⾏playbook的时候都能收集facts, ⼜想加速这个收集过程, 那么就需要配置facts缓存了. ⽬前Ansible⽀持使⽤json⽂件存储facts信息. 如下设置示例:/etc/ansible/ansible.cfg

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

期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~