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
: リソース識別子;シンプルなリソースには必須;class
、provider
、type
: リソースエージェントの説明子;provider
は省略できます(例:type
がservice
の場合);options
: リソース特有の属性を含むオプションの辞書(例: IPaddr2のアドレスとネットマスク);op
: 操作のオプションリスト;各操作は必須のname
とinterval
メンバー、および任意のメンバーを持つ辞書です;meta
: メタ属性のオプション辞書。
tasks_from: group
リソースグループを構成します。
pcmk_group
以下の2つのメンバーを含む辞書:
id
: グループ識別子resources
: リソースIDがキーで、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: 複製された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+のもとでライセンスされています。
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker