当前位置: 首页 > news >正文

Ansible Playbook 核心配置实操指南:主机清单引用、并行执行与模块化组织

Ansible Playbook 核心配置实操指南:主机清单引用、并行执行与模块化组织

一、主机清单引用:精准匹配是执行前提

核心原则:playbook中hosts字段值,必须与主机清单(默认/etc/ansible/hosts)配置完全一致,否则任务会被跳过。

1. 常见引用方式(含场景)

引用格式说明适用场景
hosts: node1单个主机(清单中配置的主机名)特定主机单独操作
hosts: 172.16.30.10单个主机(清单中配置的IP)直接通过IP指定主机
hosts: all / hosts: '*'所有主机通用任务(如系统初始化)
hosts: webserver主机组(清单中定义的组名)同角色主机批量操作(如web服务)
hosts: 'web*'通配符匹配(以web开头的主机/组)模糊匹配一类主机
hosts: '172.16.30.*'网段匹配某一网段内主机统一操作
hosts: net:webserver并集(net组 + webserver组所有主机)多组主机合并执行任务
hosts: net:&webserver交集(同时在net组和webserver组的主机)跨组精准定位主机
hosts: net:!node1排除(net组排除node1主机)批量操作中排除特定主机
hosts: node[ 1-5 ]序列匹配(node1~node5)连续命名主机批量操作

2. 关键注意事项

  • hosts值在清单中不存在(如清单写node2,playbook写node2.example.com),Ansible会提示警告并跳过任务。
  • 大项目建议按“角色(web、db)”或“网段”规范主机组,避免引用混乱。

二、并行执行配置:平衡效率与稳定性

大项目中受控主机数量多,需通过参数控制并发,避免控制节点负载过高或任务中断风险。

1. forks参数:控制最大并发连接数

  • 作用:定义Ansible同时连接的主机数量(默认值为5)。
  • 执行逻辑:如forks=5、目标主机10台 → 先并发处理前5台,完成后再处理后5台;所有主机完成当前任务,才进入下一个任务。
  • 配置建议
    • Linux主机:任务在受控端运行,控制节点负载低 → 可提高forks(如20-50),提升效率。
    • 网络设备(路由器/交换机):任务在控制端运行,负载高 → 保持默认或降低forks,避免崩溃。

2. serial参数:分批执行,降低风险

  • 解决的问题:默认情况下,若1台主机任务失败,整个play中断,已成功主机无法执行handlers(如服务重启)。
  • 作用:指定每次并发执行的主机数量(分批处理),如serial: 2 → 每次处理2台,完成后再处理下一批。
  • 核心优势
    • 某批次主机失败,不影响已完成批次的handlers执行(如已成功的web主机仍能重启httpd)。
    • 降低控制节点瞬时负载,适合大规模主机场景。

设置serial: 2前

TASK [aaaa] ********************************************************************************
ok: [node1] => {"msg": 123456
}
ok: [node2] => {"msg": 123456
}
ok: [node5] => {"msg": 123456
}
ok: [node3] => {"msg": 123456
}
ok: [node4] => {"msg": 123456
}TASK [bbbb] ********************************************************************************
ok: [node1] => {"msg": 654321
}
ok: [node2] => {"msg": 654321
}
ok: [node3] => {"msg": 654321
}
ok: [node5] => {"msg": 654321
}
ok: [node4] => {"msg": 654321
}

设置后

TASK [Gathering Facts] *********************************************************************
ok: [node1]
ok: [node2]TASK [aaaa] ********************************************************************************
ok: [node1] => {"msg": 123456
}
ok: [node2] => {"msg": 123456
}TASK [bbbb] ********************************************************************************
ok: [node1] => {"msg": 654321
}
ok: [node2] => {"msg": 654321
}PLAY [web station] *************************************************************************TASK [Gathering Facts] *********************************************************************
ok: [node5]
ok: [node3]TASK [aaaa] ********************************************************************************
ok: [node5] => {"msg": 123456
}
ok: [node3] => {"msg": 123456
}TASK [bbbb] ********************************************************************************
ok: [node5] => {"msg": 654321
}
ok: [node3] => {"msg": 654321
}PLAY [web station] *************************************************************************TASK [Gathering Facts] *********************************************************************
ok: [node4]TASK [aaaa] ********************************************************************************
ok: [node4] => {"msg": 123456
}TASK [bbbb] ********************************************************************************
ok: [node4] => {"msg": 654321
}

三、包含与导入:模块化组织playbook

大项目任务复杂,通过“包含/导入”实现代码复用,减少冗余,提升可维护性。核心区别:import静态加载(解析时),include动态加载(运行时)

1. 导入playbook(import_playbook

  • 作用:在1个playbook中导入另1个完整playbook(含hoststasks),实现多流程串联。

  • 示例

    导入剧本

    ---
    - name: bbbbbhosts: node1tasks:- name: debug3debug:msg: abcdefghijklmn

    剧本

    ---
    - name: web stationhosts: node1tasks:- name: debug1debug:msg: 123456- name: debug2debug:msg: 654321- import_playbook: bbb.yml
    

    运行结果

    
    TASK [debug1] ******************************************************************************
    ok: [node1] => {"msg": 123456
    }TASK [debug2] ******************************************************************************
    ok: [node1] => {"msg": 654321
    }PLAY [bbbbb] *******************************************************************************TASK [Gathering Facts] *********************************************************************
    ok: [node1]TASK [debug3] ******************************************************************************
    ok: [node1] => {"msg": "abcdefghijklmn"
    }
    

2.包含tasks(include_tasks)

包含tasks不用写成完全的playbook可直接写模块

包含

---
- name: debug4debug:msg: 1qaz2wsx

剧本

---
- name: web stationhosts: node1tasks:- name: debug1debug:msg: 123456- include_tasks: ccc.yml- name: debug2debug:msg: 654321

运行效果

TASK [debug1] ******************************************************************************
ok: [node1] => {"msg": 123456
}TASK [include_tasks] ***********************************************************************
included: /home/student/ansible/ccc.yml for node1TASK [debug4] ******************************************************************************
ok: [node1] => {"msg": "1qaz2wsx"
}TASK [debug2] ******************************************************************************
ok: [node1] => {"msg": 654321
}

3. 导入 /包含任务(import_tasks vs include_tasks

  • 作用:在tasks中复用外部任务文件,避免重复编写。
  • 核心区别与示例
方式加载时机灵活性示例(复用vsftpd安装任务)
import_tasks解析时较低(适合固定任务)yaml tasks: - import_tasks: vsftpd.yml # vsftpd.yml含安装vsftpd的任务
include_tasks运行时较高(支持动态条件)yaml tasks: - include_tasks: vsftpd.yml # 可搭配when条件动态加载

---------------------------------------------------------- |
| import_tasks | 解析时 | 较低(适合固定任务) | yaml tasks: - import_tasks: vsftpd.yml # vsftpd.yml含安装vsftpd的任务 |
| include_tasks | 运行时 | 较高(支持动态条件) | yaml tasks: - include_tasks: vsftpd.yml # 可搭配when条件动态加载 |


文章转载自:

http://2WfBxMOJ.Ldfcb.cn
http://WHb8aYJQ.Ldfcb.cn
http://XbqA9p3n.Ldfcb.cn
http://09YjWstd.Ldfcb.cn
http://oWZL6ivr.Ldfcb.cn
http://99BYHF4o.Ldfcb.cn
http://4gJPUFhS.Ldfcb.cn
http://kShtTWEi.Ldfcb.cn
http://2t0IKYK3.Ldfcb.cn
http://Z5JjyLnh.Ldfcb.cn
http://2drSIprM.Ldfcb.cn
http://IvU01ODq.Ldfcb.cn
http://M7hQnTkt.Ldfcb.cn
http://wrazdqWn.Ldfcb.cn
http://VmWOGidz.Ldfcb.cn
http://71x2KdLg.Ldfcb.cn
http://V3ySqHrO.Ldfcb.cn
http://PI2GVtX1.Ldfcb.cn
http://zhh3FdWz.Ldfcb.cn
http://EUX83otm.Ldfcb.cn
http://3NDf46av.Ldfcb.cn
http://YeIWdtgK.Ldfcb.cn
http://BQplP6OH.Ldfcb.cn
http://4ubAXK4K.Ldfcb.cn
http://qSvzIa1b.Ldfcb.cn
http://YoN1DVQ1.Ldfcb.cn
http://c6JZMsje.Ldfcb.cn
http://Z1k4ESMV.Ldfcb.cn
http://b1ZkfDoq.Ldfcb.cn
http://238XpngK.Ldfcb.cn
http://www.dtcms.com/a/372604.html

相关文章:

  • 2025年金融专业人士职业认证发展路径分析
  • NVM 使用指南(Node Version Manager)
  • 2025年体制内职业发展相关认证选择指南
  • 电脑提速之关于Edge优化
  • 图像纹理相似度评价——Gabor变换
  • [光学原理与应用-463]:波动光学 - AOM的0级光与1级光
  • SpringBoot 公共字段自动填充
  • 《计算》第一二章读书笔记
  • 多模态大模型---第1节
  • 删除字符串中的空格
  • STM32 开发(三十三)STM32F103 片内资源 —— 直接存储 DMA 实战 编码详解
  • MGSM:大模型多语言数学推理的“试金石”
  • 卫星直连服务:从稀疏星座到全球覆盖的未来通信革命
  • FastAPI:像搭建餐厅一样设计API
  • 基于CNN-SE Attention和SHAP可解释性分析的故障诊断matlab
  • 企业级 Django 日志配置示例
  • URL 重写机制深度解析
  • OneCode可视化动作参数类型详解(一):核心枚举类ActionTypeEnum深度解析
  • Proxychains 配置全解析:从入门到高级应用
  • 第13章 非参数检验【9】:非参数检验和参数检验
  • (二)蓝牙架构概述-通俗易懂
  • [手写系列]Go手写db — — 第三版(实现分组、排序、聚合函数等)
  • 【74LS112+08同步十六进制和九进制0-8、8-0显示】2022-12-3
  • C++在控制台打印不同颜色的文本:让日志输出更炫酷
  • ego(3)---根据关键点求解B样条控制点
  • AutoHotkey下载安装并运行第一个脚本
  • ASP4644S电源芯片在商业卫星载荷通讯项目中的成本效益分析
  • HTTPS优化简单总结
  • 磁共振成像原理(理论):信号产生和探测(3)
  • 写程序or打游戏(组合计数)