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

Ansible使用Serial串行部署时,如何实现向其他主机组批量执行负载均衡配置操作

Ansible使用Serial串行部署时,如何实现向其他主机组批量执行负载均衡配置操作

这个场景我之前也遇到过,核心就是要在串行部署app主机的过程中,一次性对所有边缘负载均衡主机执行配置更新,这里给你一个可行的方案,完美适配你的需求:

核心思路

  1. 利用Ansible的ansible_play_batch变量获取当前串行批次的所有app主机(也就是那25%的机器);
  2. 将批次内主机的标识(比如EC2私有IP)收集到一个统一变量中;
  3. 通过delegate_to把负载均衡配置操作委托给tag_Type_edge组的每一台主机,同时用run_once避免重复执行;
  4. 在pre_tasks中完成移除操作,post_tasks中完成添加操作,中间正常执行app升级任务。

完整Playbook示例

---
- hosts: tag_Type_app
  serial: "25%"
  gather_facts: false

  pre_tasks:
    - name: 收集EC2元数据
      action: ec2_metadata_facts

    - name: 收集当前批次app主机的私有IP
      set_fact:
        app_batch_ips: "{{ ansible_play_batch | map('extract', hostvars, 'ec2_private_ip_address') | list }}"
      run_once: true  # 仅在当前批次的第一台主机上执行,避免重复收集

    - name: 从边缘负载均衡主机移除当前批次app节点
      blockinfile:
        path: /path/to/your/lb_config.txt  # 替换成你的负载均衡配置文件路径
        marker: "# {mark} ANSIBLE MANAGED: APP NODE {{ item }}"
        state: absent
        content: |
          {{ item }}
      delegate_to: "{{ edge_host }}"
      loop: "{{ app_batch_ips }}"
      with_items: "{{ groups['tag_Type_edge'] }}"
      vars:
        edge_host: "{{ item }}"
      run_once: true  # 仅执行一次,遍历所有边缘主机和批次内的app节点IP

  tasks:
    - name: 执行app升级操作(部署代码、重启服务等)
      debug:
        msg: "部署新代码到 {{ inventory_hostname }},重启服务"
      # 这里替换成你实际的升级任务,比如git拉取、copy文件、systemd重启等

  post_tasks:
    - name: 将当前批次app节点添加回边缘负载均衡主机
      blockinfile:
        path: /path/to/your/lb_config.txt
        marker: "# {mark} ANSIBLE MANAGED: APP NODE {{ item }}"
        state: present
        content: |
          {{ item }}
      delegate_to: "{{ edge_host }}"
      loop: "{{ app_batch_ips }}"
      with_items: "{{ groups['tag_Type_edge'] }}"
      vars:
        edge_host: "{{ item }}"
      run_once: true

关键细节解释

  • ansible_play_batch:这个变量会返回当前串行批次中的所有主机名,是实现批次操作的核心;
  • map('extract', hostvars, 'ec2_private_ip_address'):从hostvars中提取每个批次主机的EC2私有IP,确保负载均衡配置用的是正确的地址;
  • delegate_to: "{{ edge_host }}":把配置文件修改任务委托给每一台边缘负载均衡主机执行;
  • run_once: true:确保每个批次只执行一次负载均衡配置操作,避免同一批次内的每台app主机都重复执行一遍边缘主机的修改任务;
  • blockinfile模块:专门用于在文本文件中添加/移除标记块,能保证配置的幂等性,不会重复添加或遗漏移除。

如果你的负载均衡配置格式不是单纯的IP列表,只需要调整blockinfile的content部分,适配你的配置格式即可(比如添加完整的server条目)。

备注:内容来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:27:46