第 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 删除了 node1node2 上的所有集群配置

- 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-allfence-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-virtfence-xvm 预共享密钥文件的路径,它是 fence-virtfence-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_srcha_cluster_pacemaker_key_srcha_cluster_fence_virt_key_srcha_cluster_pcsd_public_key_srcha_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, 或 udpuudpudpu 传输类型只支持一个链接。对于 udpudpu,始终禁用加密。若未指定,则默认为 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_breakerlast_man_standinglast_man_standing_windowwait_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 配置包含 node1node2 的集群,并设置 stonith-enabledno-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:Dummystonith: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 (可选)- 表示要创建的资源克隆是否是可升级的克隆,表示为 yesno
  • 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 资源启动操作前必须完成的操作。允许的值: startstoppromotedemote
  • resource_then (必需)- 依赖资源。

    • id (必需)- 资源 ID。
    • action (可选)- 资源只能在 resource_first 资源执行操作后执行的操作。允许的值: startstoppromotedemote
  • 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 示例,请参阅 配置具有资源约束的高可用性集群

.