Orange的運維學習日記--47.Ansible進階之異步處理

Orange的運維學習日記–47.Ansible進階之異步處理

文章目錄

  • Orange的運維學習日記--47.Ansible進階之異步處理
    • Playbook 執行順序原理
      • 可選執行策略
    • 調整并發連接數:forks 參數
      • 查看與修改 forks
      • 性能調優建議
    • 分批執行全局任務:serial 關鍵字
      • serial 用法示例
      • 應用場景與注意
    • 異步任務與后臺執行:async 與 poll
      • 異步示例
      • 后臺任務跟蹤:async_status
    • 狀態檢測:wait_for 模塊
      • 文件存在檢測
      • TCP 端口檢測
    • 實踐建議與最佳實踐

Playbook 執行順序原理

當 Ansible 運行 playbook 時 會按 playbook 中定義的 play 順序依次執行
每個 play 里 對所有目標主機按批次完成一個任務后 再統一進入下一個任務
該行為源自默認的 linear 策略 旨在保持任務執行流程可預期

在執行過程中

  • Ansible 控制節點會對 hosts 列表建立 SSH 連接池
  • 按照 forks 配置 對一批主機同時發起任務
  • 等所有批次完成當前任務后 才會調度下一個任務
  • 直到所有任務在所有主機上執行完畢 后釋放連接

該模型在少量主機時表現穩定 可充分利用并發優勢
當管理數百甚至上千臺主機時 過多并發會對控制節點產生顯著負載

可選執行策略

Ansible 支持多種執行策略

  • linear(默認) 按照上文所述批次執行
  • free 在單個主機執行完任務后 立即執行下一個任務 無需等待其他主機
  • debug 用于調試 playbook 記錄詳細執行信息

選擇不同策略 會對批量運維場景帶來靈活度與安全性的平衡


調整并發連接數:forks 參數

forks 定義 Ansible 在同一時刻可并行啟動的 SSH 連接數
默認值較低 為 5 以避免對控制節點和目標節點造成過大壓力

查看與修改 forks

在命令行中可查詢當前值

ansible-config dump | grep DEFAULT_FORKS

在 ansible.cfg 中修改后生效

[defaults]
forks = 20

也可在執行 playbook 時通過 -f--forks 覆蓋

ansible-playbook playbook.yaml --forks 10

性能調優建議

  • 管理大量 Linux 主機時 模塊大多在目標主機執行 控制節點壓力小 可適當提高 forks(如 50~100)
  • 管理網絡設備或其它非 Linux 設備時 模塊執行更依賴控制節點 需謹慎提升 forks 防止 CPU 或內存瓶頸
  • 可結合監控工具 實時觀察控制節點負載 并根據實際情況動態調整

分批執行全局任務:serial 關鍵字

serial 可對整個 play 進行批量拆分 先讓部分主機完成 play 中所有任務 再依次切換到下一批
常見場景包括滾動升級 Web 集群 或在高可用環境中進行安全補丁更新

serial 用法示例

將所有主機分成兩臺一組 執行完整部署流程

---
- name: Rolling update of httpdhosts: webserversserial: 2tasks:- name: install latest httpdyum:name: httpdstate: latestnotify: restart httpdhandlers:- name: restart httpdservice:name: httpdstate: restarted

也可使用百分比表示 批次大小根據主機總數自動計算 最小為 1

serial: 25%

應用場景與注意

  • 在批量下線或升級時 避免所有實例同時不可用
  • 可與 health check 腳本結合 在每批次完成后 驗證服務可用性
  • 任務失敗時 可快速定位問題所在批次 便于回滾或重試

異步任務與后臺執行:async 與 poll

默認情況下 Ansible 會等待單個任務完成后 再調度下一個任務
對耗時操作 如大文件下載、數據庫備份、重啟服務 等 同步等待會嚴重拖慢 playbook 整體執行速度

通過 async 和 poll 實現異步執行

  • async 指任務最長執行時間(秒) 超時會被強制終止
  • poll 指檢查任務狀態的間隔(秒) poll: 0 則不等待 立即繼續后續任務

異步示例

將下載任務放入后臺 不阻塞后續執行

---
- name: download ISO in backgroundhosts: node1tasks:- name: fetch CentOS ISOget_url:url: http://example.com/CentOS.isodest: /home/centosasync: 600poll: 0- name: immediately start next taskdebug:msg: move on without waiting download

當 async 小于實際運行時間 時 會在超時后報錯

async: 5
poll: 2

此時若命令需 10 秒 執行將被中斷

后臺任務跟蹤:async_status

Fire-and-forget 模式需借助 async_status 模塊跟蹤完成狀態

---
- name: start long taskhosts: node1tasks:- shell: sleep 30async: 60poll: 0register: job- name: wait for async task to finishasync_status:jid: "{{ job.ansible_job_id }}"register: job_resultuntil: job_result.finishedretries: 10delay: 5

結合 retries 和 delay 可控制最大等待時長 與檢查頻率


狀態檢測:wait_for 模塊

當異步操作與外部條件掛鉤時 可使用 wait_for 模塊對文件、端口或服務狀態進行檢測

  • path 用于等待文件或目錄的創建或刪除
  • host 與 port 用于檢測 TCP 端口就緒或關閉
  • delay、sleep、timeout 分別定義首次等待、檢查間隔和最長超時

文件存在檢測

---
- name: wait for file creationhosts: node1tasks:- shell: sleep 10 && touch /tmp/readyasync: 20poll: 0register: async_job- name: wait until /tmp/ready appearswait_for:path: /tmp/readystate: presentdelay: 5sleep: 2timeout: 60

TCP 端口檢測

---
- name: reboot and wait SSHhosts: node1,node2tasks:- name: reboot node1shell: shutdown -r now "upgrade"async: 1poll: 0when: inventory_hostname == "node1"- name: wait for node1 SSH servicewait_for:host: node1port: 22state: starteddelay: 10sleep: 5timeout: 300when: inventory_hostname == "node2"

實踐建議與最佳實踐

  • 對易阻塞的操作優先考慮異步模式 并結合 async_status 或 wait_for 實現可靠回調
  • 根據運維場景選擇合適批次策略 linear、free 或使用 serial 實現滾動升級
  • 在控制節點部署時 分配足夠 CPU 和內存 并結合監控工具觀察 forks 設置對節點負載的影響
  • 定期評估 playbook 執行策略 與并發配置 確保在目標環境持續穩定運行
    de2"

------## 實踐建議與最佳實踐- 對易阻塞的操作優先考慮異步模式 并結合 async_status 或 wait_for 實現可靠回調
- 根據運維場景選擇合適批次策略 linear、free 或使用 serial 實現滾動升級
- 在控制節點部署時 分配足夠 CPU 和內存 并結合監控工具觀察 forks 設置對節點負載的影響
- 定期評估 playbook 執行策略 與并發配置 確保在目標環境持續穩定運行
- 在大型關鍵環境中 可考慮搭建 Ansible Tower 或 AWX 進一步提升并發調度與任務可視化管理能力

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93833.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從一個ctf題中學到的多種php disable_functions bypass 姿勢

題目介紹 題目是Lilctf2025 的php-jail-is-my-cry 比賽鏈接:https://lilctf.xinshi.fun/ 題目環境前半部分是 php最近的phar 新 trick 大佬的原理分析 https://fushuling.com/index.php/2025/07/30/%e5%bd%93include%e9%82%82%e9%80%85phar-deadsecctf2025-baby-we…

從繁瑣到優雅:Java Lambda 表達式全解析與實戰指南

在 Java 8 之前,我們習慣了用匿名內部類處理回調、排序等場景,代碼中充斥著大量模板化的冗余代碼。直到 Java 8 引入 Lambda 表達式,這一局面才得以徹底改變。作為一名深耕 Java 多年的技術專家,我見證了 Lambda 表達式如何從一個…

《當 AI 學會 “思考”:大語言模型的邏輯能力進化與隱憂》

引言:AI “思考” 的時代信號?大語言模型展現邏輯能力的典型場景:如復雜問題推理、多步驟任務規劃的實例(如 AI 輔助撰寫科研思路、進行案件邏輯梳理等)?提出核心議題:大語言模型邏輯能力的進化究竟達到了怎樣的程度…

企業知識管理革命:RAG系統在大型組織中的落地實踐

企業知識管理革命:RAG系統在大型組織中的落地實踐 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是我…

MySQL事務篇-事務概念、并發事務問題、隔離級別

事務事務是一組不可分割的操作集合,這些操作要么同時成功提交,要么同時失敗回滾。acid事物的四大特性原子性最小工作單元,要么同時成功,要么同時失敗。例如A轉賬300給B,A賬戶-300與B賬戶300必須滿足操作原子性,避免出現…

C++高頻知識點(二十三)

文章目錄111. 談談atomic1. 什么是原子操作?2. std::atomic 的基本使用示例:基本使用3. 原子操作方法4. 內存模型與順序一致性112. 引用成員變量是否占空間?1. 引用成員變量的定義2. 內存占用情況1. 成員變量的實際占用2. 類的總大小代碼分析113. C中深…

云存儲的高效安全助手:阿里云國際站 OSS

在這個數據爆炸的時代,數據存儲和管理成為了眾多企業和個人面臨的一大挑戰。想象一下,你是一位視頻博主,隨著粉絲量的增長,視頻素材越來越多,電腦硬盤根本裝不下,每次找素材都要花費大量時間。又或者你是一…

【線性基】P4301 [CQOI2013] 新Nim游戲|省選-

本文涉及知識點 C貪心 位運算、狀態壓縮、枚舉子集匯總 線性基 P4301 [CQOI2013] 新Nim游戲 題目描述 傳統的 Nim 游戲是這樣的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴數量可以不同)。兩個游戲者輪流操作,…

[25-cv-09610]Anderson Design Group 版權維權再出擊,12 張涉案圖片及近 50 個注冊版權需重點排查!

Anderson 版權圖案件號:25-cv-09610立案時間:2025年8月13日原告:Anderson Design Group, Inc.代理律所:Keith原告介紹原告是美國的創意設計公司,成立于1993年,簡稱ADG,一家家族企業,…

Mac下載AOSP源代碼

一、前期準備 硬件要求 至少 200GB 可用空間(源碼約 100GB,編譯產物需額外空間),推薦 SSD。 內存 16GB+,避免同步 / 編譯時卡頓。 系統要求 macOS 10.14+(推薦最新版本,兼容性更好) 二、環境配置 AOSP 源碼包含大小寫不同的文件(如 File.java 和 file.java),而 …

Linux之網絡

Linux之網絡兩個模型應用層協議HTTPS傳輸層協議UDPTCP可靠性與效率的兼顧面向字節流TCP異常情況底層實現網絡層協議IP網段劃分子網劃分NAT數據鏈路層協議以太網ARP代理服務器內網穿透五種IO多路復用Reactor模式本文旨在講解tcp-ip協議原理,并不涉及代碼部分&#xf…

MCP(模型上下文協議):是否是 AI 基礎設施中缺失的標準?

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

基于粒子群優化算法優化支持向量機的數據回歸預測 PSO-SVM

一、作品詳細簡介 1.1附件文件夾程序代碼截圖 全部完整源代碼,請在個人首頁置頂文章查看: 學行庫小秘_CSDN博客?編輯https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夾說明 1.2.1 main.m主函數文件 該代碼實現了使用PSO…

版本更新!FairGuard-Mac加固工具已上線!

FairGuard-Mac加固工具1.0.2版本更新日志:■ 支持 AssetBundle 資源加密;■ 支持 Unity global-metadata 文件加密;AssetBundle ,是 Unity 提供的一種資源存儲壓縮包。其中儲存了游戲的資源,如圖片、模型、紋理、音視頻、代碼等文件。AssetBu…

【Linux篇章】穿越數據迷霧:HTTPS構筑網絡安全的量子級護盾,重塑數字信任帝國!

本篇摘要 本篇文章將從https是什么,為什么需要https角度,基于之前學的http[速戳速通HTTP]認識https,介紹什么是加密等,認識加密的兩種方式:對稱加密和非對稱加密;引出五種不同的通信方加密方式外加滲透證書…

數據庫:表和索引結構

表和索引是如何組織和使用的,在很大程度上取決于具體的關系型DBMS,然而它們都依賴于大致相似的結構和原則。索引頁和表頁表行和索引行都被存儲在頁中。頁的大小一般為4kb,這是一個可以滿足大部分需求的大小,也可以是其他大小&…

Java 學習筆記(基礎篇5)

1. 綜合練習(1) 抽獎public class test10 {public static void main(String[] args) {int[] arr {2,588,888,1000,10000};Random r new Random();for (int i 0; i < arr.length; i) {int randomIndex r.nextInt(arr.length);int temp arr[randomIndex];arr[randomIndex…

P1162 填涂顏色(染色法)

P1162 填涂顏色 - 洛谷 #include <bits/stdc.h> using namespace std; #define ll long long const int N 1e7 10; int n; int a[100][100],b[110][110]; int dx[4]{-1,1,0,0}; int dy[4]{0,0,1,-1}; void dfs(int x,int y) {if(x<0 || x>n1 || y<0 || y>n…

Webrtc在項目中承擔的角色

一、簡單劃分 解決方案層:負責對SDK的對接、操作業務邏輯、UI封裝、采集、渲染等,屬于基礎業務邏輯層 會議SDK層:負責對會議業務邏輯的封裝、服務端交互、創會/加會/離會等,屬于會議業務邏輯層 mediasoupclient層: 負責對webrtc封裝,提供會議層面相關接口,屬于webrtc業務…

Servlet上傳文件

這是一個Maven項目tomcat版本&#xff1a;9.0.107pom.xml<project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.…