devgateway.pacemaker

Rôle Pacemaker pour Ansible

Ce rôle configure un cluster Pacemaker en extrayant la configuration (CIB), en ajustant le XML et en le rechargeant. Le rôle est idempotent et prend en charge le mode de vérification.

Il a été repensé pour configurer des éléments individuels (options par défaut du cluster, ressources, groupes, contraintes, etc.) plutôt que l'état complet du cluster et tous les services. Cela vous permet de vous concentrer sur des ressources spécifiques, sans interférer avec le reste.

Exigences

Ce rôle a été écrit et testé sur Scientific Linux 7. Il pourrait également fonctionner sur d'autres distributions, merci de partager votre expérience.

Tâches

Utilisez la directive tasks_from d'Ansible pour spécifier ce que vous souhaitez configurer.

Les valeurs booléennes dans les propriétés (analysées par Pacemaker lui-même) n'ont pas besoin d'être citées. Cependant, les agents de ressources peuvent s'attendre à recevoir des arguments de type booléen sous forme d'entiers, de chaînes, etc. Ces valeurs doivent être citées.

tasks_from: main

Configurer les nœuds, les propriétés du cluster et les paramètres par défaut des ressources.

pcmk_cluster_name

Nom du cluster (optionnel).

Par défaut : hacluster.

pcmk_password

Le mot de passe en texte clair pour l'utilisateur du cluster (optionnel). S'il est omis, il sera dérivé de l'ansible_machine_id de la première hôte dans le lot des tâches. Ce mot de passe n'est utilisé que lors de l'initialisation de l'authentification des nœuds.

Par défaut : ansible_machine_id | to_uuid

pcmk_user

L'utilisateur système pour authentifier les nœuds PCS (optionnel). PCS authentifiera tous les nœuds entre eux.

Par défaut : hacluster

pcmk_cluster_options

Dictionnaire avec options à l'échelle du cluster (optionnel).

pcmk_votequorum

Dictionnaire avec les options de votequorum (optionnel). Voir votequorum(5). Valeurs booléennes acceptées.

pcmk_resource_defaults

Dictionnaire des valeurs par défaut des ressources (optionnel).

tasks_from: resource

Configurer une ressource simple.

pcmk_resource

Dictionnaire décrivant une ressource simple (primitive). Contient les membres suivants :

  • id : identifiant de la ressource ; obligatoire pour les ressources simples ;
  • class, provider et type : descripteurs de l'agent de ressources ; provider peut être omis, par exemple lorsque type est service ;
  • options : dictionnaire optionnel des attributs spécifiques à la ressource, par exemple l'adresse et le masque de réseau pour IPaddr2 ;
  • op : liste optionnelle d'opérations ; chaque opération est un dictionnaire avec les membres requis name et interval, et des membres arbitraires optionnels ;
  • meta : dictionnaire optionnel des méta-attributs.

tasks_from: group

Configurer un groupe de ressources.

pcmk_group

Dictionnaire avec deux membres :

  • id est l'identifiant du groupe
  • resources est un dictionnaire où les clés sont des IDs de ressources et les valeurs ont le même format que pcmk_resource (à l'exception de id de la ressource qui est optionnel).

tasks_from: constraint

Configurer une contrainte.

pcmk_constraint

Dictionnaire définissant une seule contrainte. Les membres suivants sont requis :

  • type : l'un des : location, colocation ou order ;
  • score : score de la contrainte (entier signé, INFINITY ou -INFINITY).

Selon la valeur de type, les membres suivants sont également requis :

  • location nécessite rsc et node ;
  • colocation nécessite rsc et with-rsc ;
  • order nécessite first et then ;

Le dictionnaire peut contenir d'autres membres, par exemple symmetrical.

Exemples de playbooks

Serveur DNS BIND actif-actif

---
- name: Configurer le cluster DNS
  hosts: dns-servers
  tasks:

    - name: Configurer le cluster
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: named
        pcmk_cluster_options:
          stonith-enabled: false

    - name: Configurer la ressource d'adresse IP
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      vars:
        pcmk_resource:
          id: dns-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 10.0.0.1
            cidr_netmask: 8
          op:
            - name: monitor
              interval: 5s

    - name: Configurer la ressource BIND clonée
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          type: clone
          id: dns-clone
          resources:
            named:
              class: service
              type: named-chroot
              op:
                - name: monitor
                  interval: 5s

    - name: Configurer les contraintes
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: dns-ip
          then: dns-clone

Proxy Squid actif-actif

---
- name: Configurer le cluster Squid
  hosts: proxy-servers
  tasks:

    - name: Configurer le cluster
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: squid
        pcmk_cluster_options:
          stonith-enabled: false

    - name: Configurer la ressource d'adresse IP
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      vars:
        pcmk_resource:
          id: squid-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 192.168.0.200
            cidr_netmask: 24
          op:
            - name: monitor
              interval: 5s

    - name: Configurer la ressource Squid clonée
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          id: squid
          type: clone
          resources:
            squid-service:
              class: service
              type: squid
              op:
                - name: monitor
                  interval: 5s

    - name: Configurer les contraintes
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: squid-ip
          then: squid

Nginx, application web, et Postgres maître-esclave

Le cluster exécute deux nœuds Postgres avec réplication synchrone. Peu importe où se trouve le maître, une adresse IP virtuelle est en cours d'exécution, à laquelle NAT pointe. Nginx et l'application web s'exécutent sur le même nœud, mais pas sur l'autre, afin d'économiser des ressources. Basé sur l'exemple du wiki Clusterlabs.

---
- hosts:
    - alpha
    - bravo
  tasks:

    - name: Configurer Pacemaker avec Postgres maître/esclave
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_pretty_xml: true
        pcmk_cluster_name: example
        pcmk_password: hunter2
        pcmk_cluster_options:
          no-quorum-policy: ignore
          stonith-enabled: false
        pcmk_resource_defaults:
          resource-stickiness: INFINITY
          migration-threshold: 1

    - name: Configurer des ressources simples
      include_role:
        name: devgateway.pacemaker
        tasks_from: resource
      loop_control:
        loop_var: pcmk_resource
      loop:
        - id: coolapp
          class: service
          type: coolapp
        - id: nginx
          class: service
          type: nginx
        - id: virtual-ip
          class: ocf
          provider: heartbeat
          type: IPaddr2
          options:
            ip: 10.0.0.23
          meta:
            migration-threshold: 0
          op:
            - name: start
              timeout: 60s
              interval: 0s
              on-fail: restart
            - name: monitor
              timeout: 60s
              interval: 10s
              on-fail: restart
            - name: stop
              timeout: 60s
              interval: 0s
              on-fail: restart

    - name: Configurer Postgres maître-esclave
      include_role:
        name: devgateway.pacemaker
        tasks_from: advanced-resource
      vars:
        pcmk_resource:
          id: postgres
          type: master
          meta:
            master-max: 1
            master-node-max: 1
            clone-max: 2
            clone-node-max: 1
            notify: true
          resources:
            postgres-replica-set:
              class: ocf
              provider: heartbeat
              type: pgsql
              options:
                pgctl: /usr/pgsql-9.4/bin/pg_ctl
                psql: /usr/pgsql-9.4/bin/psql
                pgdata: /var/lib/pgsql/9.4/data
                rep_mode: sync
                node_list: "{{ ansible_play_batch | join(' ') }}"
                restore_command: cp /var/lib/pgsql/9.4/archive/%f %p
                master_ip: 10.0.0.23
                restart_on_promote: "true"
                repuser: replication
              op:
                - name: start
                  timeout: 60s
                  interval: 0s
                  on-fail: restart
                - name: monitor
                  timeout: 60s
                  interval: 4s
                  on-fail: restart
                - name: monitor
                  timeout: 60s
                  interval: 3s
                  on-fail: restart
                  role: Master
                - name: promote
                  timeout: 60s
                  interval: 0s
                  on-fail: restart
                - name: demote
                  timeout: 60s
                  interval: 0s
                  on-fail: stop
                - name: stop
                  timeout: 60s
                  interval: 0s
                  on-fail: block
                - name: notify
                  timeout: 60s
                  interval: 0s

    - name: Configurer les contraintes
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      loop_control:
        loop_var: pcmk_constraint
      loop:
        - type: colocation
          rsc: virtual-ip
          with-rsc: postgres
          with-rsc-role: Master
          score: INFINITY
        - type: colocation
          rsc: nginx
          with-rsc: virtual-ip
          score: INFINITY
        - type: colocation
          rsc: coolapp
          with-rsc: virtual-ip
          score: INFINITY
        - type: order
          first: postgres
          first-action: promote
          then: virtual-ip
          then-action: start
          symmetrical: false
          score: INFINITY
        - type: order
          first: postgres
          first-action: demote
          then: virtual-ip
          then-action: stop
          symmetrical: false
          score: 0

Voir aussi

Droits d'auteur

Copyright 2015-2019, Development Gateway. Sous licence GPL v3+.

Installer
ansible-galaxy install devgateway.pacemaker
Licence
Unknown
Téléchargements
203
Propriétaire