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 i type: opisy agentów zasobów; provider może być pominięty, np. gdy type to service;
  • 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łonami name i interval, 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 grupy
  • resources to słownik, w którym klucze to identyfikatory zasobów, a wartości mają ten sam format co pcmk_resource (z wyjątkiem id 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 lub order;
  • 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 wymaga rsc i node;
  • colocation wymaga rsc i with-rsc;
  • order wymaga first i then;

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

Zainstaluj
ansible-galaxy install devgateway.pacemaker
Licencja
Unknown
Pobrania
203
Właściciel