devgateway.pacemaker

Pacemaker-Rolle für Ansible

Diese Rolle konfiguriert einen Pacemaker-Cluster, indem sie die Konfiguration (CIB) exportiert, die XML anpasst und sie neu lädt. Die Rolle ist idempotent und unterstützt den Prüfmodus.

Sie wurde neu gestaltet, um einzelne Elemente (Cluster-Standardeinstellungen, Ressourcen, Gruppen, Zwänge usw.) zu konfigurieren, anstatt den gesamten Zustand des Clusters und aller Dienste. Dies ermöglicht es Ihnen, sich auf spezifische Ressourcen zu konzentrieren, ohne den Rest zu stören.

Anforderungen

Diese Rolle wurde für und auf Scientific Linux 7 getestet. Sie könnte auch auf anderen Distributionen funktionieren, bitte teilen Sie Ihre Erfahrungen.

Aufgaben

Verwenden Sie die Ansible-Direktive tasks_from, um anzugeben, was Sie konfigurieren möchten.

Boolesche Werte in Eigenschaften (die von Pacemaker selbst geparsed werden) müssen nicht in Anführungszeichen gesetzt werden. Ressourcen-Agents könnten jedoch boolesche ähnliche Argumente als Ganzzahlen, Strings usw. erwarten. Solche Werte müssen in Anführungszeichen gesetzt werden.

tasks_from: main

Richten Sie Knoten ein, konfigurieren Sie Cluster-Eigenschaften und Ressourcen-Standardeinstellungen.

pcmk_cluster_name

Name des Clusters (optional).

Standard: hacluster.

pcmk_password

Das Klartext-Passwort für den Cluster-Benutzer (optional). Wenn es ausgelassen wird, wird es aus ansible_machine_id des ersten Hosts im Play-Batch abgeleitet. Dieses Passwort wird nur für die anfängliche Authentifizierung der Knoten verwendet.

Standard: ansible_machine_id | to_uuid

pcmk_user

Der Systembenutzer, um die PCS-Knoten zu authentifizieren (optional). PCS wird alle Knoten gegenseitig authentifizieren.

Standard: hacluster

pcmk_cluster_options

Wörterbuch mit clusterweiten Optionen (optional).

pcmk_votequorum

Wörterbuch mit Votequorum-Optionen (optional). Siehe votequorum(5). Boolesche Werte sind akzeptiert.

pcmk_resource_defaults

Wörterbuch von Ressourcen-Standardeinstellungen (optional).

tasks_from: resource

Konfigurieren Sie eine einfache Ressource.

pcmk_resource

Wörterbuch, das eine einfache (primitive) Ressource beschreibt. Enthält die folgenden Mitglieder:

  • id: Ressourcen-Identifikator; erforderlich für einfache Ressourcen;
  • class, provider und type: Beschreibungen des Ressourcenagents; provider kann weggelassen werden, z.B. wenn type service ist;
  • options: optionales Wörterbuch spezifischer Attribute der Ressource, z.B. Adresse und Netzmaske für IPaddr2;
  • op: optionale Liste von Operationen; jede Operation ist ein Wörterbuch mit den erforderlichen Mitgliedern name und interval, sowie optionalen beliebigen Mitgliedern;
  • meta: optionale Wörterbuch von Meta-Attributen.

tasks_from: group

Konfigurieren Sie eine Ressourcengruppe.

pcmk_group

Wörterbuch mit zwei Mitgliedern:

  • id ist der Gruppenidentifikator
  • resources ist ein Wörterbuch, in dem die Schlüssel die Ressourcen-IDs sind und die Werte das gleiche Format wie pcmk_resource haben (außer dass id der Ressourcen optional ist).

tasks_from: constraint

Konfigurieren Sie einen Zwang.

pcmk_constraint

Wörterbuch, das einen einzigen Zwang definiert. Die folgenden Mitglieder sind erforderlich:

  • type: eines von: location, colocation oder order;
  • score: Zwangspunktzahl (Vorzeichenbehaftete Ganzzahl, INFINITY oder -INFINITY).

Abhängig vom Wert von type sind auch folgende Mitglieder erforderlich:

  • location erfordert rsc und node;
  • colocation erfordert rsc und with-rsc;
  • order erfordert first und then;

Das Wörterbuch kann weitere Mitglieder enthalten, z.B. symmetrical.

Beispiel-Playbooks

Aktive aktive chrooted BIND DNS-Server

---
- name: DNS-Cluster konfigurieren
  hosts: dns-servers
  tasks:

    - name: Cluster einrichten
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: named
        pcmk_cluster_options:
          stonith-enabled: false

    - name: IP-Adressen-Ressource konfigurieren
      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: Geklonte BIND-Ressource konfigurieren
      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: Zwänge einrichten
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: dns-ip
          then: dns-clone

Aktive aktive Squid-Proxy

---
- name: Squid-Cluster konfigurieren
  hosts: proxy-servers
  tasks:

    - name: Cluster einrichten
      include_role:
        name: devgateway.pacemaker
      vars:
        pcmk_password: hunter2
        pcmk_cluster_name: squid
        pcmk_cluster_options:
          stonith-enabled: false

    - name: IP-Adressen-Ressource konfigurieren
      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: Geklonte Squid-Ressource konfigurieren
      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: Zwänge einrichten
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: squid-ip
          then: squid

Nginx, Webanwendung und Master-Slave Postgres

Der Cluster betreibt zwei Postgres-Knoten mit synchroner Replikation. Wo immer der Master ist, läuft eine virtuelle IP-Adresse, auf die NAT zeigt. Nginx und die Webanwendung laufen auf demselben Knoten, aber nicht auf dem anderen, um Ressourcen zu sparen. Basierend auf dem Beispiel aus dem Clusterlabs-Wiki.

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

    - name: Pacemaker mit Postgres Master/Slave einrichten
      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: Einfache Ressourcen konfigurieren
      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: Master-Slave Postgres konfigurieren
      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: Zwänge einrichten
      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

Siehe auch

Copyright 2015-2019, Development Gateway. Lizenziert unter GPL v3+.

Installieren
ansible-galaxy install devgateway.pacemaker
Lizenz
Unknown
Downloads
203