You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible多数据中心部署:Inventory编排与Playbook配置方案咨询

问题描述

现有开发环境配置

Inventory 文件(dev)

[dev]
service1 ansible_host=dev1.com ansible_port=22 ansible_user=ubuntu
service2 ansible_host=dev1.com ansible_port=22 ansible_user=ubuntu
service3 ansible_host=dev1.com ansible_port=22 ansible_user=ubuntu

部署执行的 Roles

roles:
- sync_code
- prep_local
- build
- shutdown_app
- setup_host
- start_app

当前开发环境设置了 serial: yes,部署时各 Role 按顺序执行。

生产环境需求

生产环境(prod)包含 DC1、DC2 两个数据中心,每个数据中心有多台可承载 service1 的服务器。部署 service1 时要求:

  • 每次从 DC1 和 DC2 各选 1 台服务器
  • 在这两台服务器上同时按顺序执行所有 Roles
  • 完成一组后,再选取下一组各 1 台服务器继续部署

需要解决:如何组织生产环境的 Inventory 文件,以及在 Playbook 中配置主机参数实现该需求。


解决方案

1. 生产环境 Inventory 组织

按数据中心和服务分组,方便后续精准选取主机:

# 数据中心独立分组
[dc1]
prod-dc1-01 ansible_host=dc1-prod-01.com ansible_port=22 ansible_user=ubuntu
prod-dc1-02 ansible_host=dc1-prod-02.com ansible_port=22 ansible_user=ubuntu
prod-dc1-03 ansible_host=dc1-prod-03.com ansible_port=22 ansible_user=ubuntu

[dc2]
prod-dc2-01 ansible_host=dc2-prod-01.com ansible_port=22 ansible_user=ubuntu
prod-dc2-02 ansible_host=dc2-prod-02.com ansible_port=22 ansible_user=ubuntu
prod-dc2-03 ansible_host=dc2-prod-03.com ansible_port=22 ansible_user=ubuntu

# 合并为 service1 的生产主机组
[prod_service1:children]
dc1
dc2

这样分组后,prod_service1 包含所有数据中心的 service1 主机,同时可通过 dc1、dc2 单独定位对应数据中心的机器。

2. Playbook 配置实现分组并行部署

方案一:动态分组配对(精准控制批次,推荐)

通过给主机标记批次号,让同编号的 DC1、DC2 主机分到一组,再按批次执行所有 Roles:

- name: 给主机标记批次
  hosts: prod_service1
  gather_facts: yes
  order: sorted  # 按主机名排序,保证同编号主机配对
  tasks:
    - name: 按编号生成批次组
      group_by:
        key: "batch_{{ inventory_hostname.split('-')[-1] }}"
      run_once: false

- name: 按批次执行部署 Roles
  hosts: batch_*
  serial: 1  # 每个批次的2台主机同时执行所有步骤
  roles:
    - sync_code
    - prep_local
    - build
    - shutdown_app
    - setup_host
    - start_app

说明:

  • 主机名最后一位数字作为批次号,比如 prod-dc1-01 和 prod-dc2-01 会被分到 batch_01
  • 第二个 Play 针对每个批次执行,确保同批次的两台主机并行完成所有 Roles 后,再处理下一批

方案二:串行选主机+自由策略(无需严格编号配对)

如果不需要严格按编号配对,只要每次从两个数据中心各选1台,可使用以下配置:

- name: 部署 prod 环境的 service1
  hosts: prod_service1
  strategy: free
  serial:
    - 1  # 先选1台(优先DC1,取决于Inventory顺序)
    - 1  # 再选1台(DC2)
  roles:
    - sync_code
    - prep_local
    - build
    - shutdown_app
    - setup_host
    - start_app

说明:

  • strategy: free 允许主机完成当前任务后直接执行下一个,不用等待同批次其他主机
  • serial: [1,1] 会每次选取两台不同数据中心的主机,并行执行所有 Roles

关键注意点

  • 主机命名最好带规律编号,方便精准配对分组
  • 若要求每批必须是 DC1、DC2 各1台,方案一的动态分组更可靠
  • serial 参数控制每次处理的主机数量,结合分组可实现精准批次控制

内容的提问来源于stack exchange,提问作者Diocese0721

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:48:19