分组解决什么问题
分组把「一堆主机」变成有语义的集合:同一组内应当同质(同一角色、同一版本、同一规格),组与组之间可隔离(一批失败不影响另一批),规模适中(大到有代表性,小到可快速回滚)。分组维度常见四类:角色或用途(Web、数据库、缓存)、环境(生产、预发、测试)、位置(机房、可用区)、批次(灰度首批、次批、全量)。分组既用于选择目标,也用于决定并发与串行节拍,例如按机房分批、每批限制台数。
基本信息
| 常见维度 | 角色用途、环境、机房或可用区、版本批次、硬件规格 |
|---|---|
| 分组原则 | 组内同质、组间可隔离、规模适中、可由标签动态派生 |
| 落地载体 | 主机清单分组与嵌套、标签、动态清单、平台侧资源分组 |
| 关键约束 | 组间重叠会让同一主机被不同批次同时操作 |
典型使用场景
- 灰度发布:首批一到两台,观察后再扩到全量
- 故障隔离:把异常批次单独隔离,避免重试波及健康节点
- 并发分级:数据库所在组限制并发,Web 组可放宽
- 窗口安排:按机房分组,分别在各机房的低谷窗口执行
- 依赖顺序:控制面先于数据面、主节点先于备节点
- 容量与规格差异:按规格分组,避免大内存节点与小规格节点同参数下发
分组与分批执行
分组与分批执行
# 主机清单分组(INI 风格示意):角色、环境、批次各司其职
[web]
web-01 ansible_host=10.0.1.11
web-02 ansible_host=10.0.1.12
[db]
db-01 ansible_host=10.0.2.11
[prod:children] # 组可以嵌套:生产包含 Web 与数据库组
web
db
[canary] # 灰度首批单独成组,先只对这批执行
web-01
# 按组控制节拍:每批两台,失败立即停,避免带着故障扩面
# - hosts: web
# serial: 2
# max_fail_percentage: 0
#
# 按组控制并发:小批并发数,避免下游被瞬间打满
# ansible web -m ping -f 5分组维度与取舍
| 维度 | 主要好处 | 风险 | 配合手段 |
|---|---|---|---|
| 角色用途 | 同质主机同参数,误配少 | 跨角色依赖被忽略 | 定义组间执行顺序 |
| 环境 | 生产与测试隔离 | 环境间配置漂移 | 变量按环境分层 |
| 机房或可用区 | 窗口可分别安排 | 跨机房同步被忽略 | 按地区分别排窗 |
| 版本批次 | 灰度可控,回滚快 | 批次成员长期不收敛 | 批次到期后合并回主组 |
| 硬件规格 | 参数按规格推导 | 规格变更后分组过期 | 定期复核规格标签 |
分组为选择目标与决定节拍服务,因此每建一个组都应能回答「它让哪一步更安全」。若一个组既不影响目标选择、也不影响并发或顺序,它多半只是文档里的分类。
分组允许嵌套与重叠时,要先确认目标集合是否互斥。同一台主机同时出现在两个批次里,被并发执行两次相同操作,可能造成重复变更或配置互相覆盖。