自动化运维工具Ansible(12)调试与优化 Ansible
Posted 资本家的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具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 hosts checkhosts.yml --limit dbservers -vvv
二、优化 Ansible 执行速度
openssh5.6 版本后支持Multiplexing
设置 SSH 为长连接
检查控制机器的 ssh 版本
[root@qfedu.com ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 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
验证长连接
输出中 有 `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>".
#
# Defaults requiretty
以上是关于自动化运维工具Ansible(12)调试与优化 Ansible的主要内容,如果未能解决你的问题,请参考以下文章
shell + ansible + gateone 自动化运维管理