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.…