(1) 模塊:copy、shell、lineinfile、replace、ping、yum
(2) 影響ansible性能的原因有兩種,一種是執(zhí)行上的資源浪費(fèi),需要對(duì)其進(jìn)行優(yōu)化; 另一種是進(jìn)程和反饋機(jī)制造成的限制,可以用async和poll 機(jī)制緩解
· ansible優(yōu)化:
- 關(guān)閉 gathering facts
- ansible-playbook 的第 1 個(gè)步驟總是執(zhí)行 gather facts,不論你有沒(méi)有在 playbook 設(shè)定這個(gè) tasks。如果你不需要獲取被控機(jī)器的 fact 數(shù)據(jù)的話,你可以關(guān)閉獲取 fact 數(shù)據(jù)功能
---
- hosts: 172.16.64.240
gather_facts: no
remote_user: XXX
sudo: yes | no
roles:
- {role: profile_test}
- SSH PIPElinING
- SSH pipelining 是一個(gè)加速 Ansible 執(zhí)行速度的方法,默認(rèn)為關(guān)閉,為了兼容不同的 sudo 配置(主要是 requiretty 選項(xiàng))。如果不使用 sudo,建議開(kāi)啟,打開(kāi)此選項(xiàng)可以減少ansible執(zhí)行沒(méi)有傳輸時(shí) ssh 在被控制機(jī)器上執(zhí)行任務(wù)的連接數(shù)。
- 如果使用 sudo,必須關(guān)閉 requiretty 選項(xiàng)
- 通過(guò)修改/etc/ansible/ansible.cfg 文件可以開(kāi)啟 pipelining
pipelining=True
- ControlPersist
- ControlPersist 特性需要高版本的 SSH 才支持,CentOS 6 默認(rèn)不支持,使用需要自行升級(jí)openssh。ControlPersist 即持久化 socket ,一次驗(yàn)證,多次通信,并且只需要修改 ssh 客戶端,即 Ansible 主機(jī)即可。
# cat ~/.ssh/config
ControlPersist 4h
# 開(kāi)啟了 ControlPersist 特性后,SSH 在建立了 sockets 之后,節(jié)省了每次驗(yàn)證和創(chuàng)建的時(shí)間。在網(wǎng)絡(luò)狀況不是特別理想,尤其是跨互聯(lián)網(wǎng)的情況下,所帶來(lái)的性能提升是非??捎^的
· 以上內(nèi)容為 ansible 調(diào)優(yōu)
· 因?yàn)閍nsible默認(rèn)最大進(jìn)程數(shù)為5,且默認(rèn)為同步執(zhí)行,只有當(dāng)上一條命令執(zhí)行結(jié)束,才會(huì)開(kāi)始執(zhí)行下一條命令,導(dǎo)致長(zhǎng)時(shí)間命令占用進(jìn)程,大大降低了并發(fā)效率,這里選擇用 async 和 poll 參數(shù)來(lái)解決,將長(zhǎng)任務(wù)扔進(jìn)后臺(tái)異步處理
· async 和 poll 介紹:讓下發(fā)的任務(wù)執(zhí)行的連接變?yōu)楫惒剑喝蝿?wù)下發(fā)之后,長(zhǎng)連接不再保持,而是每隔一段時(shí)間輪詢結(jié)果,直到任務(wù)結(jié)束
- async參數(shù)值代表了這個(gè)任務(wù)執(zhí)行時(shí)間的上限值。即任務(wù)執(zhí)行所用時(shí)間如果超出這個(gè)時(shí)間,則 認(rèn)為任務(wù)失敗。此參數(shù)若未設(shè)置,則為同步執(zhí)行。
- poll參數(shù)值代表了任務(wù)異步執(zhí)行時(shí)輪詢的時(shí)間間隔。
- 如果 poll 為0,代表不關(guān)心結(jié)果的任務(wù),async 為0 ,則代表一直等待這個(gè)job完成
- name: Run updatedb
command: /usr/bin/updatedb
async: 300
poll: 10
# 貌似這樣就可以解決5臺(tái)以上機(jī)子的問(wèn)題
沒(méi)有弄6臺(tái)以上機(jī)子做測(cè)試,好奇async為 0 時(shí),多臺(tái)機(jī)子的反饋機(jī)制