Ansible 配置文件详解
常用参数详解:
[defaults] | 通用默认配置段; |
---|---|
inventory = /etc/ansible/hosts | 被控端 IP 或者 DNS 列表; |
library = /usr/share/my_modules/ | Ansible 默认搜寻模块的位置; |
remote_tmp = $HOME/.ansible/tmp | Ansible 远程执行临时文件; |
pattern = * | 对所有主机通信; |
forks = 5 | 并行进程数; |
poll_interval = 15 | 回频率或轮训间隔时间; |
sudo_user = root | sudo 远程执行用户名; |
ask_sudo_pass = True | 使用 sudo,是否需要输入密码; |
ask_pass = True | 是否需要输入密码; |
transport = smart | 通信机制; |
remote_port = 22 | 远程 SSH 端口; |
module_lang = C | 模块和系统之间通信的语言; |
gathering = implicit | 控制默认 facts 收集(远程系统变量); |
roles_path= /etc/ansible/roles | 用于 playbook 搜索 Ansible roles; |
host_key_checking = False | 检查远程主机密钥; |
#sudo_exe = sudo | sudo 远程执行命令; |
#sudo_flags = -H | 传递 sudo 之外的参数; |
timeout = 10 SSH | 超时时间; |
remote_user = root | 远程登陆用户名; |
log_path = /var/log/ansible.log | 日志文件存放路径; |
module_name = command | Ansible 命令执行默认的模块; |
#executable = /bin/sh | 执行的 Shell 环境,用户 Shell 模块; |
#hash_behaviour = replace | 特定的优先级覆盖变量; |
#jinja2_extensions | 允许开启 Jinja2 拓展模块; |
#private_key_file = /path/to/file | 私钥文件存储位置; |
#display_skipped_hosts = True | 显示任何跳过任务的状态; |
#system_warnings = True | 禁用系统运行 ansible 潜在问题警告; |
#deprecation_warnings = True | Playbook 输出禁用"不建议使用"警告; |
#command_warnings = False | command 模块 Ansible 默认发出警告; |
#nocolor = 1 | 输出带上颜色区别,开启/关闭:0/1; |
pipelining = False | 开启 pipe SSH 通道优化; |
[accelerate] | accelerate 缓存加速。 |
accelerate_port = 5099 | |
accelerate_timeout = 30 | |
accelerate_connect_timeout = 5.0 | |
accelerate_daemon_timeout = 30 | |
accelerate_multi_key = yes |
Ansible 性能调优
Ansible 企业实战环境中,如果管理的服务器越来越多,Ansibe 执行效率会变得比较慢,可以通过优化 Ansible 提供工作效率,由于 Ansible 基于 SSH 协议通信,SSH 连接慢会导致整个基于 Ansible 执行变得缓慢,也需要对 Openssh 进行优化,具体优化的方法如下:
(1) Ansible SSH 关闭秘钥检测
默认以 SSH 登录远程客户端服务器,会检查远程主机的公钥(public key),并将该主机的公钥记录在~/.ssh/known_hosts 文件中。下次访问相同主机时,OpenSSH 会核对公钥,如果公钥不同,OpenSSH 会发出警告,如果公钥相同,则提示输入密码。
SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来设定的StrictHostKeyChecking 检查级别包括:no(不检查)、ask(询问)、yes(每次都检查)、False(关闭检查)。
Ansible 配置文件中加入如下代码,即可关闭 StrictHostKeyChecking 检查:
ini
host_key_checking = False
(2) OpenSSH 连接优化
使用 OpenSSH 服务时,默认服务器端配置文件 UseDNS=YES 状态,该选项会导致服务器根据客户端的 IP 地址进行 DNS PTR 反向解析,得到客户端的主机名,然后根据获取到的主机名进行 DNS 正向 A 记录查询,并验证该 IP 是否与原始 IP 一致。关闭 DNS 解析代码如下:
ini
sed -i '/^GSSAPI/s/yes/no/g; /UseDNS/d; /Protocol/aUseDNS no' /etc/ssh/sshd_config
/etc/init.d/sshd restart
(3) SSH pipelining 加速 Ansible
SSH pipelining 是一个加速 Ansible 执行速度的简单方法,SSH pipelining 默认是关闭的,关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。
如果不使用 Sudo 建议开启该选项,打开此选项可以减少 Ansible 执行没有文件传输时,SSH 在被控机器上执行任务的连接数。使用 Sudo 操作的时候, 必须在所有被管理的主机上将配置文件/etc/sudoers 中 requiretty 选项禁用。
ini
sed -i '/^pipelining/s/False/True/g' /etc/ansible/ansible.cfg
(4)Ansible Facts 缓存优化
Ansible-playbook 在执行过程中,默认会执行 Gather facts,如果不需要获取客户端的 fact 数据的话,可以关闭获取 fact 数据功能,关闭之后可以加快 ansible-playbook的执行效率。如需关闭 fact 功能,在 playbook yaml 文件中加入如下代码即可:
ini
gather_facts: nogather_facts: no
Ansible facts 组件主要用于收集客户端设备的基础静态信息,这些信息可以在做配置管理的时候方便引用。Facts 信息直接当做 Ansible Playbook 变量信息进行引用,通过定制 facts 以便收集我们想要的信息,同时可以通过 Facter 和 Ohai 来拓展 facts 信息,也可以将 facts 信息存入 Redis 缓存中,如下为 Facts 使用 Redis 缓存的步骤
ini
在配置文件/etc/ansible/ansible.cfg 中 defaluts 段中加入代码,如果 redis 密码为 admin,则开启 admin 密码行:
# yum install -y python-pip
# pip install redis==3.0.0
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379
#fact_caching_connection = localhost:6379:0:admin
也可以使用json来缓存信息
ini
fact_caching = jsonfile
fact_caching_timeout = 86400
fact_caching_connection = /tmp