devgateway.pacemaker

Ansible用のPacemakerロール

このロールは、Pacemakerクラスタを構成するために設定(CIB)をダンプし、XMLを調整し、再読み込みします。このロールは冪等性があり、チェックモードをサポートしています。

このロールは、クラスタ全体の状態やすべてのサービスではなく、個別の要素(クラスタのデフォルト、リソース、グループ、制約など)を構成するように再設計されました。これにより、他の部分に影響を与えることなく、特定のリソースに焦点を合わせることができます。

要件

このロールはScientific Linux 7向けに書かれ、テストされています。他のディストリビューションでも動作する可能性がありますので、経験を共有してください。

タスク

tasks_from Ansibleディレクティブを使用して、構成する内容を指定します。

プロパティ内のブール値(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(5)を参照してください。ブール値が受け入れられます。

pcmk_resource_defaults

リソースのデフォルトを含む辞書(オプション)。

tasks_from: resource

シンプルなリソースを構成します。

pcmk_resource

シンプルな(primitive)リソースを説明する辞書。以下のメンバーが含まれます。

  • id: リソース識別子;シンプルなリソースには必須;
  • classprovidertype: リソースエージェントの説明子;providerは省略できます(例: typeserviceの場合);
  • options: リソース特有の属性を含むオプションの辞書(例: IPaddr2のアドレスとネットマスク);
  • op: 操作のオプションリスト;各操作は必須のnameintervalメンバー、および任意のメンバーを持つ辞書です;
  • meta: メタ属性のオプション辞書。

tasks_from: group

リソースグループを構成します。

pcmk_group

以下の2つのメンバーを含む辞書:

  • id: グループ識別子
  • resources: リソースIDがキーで、pcmk_resourceと同様の形式の値を持つ辞書(リソースのidはオプショナルです)。

tasks_from: constraint

制約を構成します。

pcmk_constraint

単一の制約を定義する辞書。以下のメンバーが必須です:

  • type: locationcolocation、またはorderのいずれか;
  • score: 制約スコア(符号付き整数、INFINITY、または-INFINITY)。

typeの値に応じて、以下のメンバーも必須です:

  • locationにはrscnodeが必要;
  • colocationにはrscwith-rscが必要;
  • orderにはfirstthenが必要;

この辞書には、他のメンバー(例: 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: 複製された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: 制約のセットアップ
      include_role:
        name: devgateway.pacemaker
        tasks_from: constraint
      vars:
        pcmk_constraint:
          type: order
          first: squid-ip
          then: squid

Nginx、ウェブアプリケーション、マスター-スレーブPostgres

このクラスタは、同期レプリケーションを行う2つのPostgresノードを実行します。マスターがどこにいるとしても、仮想IPアドレスが稼働しており、NATがそれを指しています。Nginxとウェブアプリは同じノードで稼働していますが、他のノードでは資源を節約するために稼働していません。これはClusterlabs wikiの例を基にしています

---
- hosts:
    - alpha
    - bravo
  tasks:

    - name: Postgresマスター/スレーブとのPacemakerのセットアップ
      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: マスター-スレーブ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.pacemaker
ライセンス
Unknown
ダウンロード
203