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
ettype
: descripteurs de l'agent de ressources ;provider
peut être omis, par exemple lorsquetype
estservice
;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 requisname
etinterval
, 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 grouperesources
est un dictionnaire où les clés sont des IDs de ressources et les valeurs ont le même format quepcmk_resource
(à l'exception deid
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
ouorder
;score
: score de la contrainte (entier signé,INFINITY
ou-INFINITY
).
Selon la valeur de type
, les membres suivants sont également requis :
location
nécessitersc
etnode
;colocation
nécessitersc
etwith-rsc
;order
nécessitefirst
etthen
;
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