Ansible滚动重启多集群环境

问题描述 投票:1回答:1

我有一个用例,我想在多个集群中执行滚动重启。第一步,我创建了一个任务,该任务要在传递给该任务的主机上串行执行,该任务将一次执行一次重新启动一个节点。当前,假设所有群集中的节点总数为n,并且节点重启的时间恒定,则节点重启需要O(n)时间。我想优化此任务的执行,以使重新启动节点的任务在群集中串行执行,但在整个群集中并行执行,从而导致有效的重新启动时间与群集中最大主机数成正比。给定清单的示例-

[Cluster_1]
host_1_a
host_1_b

[Cluster_2]
host_2_a
host_2_b

[Cluster_3]
host_3_a
host_3_b
host_3_c

当前执行时间为7 *(reboot_time),我想将其优化为3 *(reboot_time)。我不确定这是否可行,是否欢迎提出任何建议。谢谢!

编辑:Ansible Playbook重新启动服务

- name: Rolling reboot
  hosts: all
  serial: 1
  gather_facts: no

  tasks:
    - name: stop service
      service:
        name: xyz
        state: stopped

    - name: start service
      service:
        name: xyz
        state: started

    - name: wait for service to start
      uri:
        url: "http://localhost:8081/node-health"
        method: GET
      register: http_status
      until: http_status.status == 200
      retries: 60
      delay: 10
ansible ansible-2.x ansible-inventory ansible-facts ansible-template
1个回答
0
投票

一种非常简单的方法是为每个群集并行启动该剧本一次。这实际上是我的首选解决方案。

ansible-playbook -i inventory -l Cluster_1 playbook.yml 2>&1 > mylog1.txt &
ansible-playbook -i inventory -l Cluster_2 playbook.yml 2>&1 > mylog2.txt &
ansible-playbook -i inventory -l Cluster_3 playbook.yml 2>&1 > mylog3.txt &

同时,如果您真的想一次运行,这里是(可能的)开始。这个想法是动态创建混合现有群集服务器列表的服务器列表。请注意,这绝对不是防弹的,使其完全可扩展可能会陷入噩梦。

在这里无论如何可以给您一些想法。关键是使用zip_longest filter创建列表,然后映射zip_longest以删除空值并展平最终结果。

select filter

哪个提供您当前的示例清单:

select
© www.soinside.com 2019 - 2024. All rights reserved.