eda-ha
mglantz.eda-ha
Роль, обеспечивающая высокую доступность для сервера Ansible на основе событий (EDA). Для этого нужно настроить два или более независимых сервера EDA и установить перед ними балансировщик нагрузки. Балансировщик нагрузки должен выполнять активное-пассивное распределение между вашими серверами EDA, что означает, что сервер B получает трафик только в случае сбоя сервера A и так далее.
Правила, работающие на сервере EDA, запускают playbooks, которые представлены как job_templates в ваших контроллерах AAP. Когда вы создаете playbooks, которые выполняют ваши действия, вы включаете эту роль, как показано в примере, и завязываете задачи в playbooks на предоставленную булевую переменную eda_activation. Если эта переменная истинна, это означает, что соответствующий сервер EDA активен; если нет — это значит, что он пассивен, и задачи не должны выполняться. Таким образом, действия выполняются только тогда, когда сервер EDA "активирован", то есть тот, на который происходит балансировка нагрузки.
Переключение между активным и пассивным режимами будет происходить с той скоростью, с которой балансировщик нагрузки обнаруживает сбой, обычно около одной секунды. Единственное различие между серверами EDA A и B и соответствующими контроллерами AAP заключается в том, что задачи выполняются только при активации с активного сервера EDA. Конфигурация на стороне сервера EDA не отличается.
После того, как вы ознакомитесь с приведенной ниже документацией и посмотрите файл tasks/main.yml роли, изображение ниже станет понятным.
Установите роль с помощью:
ansible-galaxy role install mglantz.eda-ha
Чтобы использовать эту роль в ваших playbooks, создайте файл requirements.yml, который поместите в директорию с вашими ролями. Файл requirements.yml должен содержать:
---
- name: mglantz.eda-ha
Пример этого можно увидеть здесь: https://github.com/mglantz/event-driven-ansible-demo/
Требования
Две или более установленных экземпляра Red Hat Ansible Automation Platform 2.4 с контроллером EDA или, возможно, https://github.com/ansible/eda-server (хотя тестирование исходного eda-server не проводилось).
Балансировщик нагрузки, настроенный на активное-пассивное распределение нагрузки к установленным серверам EDA.
Создайте файл: /var/lib/ansible-automation-platform/eda/ui/static/media/detect.json на каждом сервере EDA, следующим образом:
{
"install_id": "уникальный_id_который_вы_выдумали_возможно_fqdn"
}
Когда роль определяет, какой сервер EDA активен, а какие пассивны, она делает это, сопоставляя install_id, который она находит, когда напрямую обращается к серверу EDA, и тот, который она находит, когда идет через балансировщик нагрузки.
- Настроенные playbooks для выполнения действий, как в разделе
Пример Playbook
ниже, которые пользуются этой ролью.
Переменные роли
# доменное имя балансировщика нагрузки перед серверами EDA
load_balancer_fqdn: <строка|fqdn балансировщика нагрузки>
# доменное имя сервера EDA, предложение, если AAP, установить в job_template
eda_fqdn: <строка|fqdn сервера eda>
# если мы должны проверить сертификат https. если установлено в true, все серверы EDA должны иметь действительные сертификаты
# включает соединение через балансировщик нагрузки
validate_eda_tls_cert: <булев|true/false>
Зависимости
Ansible 2.9 или 2.14.
Пример Playbook
Пример того, как использовать эту роль. В playbooks, выполняющих действия, те, которые вызываются событиями EDA, измените их следующим образом:
---
# Ниже play должен быть в начале ваших playbooks.
# Имеет смысл установить переменную eda_fqdn на уровне job_template
- name: Определить, какой сервер EDA активен, и установить eda_activation соответственно
hosts: localhost
roles:
- { role: mglantz.eda-ha, load_balancer_fqdn: "loadbalancer.sudo.net", eda_fqdn: "eda.sudo.net" }
- name: Сайт работает
hosts: all
vars:
# Ниже переменная должна быть добавлена в play, который выполняет ваши реальные действия
eda_activation: "{{ hostvars['localhost']['eda_activation'] }}"
gather_facts: false
tasks:
- debug:
msg: "Все работает хорошо"
# Добавьте ниже условие для задачи, которую вы хотите контролировать
when: eda_activation
# Или аналогично для блока
- block:
- name: Сделать что-то еще
ansible.builtin.debug:
msg: "Воображаемое что-то еще"
- name: Также сделай это
ansible.builtin.debug:
msg: "Также это (воображаемое)"
when: eda_activation
Лицензия
GPL 3.0
Информация об авторах
- Магнус Гланц, sudo@redhat.com, 2023
- Роберто Нуньес, rnunez@redhat.com, 2023
Role which adds HA capability to an EDA server setup
ansible-galaxy install mglantz/eda-ha