devgateway.pacemaker
Rol de Pacemaker para Ansible
Este rol configura un clúster de Pacemaker mediante la carga de la configuración (CIB), ajustando el XML y recargándolo. El rol es idempotente y soporta el modo de verificación.
Ha sido rediseñado para configurar elementos individuales (valores predeterminados del clúster, recursos, grupos, restricciones, etc.) en lugar de todo el estado del clúster y todos los servicios. Esto permite centrarse en recursos específicos sin interferir con el resto.
Requisitos
Este rol ha sido escrito y probado en Scientific Linux 7. También podría funcionar en otras distribuciones, por favor comparte tu experiencia.
Tareas
Usa la directiva tasks_from
de Ansible para especificar lo que deseas configurar.
Los valores booleanos en las propiedades (analizados por el propio Pacemaker) no tienen que estar entre comillas. Sin embargo, los agentes de recursos pueden esperar argumentos similares a booleanos como enteros, cadenas, etc. Tales valores deben estar entre comillas.
tasks_from: main
Configura nodos, propiedades del clúster y valores predeterminados de recursos.
pcmk_cluster_name
Nombre del clúster (opcional).
Predeterminado: hacluster
.
pcmk_password
La contraseña en texto claro para el usuario del clúster (opcional). Si se omite, se derivará de ansible_machine_id
del primer host en el lote de reproducción. Esta contraseña solo se usa en la autenticación inicial de los nodos.
Predeterminado: ansible_machine_id | to_uuid
pcmk_user
El usuario del sistema para autenticar los nodos de PCS (opcional). PCS autentica todos los nodos entre sí.
Predeterminado: hacluster
pcmk_cluster_options
Diccionario con opciones a nivel de clúster (opcional).
pcmk_votequorum
Diccionario con opciones de votequorum (opcional). Ver votequorum(5)
. Se aceptan valores booleanos.
pcmk_resource_defaults
Diccionario de valores predeterminados de recursos (opcional).
tasks_from: resource
Configura un recurso simple.
pcmk_resource
Diccionario que describe un recurso simple (primitivo). Contiene los siguientes miembros:
id
: identificador del recurso; obligatorio para recursos simples;class
,provider
ytype
: descriptores del agente de recursos;provider
puede omitirse, por ejemplo, cuandotype
esservice
;options
: diccionario opcional de atributos específicos del recurso, por ejemplo, dirección y máscara de red para IPaddr2;op
: lista opcional de operaciones; cada operación es un diccionario con miembros obligatoriosname
einterval
, y miembros arbitrarios opcionales;meta
: diccionario opcional de meta-atributos.
tasks_from: group
Configura un grupo de recursos.
pcmk_group
Diccionario con dos miembros:
id
es el identificador del gruporesources
es un diccionario donde las claves son identificadores de recursos, y los valores tienen el mismo formato quepcmk_resource
(excepto queid
de los recursos es opcional).
tasks_from: constraint
Configura una restricción.
pcmk_constraint
Diccionario que define una única restricción. Los siguientes miembros son obligatorios:
type
: uno de:location
,colocation
oorder
;score
: puntaje de restricción (entero firmado,INFINITY
o-INFINITY
).
Dependiendo del valor de type
, también se requieren los siguientes miembros:
location
requierersc
ynode
;colocation
requierersc
ywith-rsc
;order
requierefirst
ythen
;
El diccionario puede contener otros miembros, por ejemplo, symmetrical
.
Ejemplos de playbooks
Servidor DNS BIND activo-activo en chroot
---
- name: Configurar clúster DNS
hosts: dns-servers
tasks:
- name: Configurar clúster
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: named
pcmk_cluster_options:
stonith-enabled: false
- name: Configurar recurso de dirección 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: Configurar recurso BIND clonado
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: Configurar restricciones
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: dns-ip
then: dns-clone
Proxy Squid activo-activo
---
- name: Configurar clúster Squid
hosts: proxy-servers
tasks:
- name: Configurar clúster
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: squid
pcmk_cluster_options:
stonith-enabled: false
- name: Configurar recurso de dirección 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: Configurar recurso Squid clonado
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: Configurar restricciones
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: squid-ip
then: squid
Nginx, aplicación web y Postgres maestro-esclavo
El clúster ejecuta dos nodos de Postgres con replicación síncrona. Donde sea que esté el maestro, una dirección IP virtual está en funcionamiento, a la cual NAT apunta. Nginx y la aplicación web se ejecutan en el mismo nodo, pero no en el otro, para ahorrar recursos. Basado en ejemplo del wiki de Clusterlabs.
---
- hosts:
- alpha
- bravo
tasks:
- name: Configurar Pacemaker con Postgres maestro/esclavo
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: Configurar recursos 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: Configurar Postgres maestro/esclavo
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: Configurar restricciones
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
Ver también
Derechos de autor
Derechos de autor 2015-2019, Development Gateway. Licenciado bajo GPL v3+.
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker