13.12. 使用 ha_cluster 变量配置具有 SBD 节点隔离的高可用性集群
您必须配置具有至少一个隔离设备的红帽高可用性集群,以确保当集群中的节点遇到问题时,集群提供的服务仍然可用。如果您的环境不允许远程访问电源开关来隔离集群节点,您可以使用 STONITH 块设备(SBD)配置隔离。此设备通过利用共享块存储交换消息,来为基于 Pacemaker 的集群提供节点隔离机制。SBD 与 Pacemaker 集成,一个 watchdog 设备,以及可选的共享存储,来在需要隔离时安排节点可靠地自行终止。
您可以使用 ha_cluster
RHEL 系统角色,以自动的方式配置 SBD 隔离。使用 ha_cluster
时,您可以使用以下两个变量之一逐个节点地配置 watchdog 和 SBD 设备:
-
ha_cluster_node_options
: (RHEL 9.5 及更高版本)这是您在 playbook 文件中定义的一个变量。它是字典的列表,其中每个字典为一个节点定义选项。 -
ha_cluster
: (RHEL 9.1 及更高版本)一个只为一个节点定义选项的字典。您可以在清单文件中配置ha_cluster
变量。要为每个节点设置不同的值,您可以分别为每个节点定义变量。
如果 ha_cluster_node_options
和 ha_cluster
变量都包含 SBD 选项,则 ha_cluster_node_options
中的选项具有优先权。
如果 ha_cluster_node_options
和 ha_cluster
变量都包含 SBD 选项,则 ha_cluster_node_options
中的选项具有优先权。
以下示例流程使用 ha_cluster
系统角色创建具有 SBD 隔离的高可用性集群。这个示例流程使用清单文件中的 ha_cluster
变量来基于每个节点配置节点地址和 SBD 选项。有关在 playbook 文件中使用 ha_cluster_node_options
变量的示例流程,请参阅 使用 ha_cluster_nodes_options 变量配置具有 SBD 节点隔离的高可用性集群。
ha_cluster
系统角色替换指定节点上任何现有的群集配置。playbook 中未指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
流程
为集群创建一个清单文件,该集群使用
ha_cluster
变量为每个节点配置 watchdog 和 SBD 设备,如下例中所示:all: hosts: node1: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000001 - /dev/disk/by-id/000003 node2: ha_cluster: sbd_watchdog_modules: - iTCO_wdt sbd_watchdog_modules_blocklist: - ipmi_watchdog sbd_watchdog: /dev/watchdog1 sbd_devices: - /dev/disk/by-id/000001 - /dev/disk/by-id/000002 - /dev/disk/by-id/000003
示例清单中指定的 SBD 和 watchdog 设置包括:
sbd_watchdog_modules
-
要载入的 watchdog 内核模块,其创建
/dev/watchdog*
设备。 sbd_watchdog_modules_blocklist
- 要卸载和阻止的 watchdog 内核模块。
sbd_watchdog
- SBD 使用的 watchdog 设备。
sbd_devices
-
用于交换 SBD 消息和监控的设备。总是使用长而稳定的设备名称(
/dev/disk/by-id/
)引用设备。
有关创建清单文件的常规信息,请参阅 在 RHEL 9 上准备一个控制节点。
将您的敏感变量存储在一个加密文件中:
创建 vault :
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
在
ansible-vault create
命令打开编辑器后,以<key>: <value>
格式输入敏感数据:cluster_password: <cluster_password>
- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个 playbook 文件,例如
~/playbook.yml
,如下例所示。因为您已在清单中指定了 SBD 和 watchog 变量,因此您不需要在 playbook 中包含它们。--- - name: Create a high availability cluster hosts: node1 node2 vars_files: - vault.yml tasks: - name: Configure a cluster with sbd fencing devices configured in an inventory file ansible.builtin.include_role: name: rhel-system-roles.ha_cluster vars: ha_cluster_cluster_name: my-new-cluster ha_cluster_hacluster_password: "{{ cluster_password }}" ha_cluster_manage_firewall: true ha_cluster_manage_selinux: true ha_cluster_sbd_enabled: true ha_cluster_sbd_options: - name: delay-start value: 'no' - name: startmode value: always - name: timeout-action value: 'flush,reboot' - name: watchdog-timeout value: 30 # Best practice for setting SBD timeouts: # watchdog-timeout * 2 = msgwait-timeout (set automatically) # msgwait-timeout * 1.2 = stonith-timeout ha_cluster_cluster_properties: - attrs: - name: stonith-timeout value: 72 ha_cluster_resource_primitives: - id: fence_sbd agent: 'stonith:fence_sbd' instance_attrs: - attrs: # taken from host_vars # this only works if all nodes have the same sbd_devices - name: devices value: "{{ ha_cluster.sbd_devices | join(',') }}" - name: pcmk_delay_base value: 30
示例 playbook 中指定的设置包括以下内容:
ha_cluster_cluster_name: cluster_name
- 您要创建的集群的名称。
ha_cluster_hacluster_password: password
-
hacluster
用户的密码。hacluster
用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true
-
确定
ha_cluster
RHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true
-
确定
ha_cluster
RHEL 系统角色是否使用selinux
RHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_sbd_enabled: true
- 确定集群是否可以使用 SBD 节点隔离机制的变量。
ha_cluster_sbd_options: sbd options
-
指定 SBD 选项的名称-值字典的列表。有关这些选项的详情,请参考您系统上
sbd
(8)手册页的通过环境配置
部分。 ha_cluster_cluster_properties: cluster properties
- Pacemaker 集群范围配置的集群属性集合的列表。
ha_cluster_resource_primitives: cluster resources
-
为
ha_cluster
RHEL 系统角色配置的 Pacemaker 资源的资源定义的列表,包括隔离资源。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook --ask-vault-pass ~/playbook.yml
其他资源
- 红帽知识库文章 探索 RHEL 高可用性的组件 - sbd 和 fence_sbd
- 红帽知识库文章 RHEL 高可用性集群的设计指南 - sbd 注意事项
- 红帽知识库文章 RHEL 高可用性集群的支持策略 - sbd 和 fence_sbd
-
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md
文件 -
/usr/share/doc/rhel-system-roles/ha_cluster/
目录 - Ansible vault