Ansible企業實戰環境中,若是管理的服務器愈來愈多,Ansibe執行效率會變得比較慢,能夠經過優化Ansible提供工做效率,因爲Ansible基於SSH協議通訊,SSH鏈接慢會致使整個基於Ansible執行變得緩慢,也須要對Openssh進行優化,具體優化的方法以下:nginx
1.關閉ansible的SSH密鑰檢測redis
ansible默認是以ssh來實現遠程推送執行的,是基於ssh祕鑰檢測,會檢測遠程主機的公鑰,並記錄在本地中known_host文件中,下次訪問主機時,會覈對公鑰,若是公鑰不一樣,openssh會發出警告,若是相同,會提示輸入密碼vim
SSH對主機的public_key的檢查等級是根據StrictHostKeyChecking變量來設定的,StrictHostKeyChecking檢查級別包括:no(不檢查)、ask(詢問)、yes(每次都檢查)、False(關閉檢查)。緩存
#vim /etc/ansible/ansible.cfg 服務器
host_key_checking = False #關閉StrictHostKeyChecking檢查ssh
使用OpenSSH服務時,默認服務器端配置文件UseDNS=YES狀態,該選項會致使服務器根據客戶端的IP地址進行DNS PTR反向解析,獲得客戶端的主機名,而後根據獲取到的主機名進行DNS正向A記錄查詢,並驗證該IP是否與原始IP一致。關閉DNS解析代碼以下:測試
2.openssh連接優化優化
sed -i '/^GSSAPI/s/yes/no/g;/UseDNS/d;/Protocol/aUseDNS no' /etc/ssh/sshd_configui
SSH pipelining是一個加速 Ansible 執行速度的簡單方法,SSH pipelining 默認是關閉的,關閉是爲了兼容不一樣的 sudo 配置,主要是requiretty 選項。spa
3. SSH pipelining加速Ansible
若是不使用Sudo建議開啓該選項,打開此選項能夠減小Ansible 執行沒有文件傳輸時,SSH在被控機器上執行任務的鏈接數。使用Sudo操做的時候, 必須在全部被管理的主機上將配置文件/etc/sudoers中requiretty選項禁用。
Ansible-playbook 在執行過程當中,默認會執行Gather facts,若是不須要獲取客戶端的fact數據的話,能夠關閉獲取fact數據功能,關閉以後能夠加快ansible-playbook的執行效率。如需關閉fact功能,在playbook yaml文件中加入以下代碼便可:
sed -i '/^pipelining/s/False/True/g' /etc/ansible/ansible.cf
4. Ansible Facts緩存優化
gather_facts: nogather_facts: no
5.部署Redis服務Ansible facts組件主要用於收集客戶端設備的基礎靜態信息,這些信息能夠在作配置管理的時候方便引用。Facts信息直接當作Ansible Playbook變量信息進行引用,經過定製facts以便收集咱們想要的信息,同時能夠經過Facter和Ohai來拓展facts信息,也能夠將facts信息存入Redis緩存中,以下爲Facts使用Redis緩存的步驟。
wget http://download.redis.io/releases/redis-2.8.13.tar.gz tar zxf redis-2.8.13.tar.gz cd redis-2.8.13 make PREFIX=/usr/local/redis install cp redis.conf /usr/local/redis/export PATH=/usr/local/redis/bin:$PATH #將/usr/local/redis/bin/目錄加入至環境變量配置文件/etc/profile末尾,而後Shell終端執行source /etc/profile讓環境變量生效。
安裝Python Redis模塊
easy_install pip
pip install redis
Ansible整合Redis配置
在配置文件/etc/ansible/ansible.cfg中defaluts段中加入代碼,若是redis密碼爲admin,則開啓admin密碼行:
gathering = smart fact_caching = redis fact_caching_timeout = 86400 fact_caching_connection = localhost:6379 #fact_caching_connection = localhost:6379:0:admin
#Ansible-playbook執行nginx_wget.yaml劇本文件,測試Redis緩存
ansible-playbook nginx_wget.yaml