mglantz.eda-ha

mglantz.eda-ha

Un rôle qui assure une haute disponibilité pour un serveur Ansible piloté par événements (EDA). Il nécessite de configurer deux serveurs EDA indépendants ou plus et d'ajouter un équilibreur de charge devant eux. L'équilibreur de charge doit effectuer un équilibrage actif-passif entre vos serveurs EDA, ce qui signifie que B ne reçoit du trafic que si A échoue, etc.

Les règles exécutées sur le serveur EDA déclenchent des playbooks exposés en tant que modèles de tâche dans vos contrôleurs AAP. Lorsque vous créez les playbooks qui effectuent vos actions, vous incluez ce rôle comme indiqué dans l'exemple et vous dépendez des tâches dans les playbooks de la variable booléenne eda_activation fournie. Si cette variable est vraie, cela signifie que le serveur EDA en question est actif, sinon cela signifie qu'il est passif et aucune tâche ne doit être exécutée. Ainsi, les actions ne sont exécutées que lorsqu'un serveur EDA est "activé", c'est-à-dire celui qui reçoit le trafic équilibré.

La bascule entre actif et passif se fait à la vitesse à laquelle l'équilibreur de charge détecte une panne, généralement en quelques secondes. En effet, la seule différence entre les serveurs EDA A et B et leurs contrôleurs AAP correspondants est que les tâches ne sont exécutées que lorsqu'elles sont déclenchées par le serveur EDA actif. Aucune configuration ne diffère du côté serveur EDA.

Une fois que vous avez lu la documentation ci-dessous et que vous avez consulté le fichier tasks/main.yml du rôle, l'image ci-dessous aura du sens. Voir l'aperçu architectural sur GitHub si l'image est brisée

Installez le rôle avec :

ansible-galaxy role install mglantz.eda-ha

Pour utiliser ce rôle dans vos playbooks, créez un fichier requirements.yml que vous placerez dans votre répertoire de rôles. Le fichier requirements.yml doit contenir :

---    
- name: mglantz.eda-ha

Un exemple de cela peut être vu ici : https://github.com/mglantz/event-driven-ansible-demo/

Exigences

  • Deux instances installées ou plus de Red Hat Ansible Automation Platform 2.4 avec contrôleur EDA, ou peut-être https://github.com/ansible/eda-server (le serveur eda en amont n'a cependant pas été testé).

  • Un équilibreur de charge, configuré pour effectuer un équilibrage de charge actif-passif vers les serveurs EDA installés.

  • Créez le fichier : /var/lib/ansible-automation-platform/eda/ui/static/media/detect.json sur chaque serveur EDA, comme suit :

{
   "install_id": "id_unique_que_vous_inventez_fqdn_peut-etre"
}

Lorsque le rôle détermine quel serveur EDA est actif et lesquels sont passifs, il le fait en comparant l'install_id qu'il trouve en contactant un serveur EDA directement et celui qu'il trouve en passant par l'équilibreur de charge.

  • Playbooks ajustés pour effectuer des actions comme dans la section Exemple de Playbook ci-dessous, qui profitent de ce rôle.

Variables de rôle

# nom de domaine de l'équilibreur de charge devant les serveurs EDA
load_balancer_fqdn: <string|fqdn de l'équilibreur de charge> 

# nom de domaine du serveur EDA, suggestion, si AAP, configuré dans le modèle de tâche
eda_fqdn: <string|fqdn du serveur EDA>

# si nous devons valider le certificat https. si défini sur vrai, tous les serveurs EDA doivent avoir des certificats valides
# inclut également la connexion via l'équilibreur de charge
validate_eda_tls_cert: <bool|vrai/faux>

Dépendances

Ansible 2.9 ou 2.14.

Exemple de Playbook

Un exemple de la façon d'utiliser le rôle. Dans les playbooks qui exécutent des actions, ceux déclenchés par les événements EDA, ajustez-les comme suit :

---
# Le play ci-dessous doit être en haut de vos playbooks.
# Il est logique de définir la variable eda_fqdn au niveau du modèle de tâche
- name: Détecter quel serveur EDA est actif et définir eda_activation en conséquence
  hosts: localhost
  roles:
    - { role: mglantz.eda-ha, load_balancer_fqdn: "loadbalancer.sudo.net", eda_fqdn: "eda.sudo.net" }

- name: Le site est en ligne
  hosts: all
  vars:
# La variable ci-dessous doit être ajoutée au play qui exécute vos actions réelles
    eda_activation: "{{ hostvars['localhost']['eda_activation'] }}"
  gather_facts: false
  tasks:
    - debug:
        msg: "Tout va bien"
# Ajoutez ci-dessous la condition pour la tâche que vous souhaitez contrôler
      when: eda_activation

# Ou similaire pour un bloc
    - block: 
      - name: Faire autre chose
        ansible.builtin.debug:
          msg: "Quelque chose d'imaginaire"
      - name: Faire aussi cela
        ansible.builtin.debug:
          msg: "Aussi cette chose (imaginaire)"
      when: eda_activation

Licence

GPL 3.0

Informations sur l'auteur

  • Magnus Glantz, sudo à redhat.com, 2023
  • Roberto Nunez, rnunez à redhat.com, 2023
À propos du projet

Role which adds HA capability to an EDA server setup

Installer
ansible-galaxy install mglantz.eda-ha
Licence
gpl-3.0
Téléchargements
482
Propriétaire
Principal Specialist Solution Architect at Red Hat