13.11. 使用 ha_cluster_node_options 变量配置具有 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_optionsha_cluster 变量都包含 SBD 选项,则 ha_cluster_node_options 中的选项具有优先权。

这个示例流程使用 playbook 文件中的 ha_cluster_node_options 变量来基于每个节点配置节点地址和 SBD 选项。有关在清单文件中使用 ha_cluster 变量的示例流程,请参阅 使用 ha_cluster 变量配置具有 SBD 节点隔离的高可用性集群

警告

ha_cluster RHEL 系统角色替换指定节点上任何现有的集群配置。playbook 中未指定的任何设置都将丢失。

先决条件

流程

  1. 将您的敏感变量存储在一个加密文件中:

    1. 创建 vault :

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create 命令打开编辑器后,以 <key>: <value> 格式输入敏感数据:

      cluster_password: <cluster_password>
    3. 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
  2. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Create a high availability cluster
      hosts: node1 node2
      vars_files:
        - vault.yml
      tasks:
        - name: Configure a cluster with SBD fencing
          ansible.builtin.include_role:
            name: rhel-system-roles.ha_cluster
          vars:
            my_sbd_devices:
              # This variable is indirectly used by various variables of the ha_cluster RHEL system role.
              # Its purpose is to define SBD devices once so they do not need
              # to be repeated several times in the role variables.
              - /dev/disk/by-id/000001
              - /dev/disk/by-id/000002
              - /dev/disk/by-id/000003
            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
            ha_cluster_node_options:
              - node_name: node1
                sbd_watchdog_modules:
                  - iTCO_wdt
                sbd_watchdog_modules_blocklist:
                  - ipmi_watchdog
                sbd_watchdog: /dev/watchdog1
                sbd_devices: "{{ my_sbd_devices }}"
              - node_name: node2
                sbd_watchdog_modules:
                  - iTCO_wdt
                sbd_watchdog_modules_blocklist:
                  - ipmi_watchdog
                sbd_watchdog: /dev/watchdog1
                sbd_devices: "{{ my_sbd_devices }}"
            # 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:
                      - name: devices
                        value: "{{ my_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_node_options: <node options>

    定义因集群节点而异的设置的变量。您可以配置以下 SBD 和 watchdog 项目:

    • sbd_watchdog_modules - 要载入的模块,其创建 /dev/watchdog* 设备。
    • sbd_watchdog_modules_blocklist - 要卸载和阻止的 Watchdog 内核模块。
    • sbd_watchdog - SBD 使用的 Watchdog 设备。
    • sbd_devices - 用于交换 SBD 信息和监控的设备。总是使用长而稳定的设备名称(/dev/disk/by-id/)引用设备。
    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 文件。

  3. 验证 playbook 语法:

    $ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  4. 运行 playbook:

    $ ansible-playbook --ask-vault-pass ~/playbook.yml

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.