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

Установить
ansible-galaxy install devgateway/ansible-role-pacemaker
Лицензия
Unknown
Загрузки
188
Владелец