У меня есть вариант использования, когда я хочу выполнить скользящий перезапуск в нескольких кластерах. В качестве первого шага я создал задачу для последовательного выполнения на хостах, переданных задаче, которая будет выполнять перезапуск по одному узлу за раз. В настоящее время для перезапуска узла требуется время O (n) при условии, что общее количество узлов во всем кластере равно n, и постоянное время для перезапуска узла. Я хочу оптимизировать выполнение этого доступного задания таким образом, чтобы задача перезапуска узлов выполнялась последовательно в кластере, но параллельно между кластерами, что приводило к эффективному времени перезапуска, пропорциональному максимальному количеству узлов в кластере. Пример данного инвентаря -
[Cluster_1]
host_1_a
host_1_b
[Cluster_2]
host- 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
a
host- 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
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