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 y type: descriptores del agente de recursos; provider puede omitirse, por ejemplo, cuando type es service;
  • 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 obligatorios name e interval, 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 grupo
  • resources es un diccionario donde las claves son identificadores de recursos, y los valores tienen el mismo formato que pcmk_resource (excepto que id 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 o order;
  • score: puntaje de restricción (entero firmado, INFINITY o -INFINITY).

Dependiendo del valor de type, también se requieren los siguientes miembros:

  • location requiere rsc y node;
  • colocation requiere rsc y with-rsc;
  • order requiere first y then;

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+.

Instalar
ansible-galaxy install devgateway.pacemaker
Licencia
Unknown
Descargas
203
Propietario