Ansible自動化運維學習之五:Ansible配置文件詳解與調優

一、常用參數詳解
本文對 https://blog.51cto.com/8355320/2471354 的參數配置進行了擴充。
Ansible默認配置文件爲/etc/ansible/ansible.cfg,配置文件中可以對ansible進行各項參數的調整,包括併發線程、用戶、模塊路徑、配置優化等,常用參數如下:

[defaults]
inventory  = /etc/ansible/hosts             被控端IP信息列表;
library  = /usr/share/my_modules/       Ansible默認模塊的位置;
remote_tmp = $HOME/.ansible/tmp       Ansible遠程主機執行臨時文件路徑;
pattern = *    匹配對所有主機通信;
forks  = 5      默認並行進程數量;
poll_interval  = 15       默認輪訓間隔時間;
sudo_user      = root       sudo遠程主機執行用戶名(需要配置sudo權限);
ask_sudo_pass = True    使用sudo時是否需要輸入root密碼;
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性能調優

具體優化的方法如下:
(1) Ansible SSH 關閉祕鑰檢測
默認以SSH登錄遠程客戶端服務器,會檢查遠程主機的公鑰(public key),並將該主機的公鑰記錄在~/.ssh/known_hosts文件中。下次訪問相同主機時,OpenSSH會覈對公鑰,如果公鑰不同,OpenSSH會發出警告,如果公鑰相同,則提示輸入密碼。
SSH對主機的public_key的檢查等級是根據StrictHostKeyChecking變量來設定的,StrictHostKeyChecking檢查級別包括:no(不檢查)、ask(詢問)、yes(每次都檢查)、False(關閉檢查)。
Ansible配置文件中加入如下代碼,即可關閉StrictHostKeyChecking檢查:

配置內容
host_key_checking = False

(2) OpenSSH連接優化
使用OpenSSH服務時,默認服務器端配置文件UseDNS=YES狀態,該選項會導致服務器根據客戶端的IP地址進行DNS PTR反向解析,得到客戶端的主機名,然後根據獲取到的主機名進行DNS正向A記錄查詢,並驗證該IP是否與原始IP一致。關閉DNS解析代碼如下:

操作指令
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選項禁用。

操作指令
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文件中加入如下代碼即可:

代碼內容
gather_facts: no

Ansible facts組件主要用於收集客戶端設備的基礎靜態信息,這些信息可以在做配置管理的時候方便引用。Facts信息直接當做Ansible Playbook變量信息進行引用,通過定製facts以便收集我們想要的信息,同時可以通過Facter和Ohai來拓展facts信息,也可以將facts信息存入Redis緩存中,如下爲Facts使用Redis緩存的步驟。
1、部署Redis服務

[root@ansible~]# yum -y install gcc gcc-c++
[root@ansible~]# cd /usr/local/src
[root@ansible~src]# wget http://download.redis.io/releases/redis-4.0.2.tar.gz
[root@ansible~src]# tar -zxvf redis-4.0.2.tar.gz
[root@ansible~src]# cd redis-4.0.2
[root@ansible~redis-4.0.2]# make MALLOC=libc
[root@ansible~redis-4.0.2]# cd src
[root@ansible~src]# make install PREFIX=/usr/local/redis/
[root@ansible~src]# cp redis.conf /usr/local/redis/
[root@ansible~src]# vi /etc/profile
export PATH=/usr/local/redis/bin:$PATH
[root@ansible~src]# source /etc/profile

啓動及停止Redis服務命令:
[root@ansible~src]# nohup /usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf  &

2、安裝Python Redis模塊

安裝指令
[root@ansible~]# easy_install pip
[root@ansible~]# pip install redis

3、 Ansible整合Redis配置
在配置文件/etc/ansible/ansible.cfg中defaluts段中加入代碼,如果redis密碼爲admin,則開啓admin密碼行:

代碼如下
[root@ansible~]# /etc/ansible/ansible.cfg
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379
#fact_caching_connection = localhost:6379:0:admin

4、 測試Redis緩存
Ansible-playbook執行nginx.yaml劇本文件,如圖所示:
ansible-playbook nginx.yaml
Ansible自動化運維學習之五:Ansible配置文件詳解與調優
(5) ControlPersist SSH優化
ControlPersist 特性需要高版本的SSH支持,CentOS6默認是不支持的,如果需要使用,需要自行升級Openssh。
ControlPersist 即持久化的Socket,一次驗證多次通信。並且只需要修改SSH客戶端配置,也即Ansible被管理主機。
可使用YUM或者源碼編譯升級OpenSSH服務,升級完畢ControlPersist的設置辦法如下,在其用戶的家目錄創建config文件,如果ansible以root用戶登錄客戶端,至需要在客戶端的/root/.ssh/conf文件中添加如下代碼即可:

代碼內容
Host * 
  Compression yes 
  ServerAliveInterval 60 
  ServerAliveCountMax 5
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 4h

開啓ControlPersist 特性後,SSH 在建立sockets後,節省了每次驗證和創建的時間,對Ansible執行速度提升是非常明顯的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章