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
undtype
: Beschreibungen des Ressourcenagents;provider
kann weggelassen werden, z.B. wenntype
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 Mitgliedernname
undinterval
, 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 Gruppenidentifikatorresources
ist ein Wörterbuch, in dem die Schlüssel die Ressourcen-IDs sind und die Werte das gleiche Format wiepcmk_resource
haben (außer dassid
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
oderorder
;score
: Zwangspunktzahl (Vorzeichenbehaftete Ganzzahl,INFINITY
oder-INFINITY
).
Abhängig vom Wert von type
sind auch folgende Mitglieder erforderlich:
location
erfordertrsc
undnode
;colocation
erfordertrsc
undwith-rsc
;order
erfordertfirst
undthen
;
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
Copyright 2015-2019, Development Gateway. Lizenziert unter GPL v3+.
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker