mglantz.eda-ha
mglantz.eda-ha
Un rol que proporciona alta disponibilidad para un servidor de Ansible basado en eventos (EDA). Requiere que configures dos o más servidores EDA independientes y coloques un equilibrador de carga frente a ellos. El equilibrador de carga debe realizar un balanceo activo-pasivo entre tus servidores EDA, lo que significa que B solo recibe tráfico si A falla, etc.
Los libros de reglas que se ejecutan en el servidor EDA activan libros de trabajo que se exponen como plantillas de trabajo en tus Controladores de AAP. Al crear los libros de trabajo que realizan tus acciones, incluyes este rol como se muestra en el ejemplo y dependes de las tareas en los libros de trabajo en el booleano eda_activation proporcionado. Si este booleano es verdadero, significa que el servidor EDA en cuestión está activo; si no lo es, significa que está pasivo y no se deben ejecutar tareas. Así que las acciones solo se realizan cuando un servidor EDA está "activado", es decir, el que recibe el balanceo de carga.
La conmutación por error entre activo y pasivo será a la velocidad con la que el equilibrador de carga detecte una falla, normalmente alrededor de un segundo. Esto se debe a que la única diferencia entre los servidores EDA A y B, y los Controladores AAP correspondientes, es que las tareas solo se ejecutan cuando se activan desde el servidor EDA activo. No hay configuración diferente en el lado del servidor EDA.
Una vez que hayas leído la documentación a continuación y mires el tasks/main.yml del rol, la imagen de abajo tendrá sentido.
Instala el rol usando:
ansible-galaxy role install mglantz.eda-ha
Para usar este rol en tus libros de trabajo, crea un archivo requirements.yml que coloques en tu directorio de roles. El archivo requirements.yml necesita declarar:
---
- name: mglantz.eda-ha
Un ejemplo de esto se puede ver aquí: https://github.com/mglantz/event-driven-ansible-demo/
Requisitos
Dos o más instancias instaladas de Red Hat Ansible Automation Platform 2.4 con controlador EDA, o quizás https://github.com/ansible/eda-server (el servidor eda en upstream no ha sido probado).
Un equilibrador de carga, configurado para realizar balanceo de carga activo-pasivo hacia los servidores EDA instalados.
Crea el archivo: /var/lib/ansible-automation-platform/eda/ui/static/media/detect.json en cada servidor EDA, de la siguiente manera:
{
"install_id": "un_id_unico_que_creas_posiblemente_fqdn"
}
Cuando el rol determina qué servidor EDA está activo y cuáles son pasivos, lo hace al comparar el install_id que encuentra al contactar directamente un servidor EDA y el que encuentra al ir a través del equilibrador de carga.
- Libros de trabajo ajustados para la ejecución de acciones como en la sección "Ejemplo de libro de trabajo" a continuación, que utilizan este rol.
Variables del rol
# nombre de dominio del equilibrador de carga frente a los servidores EDA
load_balancer_fqdn: <string|fqdn del equilibrador de carga>
# nombre de dominio del servidor EDA, sugerencia, si AAP, configurado en la plantilla de trabajo
eda_fqdn: <string|fqdn del servidor EDA>
# si vamos a validar el certificado https. si se establece en verdadero, todos los servidores EDA deben tener certificados válidos
# también incluye la conexión a través del equilibrador de carga
validate_eda_tls_cert: <bool|true/false>
Dependencias
Ansible 2.9 o 2.14.
Ejemplo de Libro de Trabajo
Un ejemplo de cómo usar el rol. En los libros de trabajo que realizan acciones, aquellos que se activan por eventos EDA, ajústalos de la siguiente manera:
---
# El siguiente juego debe estar en la parte superior de tus libros de trabajo.
# Tiene sentido establecer la variable eda_fqdn a nivel de plantilla de trabajo
- name: Detectar qué servidor EDA está activo y establecer eda_activation en consecuencia
hosts: localhost
roles:
- { role: mglantz.eda-ha, load_balancer_fqdn: "loadbalancer.sudo.net", eda_fqdn: "eda.sudo.net" }
- name: El sitio está activo
hosts: all
vars:
# Esta variable debe añadirse al juego que realiza tus acciones reales
eda_activation: "{{ hostvars['localhost']['eda_activation'] }}"
gather_facts: false
tasks:
- debug:
msg: "Todo está bien"
# Añade la siguiente declaración cuando quieras controlar la tarea
when: eda_activation
# O similar para un bloque
- block:
- name: Hacer algo más
ansible.builtin.debug:
msg: "Algo imaginario más"
- name: También hacer esto
ansible.builtin.debug:
msg: "También esta cosa (imaginaria)"
when: eda_activation
Licencia
GPL 3.0
Información del Autor
- Magnus Glantz, sudo en redhat.com, 2023
- Roberto Nunez, rnunez en redhat.com, 2023
Role which adds HA capability to an EDA server setup
ansible-galaxy install mglantz.eda-ha