ansible設置串行的方法


實驗環境:ansible2.7

1、默認情況下,Ansible將嘗試並行管理playbook中所有的機器。對於滾動更新用例,可以使用serial關鍵字定義Ansible一次應管理多少主機:

- name: test play hosts: webservers serial: 2 gather_facts: False // 獲取主機相關信息 true|false
tasks: - name: task one comand: hostname - name: task two command: hostname 

 

在上面的例子中,如果我們在“WebServers”組中有4個主機,后面2個主機等到前面2個主機執行完后執行:

PLAY [webservers] **************************************** TASK [task one] ****************************************** changed: [web2] changed: [web1] TASK [task two] ****************************************** changed: [web1] changed: [web2] PLAY [webservers] **************************************** TASK [task one] ****************************************** changed: [web3] changed: [web4] TASK [task two] ****************************************** changed: [web3] changed: [web4] PLAY RECAP *********************************************** web1 : ok=2 changed=2 unreachable=0 failed=0 web2 : ok=2 changed=2 unreachable=0 failed=0 web3 : ok=2 changed=2 unreachable=0 failed=0 web4 : ok=2 changed=2 unreachable=0 failed=0 

 

2、還可以將serial關鍵字指定為百分比,表示每次並行執行的主機數占總數的比例:

- name: test play hosts: webservers serial: "30%" 

 

其他用法詳見官網:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#id10

 

 

 

Ansible 並行和異步

增加並行進程數

Ansible提供一個forks的屬性,可以設置運行並行進程數。這個值默認比較保守,只有5個並行進程。我們可以根據自己的機器性能以及網絡情況來設定,很多人使用50,也有用500以上的。如果有很多機器要管理的話,可以嘗試先增加這個值,看看效果。有三個地方可以設置forks的數量:

  • 環境變量:export ANSIBLE_FORKS=100
  • ansible.cfg這個配置文件里設置:forks=100
  • 運行ansible命令時增加參數:-f 100

當機器數量比較大的時候,難免會有幾台機器不能正常執行。這時候ansible會有提示to retry, use: --limit @/xxx/xxx.retry,把它增加到上個命令的后面就好了。

異步

有時候執行某個任務可能需要很長的時間,在集群規模較大的情況下慢得讓人無法忍受。這時可以考慮使用異步模式。在tasks里增加async的屬性,設成某個數字,比如60,意思就是這個任務最大運行時間不能超過60秒。也可以設成0,意思是不管任務運行多久,一直等待即可。如果沒有指定async,則默認為同步模式。還可以設定poll,默認值為10,意思就是每隔10秒輪詢查看結果。如果不需要查看結果,設為0就好了。還可以通過registerasync_status設定暫時不查看結果,等需要的時候再查看。具體做法可以參考上面的異步模式官網文檔,也可以看翻譯的中文文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM