devgateway.pacemaker
Rola Pacemaker dla Ansible
Ta rola konfiguruje klaster Pacemaker, dumpując konfigurację (CIB), dostosowując XML i przeładowując go. Rola jest idempotentna i wspiera tryb sprawdzania.
Została przeprojektowana, aby konfigurować poszczególne elementy (domyślne ustawienia klastra, zasoby, grupy, ograniczenia itp.) zamiast całego stanu klastra i wszystkich usług. Umożliwia to skoncentrowanie się na konkretnych zasobach, bez zakłócania reszty.
Wymagania
Ta rola została napisana i testowana na Scientific Linux 7. Może również działać w innych dystrybucjach, prosimy o podzielenie się swoimi doświadczeniami.
Zadania
Użyj dyrektywy tasks_from
Ansible, aby określić, co chcesz skonfigurować.
Wartości logiczne w właściwościach (parsingowane przez samego Pacemakera) nie muszą być umieszczane w cudzysłowach. Jednak agenci zasobów mogą oczekiwać argumentów podobnych do wartości logicznych w postaci liczb całkowitych, ciągów znaków itp. Takie wartości muszą być umieszczone w cudzysłowach.
tasks_from: main
Skonfiguruj węzły, ustawiając właściwości klastra oraz domyślne zasoby.
pcmk_cluster_name
Nazwa klastra (opcjonalna).
Domyślnie: hacluster
.
pcmk_password
Hasło w postaci tekstu jawnego dla użytkownika klastra (opcjonalne). Jeśli zostanie pominięte, zostanie wywnioskowane z ansible_machine_id
pierwszego hosta w partii zadań. To hasło jest używane tylko w początkowej autoryzacji węzłów.
Domyślnie: ansible_machine_id | to_uuid
pcmk_user
Użytkownik systemowy do autoryzacji węzłów PCS (opcjonalny). PCS będzie autoryzować wszystkie węzły nawzajem.
Domyślnie: hacluster
pcmk_cluster_options
Słownik z opcjami na poziomie klastra (opcjonalny).
pcmk_votequorum
Słownik z opcjami votequorum (opcjonalny). Zobacz votequorum(5)
. Wartości logiczne są akceptowane.
pcmk_resource_defaults
Słownik domyślnych zasobów (opcjonalny).
tasks_from: resource
Skonfiguruj prosty zasób.
pcmk_resource
Słownik opisujący prosty (prymitywny) zasób. Zawiera następujące człony:
id
: identyfikator zasobu; obowiązkowy dla prostych zasobów;class
,provider
itype
: opisy agentów zasobów;provider
może być pominięty, np. gdytype
toservice
;options
: opcjonalny słownik atrybutów specyficznych dla zasobów, np. adres i maska sieciowa dla IPaddr2;op
: opcjonalna lista operacji; każda operacja to słownik z wymaganymi członaminame
iinterval
, oraz opcjonalnymi dowolnymi członami;meta
: opcjonalny słownik meta-atributów.
tasks_from: group
Skonfiguruj grupę zasobów.
pcmk_group
Słownik z dwoma członami:
id
to identyfikator grupyresources
to słownik, w którym klucze to identyfikatory zasobów, a wartości mają ten sam format copcmk_resource
(z wyjątkiemid
zasobów, który jest opcjonalny).
tasks_from: constraint
Skonfiguruj ograniczenie.
pcmk_constraint
Słownik definiujący pojedyncze ograniczenie. Następujące człony są obowiązkowe:
type
: jeden z:location
,colocation
luborder
;score
: wynik ograniczenia (liczba całkowita ze znakiem,INFINITY
lub-INFINITY
).
W zależności od wartości type
, następujące człony są również wymagane:
location
wymagarsc
inode
;colocation
wymagarsc
iwith-rsc
;order
wymagafirst
ithen
;
Słownik może zawierać inne człony, np. symmetrical
.
Przykładowe pliki playbook
Aktywny-aktywny serwer DNS BIND w chroot
---
- name: Konfiguracja klastra DNS
hosts: dns-servers
tasks:
- name: Ustawienie klastra
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: named
pcmk_cluster_options:
stonith-enabled: false
- name: Konfiguracja zasobu adresu 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: Konfiguracja klonowanego zasobu BIND
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: Ustawienie ograniczeń
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: dns-ip
then: dns-clone
Aktywny-aktywny proxy Squid
---
- name: Konfiguracja klastra Squid
hosts: proxy-servers
tasks:
- name: Ustawienie klastra
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: squid
pcmk_cluster_options:
stonith-enabled: false
- name: Konfiguracja zasobu adresu 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: Konfiguracja klonowanego zasobu BIND
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: Ustawienie ograniczeń
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: squid-ip
then: squid
Nginx, aplikacja webowa i Postgres master-slave
Klaster uruchamia dwa węzły Postgres z replikacją synchroniczną. Gdziekolwiek jest master, tam działa wirtualny adres IP, na który wskazuje NAT. Nginx i aplikacja webowa działają na tym samym węźle, ale nie na innym, aby oszczędzać zasoby. Na podstawie przykładu z wiki Clusterlabs.
---
- hosts:
- alpha
- bravo
tasks:
- name: Ustawienie Pacemaker z Postgres master/slave
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: Konfiguracja prostych zasobów
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: Konfiguracja Postgres master-slave
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: Ustawienie ograniczeń
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
Zobacz także
Prawa autorskie
Copyright 2015-2019, Development Gateway. Licencjonowane na podstawie GPL v3+.
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker