devgateway.pacemaker
Ansible的Pacemaker角色
该角色通过导出配置(CIB)、调整XML并重新加载来配置Pacemaker集群。该角色是幂等的,并支持检查模式。
它已被重新设计为配置单个元素(集群默认设置、资源、组、约束等),而不是整个集群和所有服务的状态。这使您可以专注于特定资源,而不会干扰其他部分。
要求
该角色是在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
描述简单(原始)资源的字典。包含以下成员:
id
:资源标识符;简单资源必需;class
、provider
和type
:资源代理描述符;当type
为service
时,provider
可以省略;options
:资源特定属性的可选字典,例如IPaddr2的地址和子网掩码;op
:可选的操作列表;每个操作是一个字典,包含必需的name
和interval
成员,以及可选的任意成员;meta
:可选的元属性字典。
tasks_from: group
配置资源组。
pcmk_group
包含两个成员的字典:
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: 配置克隆的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、Web应用程序和主从Postgres
集群运行两个具有同步复制的Postgres节点。无论主节点在哪,都会运行一个虚拟IP地址,NAT指向它。Nginx和Web应用程序在同一节点上运行,但不在其他节点上,以节省资源。基于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,开发网关。根据GPL v3+授权。
Configure Pacemaker cluster
ansible-galaxy install devgateway.pacemaker