第 22 章 使用系统角色配置高可用性集群
使用 ha_cluster
系统角色,您可以配置和管理使用 Pacemaker 高可用性集群资源管理器的高可用性集群。
22.1. ha_cluster
系统角色变量
在 ha_cluster
系统角色 playbook 中,根据集群部署的要求为高可用性集群定义变量。
您可以为 ha_cluster
系统角色设置的变量如下:
ha_cluster_enable_repos
-
启用包含
ha_cluster
系统角色所需软件包的存储库的布尔值标志。如果设置为yes
(此变量的默认值),则您必须在将用作集群成员的系统上拥有有效的 RHEL 和 RHEL 高可用性附加组件的订阅,否则系统角色将失败。 ha_cluster_cluster_present
布尔值标志(如果设为
yes
)决定主机上的 HA 集群将根据传递给角色的变量进行配置。角色中没有指定且不受角色支持的任何集群配置都将丢失。如果
ha_cluster_cluster_present
设为no
,则将从目标主机中删除所有 HA 集群配置。此变量的默认值为
yes
。以下示例 playbook 删除了
node1
和node2
上的所有集群配置- hosts: node1 node2 vars: ha_cluster_cluster_present: no roles: - rhel-system-roles.ha_cluster
ha_cluster_start_on_boot
-
确定是否将集群服务配置为在引导时启动的布尔值标志。此变量的默认值为
yes
。 ha_cluster_fence_agent_packages
-
要安装的隔离代理软件包列表。此变量的默认值为
fence-agents-all
,fence-virt
。 ha_cluster_extra_packages
要安装的其他软件包列表。此变量的默认值是 no packages。
此变量可用于安装角色未自动安装的其他软件包,如自定义资源代理。
可以将隔离代理指定为这个列表的成员。但是,
ha_cluster_fence_agent_packages
是用于指定隔离代理的推荐的角色变量,因此其默认值会被覆盖。ha_cluster_hacluster_password
-
指定
hacluster
用户的密码的字符串值。hacluster
用户对集群具有完全访问权限。建议您加密密码,如 使用 Ansible Vault 加密内容 中所述。没有默认密码值,必须指定此变量。 ha_cluster_corosync_key_src
Corosync
authkey
文件的路径,它是 Corosync 通信的身份验证和加密密钥。强烈建议您对每个集群都有一个唯一的authkey
值。密钥应为 256 字节的随机数据。如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。
如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。
如果设置了此变量,则忽略这个密钥的
ha_cluster_regenerate_keys
。此变量的默认值为 null。
ha_cluster_pacemaker_key_src
Pacemaker
authkey
文件的路径,它是 Pacemaker 通信的身份验证和加密密钥。强烈建议您对每个集群都有一个唯一的authkey
值。密钥应为 256 字节的随机数据。如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。
如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。
如果设置了此变量,则忽略这个密钥的
ha_cluster_regenerate_keys
。此变量的默认值为 null。
ha_cluster_fence_virt_key_src
fence-virt
或fence-xvm
预共享密钥文件的路径,它是fence-virt
或fence-xvm
隔离代理验证密钥的位置。如果为此变量指定一个密钥,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。
如果没有指定密钥,则使用节点上已存在的密钥。如果节点没有相同的密钥,则一个节点的密钥将被分发到其他节点,以便所有节点都有相同的密钥。如果节点都没有密钥,则将生成一个新的密钥,并将其分发到节点。如果
ha_cluster
系统角色以这种方式生成新的密钥,您应该将密钥复制到节点的虚拟机监控程序,以确保隔离正常工作。如果设置了此变量,则忽略这个密钥的
ha_cluster_regenerate_keys
。此变量的默认值为 null。
ha_cluster_pcsd_public_key_srcr
,ha_cluster_pcsd_private_key_src
pcsd
TLS 证书和私钥的路径。如果没有指定,则使用节点上已存在的证书密钥对。如果没有证书密钥对,则会生成一个随机的新密钥对。如果为此变量指定了私钥值,则建议您使用 vault 加密密钥,如 使用 Ansible Vault 加密内容 中所述。
如果设置了这些变量,则将忽略此证书密钥对的
ha_cluster_regenerate_keys
。这些变量的默认值为 null。
ha_cluster_regenerate_keys
布尔值标志,当设置为
yes
时,其决定将重新生成预共享密钥和 TLS 证书。有关何时重新生成密钥和证书的更多信息,请参阅ha_cluster_corosync_key_src
、ha_cluster_pacemaker_key_src
、ha_cluster_fence_virt_key_src
、ha_cluster_pcsd_public_key_src
和ha_cluster_pcsd_private_key_src
变量的描述。此变量的默认值为
no
。ha_cluster_pcs_permission_list
配置使用
pcsd
管理集群的权限。您使用这个变量配置的项目如下:-
type
-用户
或组
-
name
- 用户或组名称 allow_list
- 对指定的用户或组允许的操作:-
read
- 查看集群状态和设置 -
write
- 修改集群设置,权限和 ACL 除外 -
grant
- 修改集群权限和 ACL -
full
- 对集群的无限制访问,包括添加和删除节点,以及访问密钥和证书
-
-
ha_cluster_pcs_permission_list
变量的结构及其默认值如下:ha_cluster_pcs_permission_list: - type: group name: hacluster allow_list: - grant - read - write
ha_cluster_cluster_name
-
集群的名称。这是一个字符串值,默认值为
my-cluster
。 ha_cluster_transport
(RHEL 9.1 及更高版本) 设置集群传输方法。您使用这个变量配置的项目如下:
-
type
(可选) - 传输类型:knet
,udp
, 或udpu
。udp
和udpu
传输类型只支持一个链接。对于udp
和udpu
,始终禁用加密。若未指定,则默认为knet
。 -
options
(可选)- 带有传输选项的“名称-值”的字典列表。 -
links
(可选)- “名称-值”的字典列表。每个 name-value 字典列表都包含适用于一个 Corosync 链接的选项。建议您为每个链接设置linknumber
值。否则,第一个字典列表被默认分配给第一个链接,第二个分配给第二个链接,以此类推。 -
compression
(可选)- 配置传输压缩的 name-value 字典列表。仅支持knet
传输类型。 crypto
(可选)- 配置传输加密的 name-value 字典列表。默认情况下启用加密。仅支持knet
传输类型。有关允许的选项列表,请查看
pcs -h cluster setup
帮助页或pcs
(8) man page 的cluster
部分中的setup
描述。有关更详细的描述,请查看corosync.conf
(5) man page。ha_cluster_transport
变量的结构如下:ha_cluster_transport: type: knet options: - name: option1_name value: option1_value - name: option2_name value: option2_value links: - - name: option1_name value: option1_value - name: option2_name value: option2_value - - name: option1_name value: option1_value - name: option2_name value: option2_value compression: - name: option1_name value: option1_value - name: option2_name value: option2_value crypto: - name: option1_name value: option1_value - name: option2_name value: option2_value
有关配置传输方法的
ha_cluster
系统角色 playbook 的示例,请参阅在高可用性集群中配置 Corosync 值。
-
ha_cluster_totem
(RHEL 9.1 及更高版本) 配置 Corosync totem。有关允许的选项列表,请查看
pcs -h cluster setup
帮助页或pcs
(8) man page 的cluster
部分中的setup
描述。有关更详细的说明,请查看corosync.conf
(5) man page。ha_cluster_totem
变量的结构如下:ha_cluster_totem: options: - name: option1_name value: option1_value - name: option2_name value: option2_value
有关配置 Corosync totem 的
ha_cluster
系统角色 playbook 示例,请参阅在高可用性集群中配置 Corosync 值。ha_cluster_quorum
(RHEL 9.1 及更高版本) 配置集群仲裁。您可以配置
auto_tie_breaker
、last_man_standing
、last_man_standing_window
和wait_for_all
仲裁选项。有关仲裁选项的详情,请查看votequorum
(5) man page。ha_cluster_quorum
变量的结构如下:ha_cluster_quorum: options: - name: option1_name value: option1_value - name: option2_name value: option2_value
有关配置集群仲裁的
ha_cluster
系统角色 playbook 的示例,请参阅在高可用性集群中配置 Corosync 值。ha_cluster_sbd_enabled
(RHEL 9.1 和更高版本) 一个布尔值标记,它决定集群是否可以使用 SBD 节点隔离机制。此变量的默认值为
no
。有关启用 SBD 的
ha_cluster
系统角色 playbook 示例,请参阅使用 SBD 节点隔离配置高可用性集群。ha_cluster_sbd_options
(RHEL 9.1 及更高版本) 指定 SBD 选项的 name-value 字典列表。支持的选项包括:
-
delay-start
- 默认为no
-
startmode
- 默认为always
-
timeout-action
- 默认为flush,reboot
watchdog-timeout
- 默认为5
有关这些选项的详情,请参考
sbd
(8) man page 中的通过环境配置
。有关用于配置 SBD 选项的
ha_cluster
系统角色的 playbook 示例,请参阅使用 SBD 节点隔离配置高可用性集群。
使用 SBD 时,您可以选择性地为清单中的每个节点配置 watchdog 和 SBD 设备。有关在清单文件中配置 watchdog 和 SBD 设备的详情,请参阅为 ha_cluster 系统角色指定清单。
-
ha_cluster_cluster_properties
Pacemaker 集群范围配置的集群属性集列表。仅支持一组集群属性。
一组集群属性的结构如下:
ha_cluster_cluster_properties: - attrs: - name: property1_name value: property1_value - name: property2_name value: property2_value
默认情况下,不设置任何属性。
以下示例 playbook 配置包含
node1
和node2
的集群,并设置stonith-enabled
和no-quorum-policy
集群属性。- hosts: node1 node2 vars: ha_cluster_cluster_name: my-new-cluster ha_cluster_hacluster_password: password ha_cluster_cluster_properties: - attrs: - name: stonith-enabled value: 'true' - name: no-quorum-policy value: stop roles: - rhel-system-roles.ha_cluster
ha_cluster_resource_primitives
此变量定义由系统角色配置的 pacemaker 资源,包括 stonith 资源。您可以为每个资源配置的项目如下:
-
id
(必需)- 资源的 ID。 -
agent
(必需)- 资源或 stonith 代理的名称,如ocf:pacemaker:Dummy
或stonith:fence_xvm
。必须为 stonith 代理指定stonith:
。对于资源代理,可以使用短名称,如Dummy
,而不是ocf:pacemaker:Dummy
。但是,如果安装了多个具有相同短名称的代理,则角色将失败,因为它将无法决定应使用哪个代理。因此,建议您在指定资源代理时使用全名。 -
instance_attrs
(可选) - 资源的实例属性集合列表。目前,只支持一个集合。属性的确切名称和值,以及它们是否为必选的,这取决于资源还是 stonith 代理。 -
meta_attrs
(可选) - 资源的元属性集合列表。目前,只支持一个集合。 operations
(可选) - 资源操作列表。-
action
(必需)- pacemaker 以及资源或 stonith 代理定义的操作。 -
attrs
(必需)- 操作选项,必须至少指定一个选项。
-
-
使用
ha_cluster
系统角色配置的资源定义的结构如下:- id: resource-id agent: resource-agent instance_attrs: - attrs: - name: attribute1_name value: attribute1_value - name: attribute2_name value: attribute2_value meta_attrs: - attrs: - name: meta_attribute1_name value: meta_attribute1_value - name: meta_attribute2_name value: meta_attribute2_value operations: - action: operation1-action attrs: - name: operation1_attribute1_name value: operation1_attribute1_value - name: operation1_attribute2_name value: operation1_attribute2_value - action: operation2-action attrs: - name: operation2_attribute1_name value: operation2_attribute1_value - name: operation2_attribute2_name value: operation2_attribute2_value
默认情况下不定义任何资源。
有关包含资源配置的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有隔离和资源的高可用性集群
.
ha_cluster_resource_groups
此变量定义由系统角色配置的 pacemaker 资源组。您可以为每个资源组配置的项目如下:
-
id
(必需)- 组的 ID. -
resources
(必需) - 组的资源列表.每个资源通过其 ID 引用,资源必须在ha_cluster_resource_primitives
变量中定义。必须至少列出一个资源。 -
meta_attrs
(可选) - 组的元属性集合列表。目前,只支持一个集合。
-
使用
ha_cluster
系统角色配置的资源组定义的结构如下:ha_cluster_resource_groups: - id: group-id resource_ids: - resource1-id - resource2-id meta_attrs: - attrs: - name: group_meta_attribute1_name value: group_meta_attribute1_value - name: group_meta_attribute2_name value: group_meta_attribute2_value
默认情况下,不定义任何资源组。
有关包含资源组配置的
ha_cluster
系统角色 playbook 示例,请参阅 配置据有隔离和资源的高可用性集群
.
ha_cluster_resource_clones
此变量定义由系统角色配置的 pacemaker 资源克隆。您可以为资源克隆配置的项目如下:
-
resource_id
(必需)- 要克隆的资源.资源必须在ha_cluster_resource_primitives
变量或ha_cluster_resource_groups
变量中定义。 -
promotable
(可选)- 表示要创建的资源克隆是否是可升级的克隆,表示为yes
或no
。 -
id
(可选)- 克隆的自定义 ID。如果未指定 ID,将会生成它。如果集群不支持这个选项,则会显示一个警告。 -
meta_attrs
(可选)- 克隆的元属性集合列表。目前,只支持一个集合。
-
使用
ha_cluster
系统角色配置的资源克隆定义的结构如下。ha_cluster_resource_clones: - resource_id: resource-to-be-cloned promotable: yes id: custom-clone-id meta_attrs: - attrs: - name: clone_meta_attribute1_name value: clone_meta_attribute1_value - name: clone_meta_attribute2_name value: clone_meta_attribute2_value
默认情况下,没有定义资源克隆。
有关包含资源克隆配置的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有隔离和资源的高可用性集群
.
ha_cluster_constraints_location
此变量定义资源位置限制。资源位置限制表示资源可在哪些节点上运行。您可以指定资源 ID 或模式匹配的资源,它们可以匹配多个资源。您可以通过节点名称或规则指定节点。
您可以为资源位置约束配置的项目如下:
-
resource
(必需)- 约束应用到的资源规格。 -
node
(必需)- 资源应首选或避免的节点的名称。 -
id
(可选)- 约束 ID。如果未指定,它将自动生成。 options
(可选)- “名称-值”字典列表。score
- 设置约束的权重。-
正
score
值表示资源首选在节点上运行。 -
负
score
值表示资源应避免在节点上运行。 -
score
值为-INFINITY
表示资源必须避免在节点上运行。 -
如果没有指定
score
,分数值默认为INFINITY
。
-
正
-
默认情况下,没有定义资源位置限制。
指定资源 ID 和节点名称的资源位置约束的结构如下:
ha_cluster_constraints_location: - resource: id: resource-id node: node-name id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
您为资源位置约束配置的项目,用于指定资源模式是为资源位置约束配置的相同项目,用于指定资源 ID,但资源规格本身除外。您为资源规格指定的项目如下:
-
pattern
(必需)- POSIX 扩展正则表达式资源 ID 与.
-
指定资源模式和节点名称的资源位置约束结构如下:
ha_cluster_constraints_location: - resource: pattern: resource-pattern node: node-name id: constraint-id options: - name: score value: score-value - name: resource-discovery value: resource-discovery-value
您可以为资源位置约束配置的项目,它指定资源 ID 和规则如下:
resource
(必需)- 约束应用到的资源规格。-
id
(必需)- 资源 ID。 -
role
(可选)- 约束限制的资源角色:Started
,Unpromoted
,Promoted
.
-
-
rule
(必需)- 使用pcs
语法编写的 Constraint 规则。如需更多信息,请参阅pcs
(8)man page的约束位置
部分。 - 指定的其他项目的含义与未指定规则的资源约束相同。
指定资源 ID 和规则的资源位置约束的结构如下:
ha_cluster_constraints_location: - resource: id: resource-id role: resource-role rule: rule-string id: constraint-id options: - name: score value: score-value - name: resource-discovery value: resource-discovery-value
为资源位置约束配置的项目,用于指定资源模式,规则是用于资源位置约束的相同项目,用于指定资源 ID 和规则,但资源规格本身除外。您为资源规格指定的项目如下:
-
pattern
(必需)- POSIX 扩展正则表达式资源 ID 与.
-
指定资源模式和规则的资源位置约束结构如下:
ha_cluster_constraints_location: - resource: pattern: resource-pattern role: resource-role rule: rule-string id: constraint-id options: - name: score value: score-value - name: resource-discovery value: resource-discovery-value
有关创建具有资源约束的集群的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有资源约束的高可用性集群
.
ha_cluster_constraints_colocation
此变量定义资源 colocation 约束。资源共存限制表示一个资源的位置取决于另一个资源的位置。存在两种类型的 colocation 约束:两个资源的一个简单 colocation 约束,并为多个资源设置 colocation 约束。
您可以为简单资源 colocation 约束配置的项目如下:
resource_follower
(必需)- 应相对于resource_leader
的资源。-
id
(必需)- 资源 ID。 -
role
(可选)- 约束限制的资源角色:Started
,Unpromoted
,Promoted
.
-
resource_leader
(必需)- 集群将决定优先放置此资源的位置,然后决定放置resource_follower
的位置。-
id
(必需)- 资源 ID。 -
role
(可选)- 约束限制的资源角色:Started
,Unpromoted
,Promoted
.
-
-
id
(可选)- 约束 ID。如果未指定,它将自动生成。 options
(可选)- “名称-值”字典列表。score
- 设置约束的权重。-
正
score
值表示资源应该在同一节点上运行。 -
负
score
值表示资源应在不同的节点上运行。 -
score
值为+INFINITY
表示资源必须在同一节点上运行。 -
score
值为-INFINITY
表示资源必须在不同的节点上运行。 -
如果没有指定
score
,分数值默认为INFINITY
。
-
正
默认情况下,没有定义资源 colocation 约束。
简单资源 colocation 约束的结构如下:
ha_cluster_constraints_colocation: - resource_follower: id: resource-id1 role: resource-role1 resource_leader: id: resource-id2 role: resource-role2 id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
您可以为资源集 colocation 约束配置的项目如下:
resource_sets
(必需)- 资源集合列表。-
resource_ids
(必需)- 资源列表。 -
options
(可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
-
-
id
(可选)- Same 值作为简单 colocation 约束。 -
options
(可选)- Same 值作为简单 colocation 约束。
资源集 colocation 约束的结构如下:
ha_cluster_constraints_colocation: - resource_sets: - resource_ids: - resource-id1 - resource-id2 options: - name: option-name value: option-value id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
有关创建具有资源约束的集群的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有资源约束的高可用性集群
.
ha_cluster_constraints_order
此变量定义资源顺序约束。资源顺序限制表示应发生某些资源操作的顺序。有两种资源顺序约束:两个资源的简单顺序约束,以及多个资源的设置顺序约束。
您可以为简单的资源顺序约束配置的项目如下:
resource_first
(必需)-resource_then
资源依赖的资源。-
id
(必需)- 资源 ID。 -
action
(可选)- 在为resource_then
资源启动操作前必须完成的操作。允许的值:start
、stop
、promote
、demote
。
-
resource_then
(必需)- 依赖资源。-
id
(必需)- 资源 ID。 -
action
(可选)- 资源只能在resource_first
资源执行操作后执行的操作。允许的值:start
、stop
、promote
、demote
。
-
-
id
(可选)- 约束 ID。如果未指定,它将自动生成。 -
options
(可选)- “名称-值”字典列表。
默认情况下,没有定义资源顺序限制。
简单资源顺序约束的结构如下:
ha_cluster_constraints_order: - resource_first: id: resource-id1 action: resource-action1 resource_then: id: resource-id2 action: resource-action2 id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
您可以为资源设置顺序约束配置的项目如下:
resource_sets
(必需)- 资源集合列表。-
resource_ids
(必需)- 资源列表。 -
options
(可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
-
-
id
(可选)- 相同值作为简单顺序约束。 -
options
(可选)- 相同值作为简单顺序约束。
资源集顺序约束的结构如下:
ha_cluster_constraints_order: - resource_sets: - resource_ids: - resource-id1 - resource-id2 options: - name: option-name value: option-value id: constraint-id options: - name: score value: score-value - name: option-name value: option-value
有关创建具有资源约束的集群的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有资源约束的高可用性集群
.
ha_cluster_constraints_ticket
此变量定义资源 ticket 约束。资源票据限制表示依赖于特定票据的资源。有两种类型的资源 ticket 约束:一个资源的简单 ticket 约束,多个资源的 ticket 顺序约束。
您可以为简单资源 ticket 约束配置的项目如下:
resource
(必需)- 约束应用到的资源规格。-
id
(必需)- 资源 ID。 -
role
(可选)- 约束限制的资源角色:Started
,Unpromoted
,Promoted
.
-
-
ticket
(必需)- 资源所依赖的票据的名称。 -
id
(可选)- 约束 ID。如果未指定,它将自动生成。 options
(可选)- “名称-值”字典列表。-
loss-policy
(可选)- 在撤销 ticket 时要对资源执行的操作。
-
默认情况下,没有定义资源 ticket 约束。
简单资源票据约束的结构如下:
ha_cluster_constraints_ticket: - resource: id: resource-id role: resource-role ticket: ticket-name id: constraint-id options: - name: loss-policy value: loss-policy-value - name: option-name value: option-value
您可以为资源设置 ticket 约束配置的项目如下:
resource_sets
(必需)- 资源集合列表。-
resource_ids
(必需)- 资源列表。 -
options
(可选)- “名称/值”字典列表精细调整集合中资源如何被约束处理。
-
-
ticket
(必需)- 相同值作为一个简单 ticket 约束。 -
id
(可选)- 相同值作为简单票据约束。 -
选项
(可选)- 相同值作为简单票据约束。
资源集 ticket 约束的结构如下:
ha_cluster_constraints_ticket: - resource_sets: - resource_ids: - resource-id1 - resource-id2 options: - name: option-name value: option-value ticket: ticket-name id: constraint-id options: - name: option-name value: option-value
有关创建具有资源约束的集群的
ha_cluster
系统角色 playbook 示例,请参阅 配置具有资源约束的高可用性集群
.