自动化运维工具Ansible(12)调试与优化 Ansible

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述自动化运维工具Ansible(12)调试与优化 Ansible相关的知识,希望能为你提供帮助。
一、调试在执行 ad-hoc 或者 playbook 的时候,在后面加上 `-vvv` 参数,就可以看到   Ansible 的详细执行过程,便于排错。

[root@localhost home]# vim checkhost.yml
- hosts: all
tasks:
- name: check ping
ping

[root@localhost ~]# ansible dbservers -i hosts -m ping -vvv

[root@localhost ~]# ansible-playbook -i hosts checkhost.yml -vvv

限制授影响的主机
`--limit`   后面跟主机名或者主机组名
[root@localhost ~]# ansible-playbook -i hostscheckhosts.yml --limit dbservers -vvv



二、优化 Ansible 执行速度openssh5.6 版本后支持Multiplexing
设置 SSH 为长连接
检查控制机器的 ssh 版本 
[root@qfedu.com ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips26 Jan 2017



升级 ssh 客户端程序
  • 假如不是 5.6 版本以上的,可以用下面的办法升级 ssh 客户端程序
  • Centos6 系统的 YUM 源
ansible cat /etc/yum.repos.d/openssh.repo
[CentALT]
name=CentALT Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirror.neu.edu.cn/CentALT/6/$basearch/
enable=1
gpgcheck=0
[root@localhost ~]# yum update openssh-clients

升级完成后,不必重启任何服务,因为我们的控制机是使用 ssh 的客户端


设置 ansible 配置文件
设置好后,重新连接一次被控主机,即可让控制主机和被控主机之间建立长连接
[root@localhost ~]# vim /etc/ansible/an0ible.cfg
ssh_args = -C -o ControlMaster=auto -o ControlPersist=6000s//开启此行

[root@localhost ~]# ansible-playbook -i hosts checkhost.yml

验证长连接
【自动化运维工具Ansible(12)调试与优化 Ansible】输出中 有 `ESTAB` 状态的就代表是长连接
同时会在主控机当前用户的家目录下的 .ansibl/cp/ 目录下生成对应的 socket 文件



开启 pipelining
默认情况下 Ansible 执行过程中会把生成好的本地 python 脚本文件 PUT 到 远端机器。如果我们开启了 ssh 的 pipelining 特性,这个过程就会在 SSH 的会话中进行。

在不通过实际文件传输的情况下执行ansible模块来使用管道特性, 可以减少执行远程服务器上的模块所需的网络操作数量。比如 PUT sftp 等操作都需要建立网络连接。
如果开启这个设置,将显著提高性能.。
然而当使用”sudo:”操作的时候, 你必须在所有管理的主机的 `/etc/sudoers` 中禁用 `requiretty`.
实现步骤
1) 在 ansible.cfg 配置文件中设置 pipelining 为 True
[root@localhost home]# vim /etc/ansible/ansible.cfg
pipelining = True

2) 配置被控主机的 `/etc/sudoers` 文件,添加下面的内容
# Disable "ssh hostname sudo < cmd> ", because it will show the password in clear text.
# You have to run "ssh -t hostname sudo < cmd> ".
#
# Defaultsrequiretty




    推荐阅读