今天分享一下Ansible在工做環境中有那些能夠優化的配置
環境介紹:之前在公司工做處理服務器問題,須要用批量操做都是用shell腳本編寫的工具,後來發現Ansible這個自動化工具,安裝簡單,操做起來很方便,支持多個模塊,由python開發基於SSH協議通訊的工具。這裏有個問題就是若是服務器愈來愈多,Ansibe執行效率會變得比較慢,能夠經過優化Ansible提供工做效率,具體優化的方法以下:
線上管理機器:操做系統Linux,cpu爲4核,內存8G,用這個機器管理上千臺Linux服務器都沒有太大壓力
1.修改ansible的併發數
Ansible默認只會建立5個進程併發執行任務,因此一次任務只能同時控制5臺機器執行。若是有大量的機器須要控制,例如20臺,Ansible執行一個任務時會先在其中5臺上執行,執行成功後再執行下一批5臺,直到所有機器執行完畢。使用-f選項能夠指定進程數,指定的進程數量多一些,不只會實現全併發,對異步的輪訓poll也會有正面影響。
2.關閉ansible的SSH密鑰檢測python
ansible默認是以ssh來實現遠程推送執行的,是基於ssh祕鑰檢測,會檢測遠程主機的公鑰,並記錄在本地中known_host文件中,下次訪問主機時,會覈對公鑰,若是公鑰不一樣,openssh會發出警告,若是相同,會提示輸入密碼
SSH對主機的public_key的檢查等級是根據StrictHostKeyChecking變量來設定的,StrictHostKeyChecking檢查級別包括:no(不檢查)、ask(詢問)、yes(每次都檢查)、False(關閉檢查)。
#vim /etc/ansible/ansible.cfg
host_key_checking = False #關閉StrictHostKeyChecking檢查 默認是關閉的
3.openssh連接優化shell
使用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
4.ssh pipelining加速ansible
pipeline是openssh的一個特性,ssh pipelining 是一個加速Ansible執行速度的簡單方法。
在ansible執行每一個任務的整個流程中,有一個過程是將臨時任務文件put到遠程的ansible客戶機上,而後經過ssh鏈接過去遠程執行這個任務。
若是開啓了pipelining,一個任務的全部動做都在一個ssh會話中完成,也會省去sftp到遠端的過程,它會直接將要執行的任務在ssh會話中進行。
ssh pipelining 默認是關閉!!!!之因此默認關閉是爲了兼容不一樣的sudo 配置,主要是 requiretty 選項。若是不使用sudo,建議開啓!!!
打開此選項能夠減小ansible執行沒有傳輸時ssh在被控機器上執行任務的鏈接數。
不過,若是使用sudo,必須關閉requiretty選項。修改/etc/ansible/ansible.cfg 文件能夠開啓pipeliningvim
sed -i '/^pipelining/s/False/True/g' /etc/ansible/ansible.cf
5.Ansible Facts緩存優化
Ansible-playbook 在執行過程當中,默認會執行Gather facts,若是不須要獲取客戶端的fact數據的話,能夠關閉獲取fact數據功能,關閉以後能夠加快ansible-playbook的執行效率。如需關閉fact功能,在playbook yaml文件中加入以下代碼便可: