pacemaker
Роль Pacemaker для Ansible
Эта роль настраивает кластер Pacemaker, экспортируя конфигурацию (CIB), изменяя XML и перезагружая его. Роль идемпотентна и поддерживает режим проверки.
Она была переработана, чтобы настраивать отдельные элементы (параметры кластера, ресурсы, группы, ограничения и т. д.), а не всё состояние кластера и все услуги. Это позволяет сосредоточиться на конкретных ресурсах, не вмешиваясь в остальное.
Требования
Эта роль была написана и протестирована в Scientific Linux 7. Она может работать и в других дистрибутивах, пожалуйста, поделитесь своим опытом.
Задачи
Используйте директиву tasks_from
, чтобы указать, что вы хотите настроить.
Булевы значения в свойствах (обрабатываемые самим Pacemaker) не обязательно ставить в кавычки. Однако, ресурсные агенты могут ожидать аргументы, похожие на булевы, в виде целых чисел, строк и т. д. Такие значения должны быть в кавычках.
tasks_from: main
Настройка узлов, конфигурация свойств кластера и ресурсов по умолчанию.
pcmk_cluster_name
Имя кластера (по желанию).
По умолчанию: hacluster
.
pcmk_password
Пароль в открытом виде для пользователя кластера (по желанию). Если не указан, будет взят из ansible_machine_id
первого хоста в плей-батче. Этот пароль используется только для начальной аутентификации узлов.
По умолчанию: ansible_machine_id | to_uuid
pcmk_user
Системный пользователь для аутентификации узлов PCS (по желанию). PCS будет аутентифицировать все узлы между собой.
По умолчанию: hacluster
pcmk_cluster_options
Словарь с опциями кластера (по желанию).
pcmk_votequorum
Словарь с опциями votequorum (по желанию). Смотрите votequorum(5)
. Принимаются булевы значения.
pcmk_resource_defaults
Словарь параметров ресурсов по умолчанию (по желанию).
tasks_from: resource
Настройка простого ресурса.
pcmk_resource
Словарь, описывающий простой (примитивный) ресурс. Содержит следующие элементы:
id
: идентификатор ресурса; обязательный для простых ресурсов;class
,provider
иtype
: описания ресурсных агентов;provider
может быть опущен, например, когдаtype
-service
;options
: необязательный словарь с атрибутами, специфичными для ресурса, например, адрес и маску подсети для IPaddr2;op
: необязательный список операций; каждая операция - это словарь с обязательными элементамиname
иinterval
, а также необязательными произвольными элементами;meta
: необязательный словарь мета-атрибутов.
tasks_from: group
Настройка группы ресурсов.
pcmk_group
Словарь с двумя элементами:
id
- идентификатор группыresources
- словарь, где ключи - это идентификаторы ресурсов, а значения имеют тот же формат, что иpcmk_resource
(кроме того, чтоid
ресурсов является необязательным).
tasks_from: constraint
Настройка ограничения.
pcmk_constraint
Словарь, определяющий одно ограничение. Требуются следующие элементы:
type
: один из:location
,colocation
илиorder
;score
: оценка ограничения (целое число со знаком,INFINITY
или-INFINITY
).
В зависимости от значения type
также требуются следующие элементы:
location
требуетrsc
иnode
;colocation
требуетrsc
иwith-rsc
;order
требуетfirst
иthen
;
Словарь может содержать другие элементы, например, symmetrical
.
Примеры плейбуков
Активно-активный chrooted BIND DNS сервер
---
- name: Настройка DNS кластера
hosts: dns-servers
tasks:
- name: Настройка кластера
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: named
pcmk_cluster_options:
stonith-enabled: false
- name: Настроить ресурс 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: Настроить клонированный ресурс 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: Настройка ограничений
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: dns-ip
then: dns-clone
Активно-активный прокси Squid
---
- name: Настройка кластера Squid
hosts: proxy-servers
tasks:
- name: Настройка кластера
include_role:
name: devgateway.pacemaker
vars:
pcmk_password: hunter2
pcmk_cluster_name: squid
pcmk_cluster_options:
stonith-enabled: false
- name: Настроить ресурс 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: Настроить клонированный ресурс Squid
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: Настройка ограничений
include_role:
name: devgateway.pacemaker
tasks_from: constraint
vars:
pcmk_constraint:
type: order
first: squid-ip
then: squid
Nginx, веб-приложение и master-slave Postgres
Кластер запускает два узла Postgres с синхронной репликацией. Где бы ни находился мастер, виртуальный IP адрес работает там, куда направлен NAT. Nginx и веб-приложение работают на одном узле, а не на другом, чтобы сэкономить ресурсы. На основе примера из вики Clusterlabs.
---
- hosts:
- alpha
- bravo
tasks:
- name: Настройка Pacemaker с 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: Настроить простые ресурсы
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
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: Настройка ограничений
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
См. также
Авторские права
Авторские права 2015-2019, Development Gateway. Лицензировано по лицензии GPL v3+.
Configure Pacemaker cluster
ansible-galaxy install devgateway/ansible-role-pacemaker