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,- provideret- type: descripteurs de l'agent de ressources ;- providerpeut être omis, par exemple lorsque- typeest- 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- nameet- 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 :
- idest l'identifiant du groupe
- resourcesest 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- idde 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,- colocationou- order;
- score: score de la contrainte (entier signé,- INFINITYou- -INFINITY).
Selon la valeur de type, les membres suivants sont également requis :
- locationnécessite- rscet- node;
- colocationnécessite- rscet- with-rsc;
- ordernécessite- firstet- 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+.
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker