documentation.suse.com / 安装基本的三节点 High Availability 群集
SUSE Linux Enterprise High Availability 16.0

安装基本的三节点 High Availability 群集

出版日期:2025 年 11 月 03 日
内容

如何设置使用无盘 SBD 和软件看门狗的基本三节点 High Availability 群集。

原因

此群集可用于测试用途,或作为最小群集配置,之后可进行扩展。

工作量

设置基本的 High Availability 群集大约需要 15 分钟,具体取决于网络连接速度。

目标

快速轻松地开始使用 SUSE Linux Enterprise High Availability。

1 使用情形

本指南介绍了具有以下特性的最小 High Availability 群集的设置过程:

  • 三个群集节点,彼此之间具有无口令 SSH 访问权限。此设置需要三个节点,这样无盘 SBD 不借助 QDevice 即可处理节点分裂情况。

  • 一个浮动的虚拟 IP 地址,无论图形管理工具 Hawk 在哪个节点上运行,客户端都可通过该地址连接到 Hawk。

  • 无盘 SBD(STONITH 块设备)和软件看门狗用作节点屏蔽机制,以免发生节点分裂情况。

  • 如果主动主机出现故障,资源会从一个节点故障转移到另一个节点(主动/被动设置)。

这是一个简单的群集设置,外部要求最低。您可以将此群集用于测试用途,或作为基本群集配置,日后可根据需要将其扩展为适用于生产环境的群集。

2 安装概述

要安装第 1 节 “使用情形”中所述的 High Availability 群集,您必须执行以下任务:

  1. 查看第 3 节 “系统要求”,确保您拥有所需的一切资源。

  2. 执行第 4 节 “启用 High Availability 扩展”所述步骤,在群集节点上安装 SUSE Linux Enterprise High Availability。

  3. 执行第 5 节 “设置第一个节点”所述步骤,在第一个节点上初始化群集。

  4. 执行第 6 节 “添加第二个和第三个节点”所述步骤,向群集添加更多节点。

  5. 执行第 7 节 “登录 Hawk”所述步骤,登录 Hawk Web 界面以监控群集。

  6. 按照第 8 节 “测试群集”所述执行基本测试,确保群集按预期正常运行。

  7. 查看第 9 节 “后续步骤”,了解有关扩展群集以适用于生产环境的建议。

3 系统要求

本章介绍了 SUSE Linux Enterprise High Availability 的最小设置的系统要求。

3.1 硬件要求

服务器

三台服务器作为群集节点。

服务器可以是裸机,也可以是虚拟机。两者不要求有相同的硬件(内存、磁盘空间等),但们必须具有相同的体系结构。不支持跨平台群集。

有关服务器硬件的更多详细信息,请参见 https://www.suse.com/download/sle-ha/ 上的 System Requirements 部分。

网络接口卡 (NIC)

每个群集节点至少有两个 NIC。这样您便可使用以下其中一种方法为群集配置两个或更多通信通道:

  • 将多个 NIC 组合成网络绑定(首选)。在本例中,您必须在初始化群集前在每个节点上设置绑定设备。

  • 在 Corosync 中创建第二个通信通道。这可通过群集设置脚本配置。在本例中,两个 NIC 必须位于不同的子网中。

STONITH(节点屏蔽)

为获得支持,所有 SUSE Linux Enterprise High Availability 群集都必须至少有一个节点屏蔽 (STONITH) 设备,以免出现节点分裂情况。此设备可以是物理设备(电源开关),也可以是 SBD(STONITH 块设备)与看门狗的组合。SBD 可以与共享存储设备搭配使用,也可以在无盘模式下使用。

本指南中介绍的最小设置使用软件看门狗和无盘 SBD,因此不需要额外的硬件。在生产环境中使用此群集之前,请将软件看门狗替换为硬件看门狗。

3.2 软件要求

操作系统

所有节点上都必须安装并注册 SUSE Linux Enterprise Server。

High Availability 扩展

SUSE Linux Enterprise High Availability 扩展需要额外的注册代码。

此扩展可以在 SLES 安装期间启用,也可以稍后在运行的系统上启用。本指南介绍了如何在运行的系统上启用和注册该扩展。

3.3 网络需求

时间同步

所有系统都必须与群集外部的一台 NTP 服务器保持时间同步。SUSE Linux Enterprise Server 使用 chrony 实现 NTP 时间同步功能。初始化群集时,如果 chrony 未处于运行状态,您会收到警告。

即使节点已保持时间同步,但如果节点配置了不同的时区,日志文件和群集报告仍然可能难以分析。

主机名和 IP 地址

所有群集节点都必须能够通过名称找到彼此。使用以下方法可进行可靠的名称解析:

  • 使用静态 IP 地址。

  • /etc/hosts 文件中列出所有节点及其 IP 地址、FQDN 和简短主机名。

系统仅支持每个 NIC 上的主 IP 地址。

SSH

所有群集节点都必须能通过 SSH 相互访问。要执行某些群集操作,还需要进行无口令 SSH 身份验证。初始化群集时,设置脚本会检查是否存在 SSH 密钥,如果不存在,则会生成这些密钥。

重要
重要:SUSE Linux Enterprise 16 中的 root SSH 访问

在 SUSE Linux Enterprise 16 中,默认禁止使用口令进行 root SSH 登录。

在初始化群集之前,需要在每个节点上创建具有 sudo 权限的用户,或者为 root 用户设置无口令 SSH 身份验证。

如果使用 sudo 用户初始化群集,某些 crmsh 命令也需要无口令 sudo 权限。

4 启用 High Availability 扩展

此过程说明如何在现有的 SUSE Linux Enterprise Server 上安装 SUSE Linux Enterprise High Availability。如果您在使用 Agama 安装 SLES 的过程中已经安装了 High Availability 扩展和软件包,则可以跳过此过程。

要求
  • 已安装 SUSE Linux Enterprise Server 并在 SUSE Customer Center 中注册。

  • 有一个额外的注册代码用于 SUSE Linux Enterprise High Availability。

在所有打算用作群集节点的计算机上执行以下过程:

  1. root 用户或具有 sudo 权限的用户身份登录。

  2. 检查是否已启用 High Availability 扩展:

    > sudo SUSEConnect --list-extensions
  3. 检查是否已安装 High Availability 软件包:

    > zypper search ha_sles
  4. 启用 SUSE Linux Enterprise High Availability 扩展:

    > sudo SUSEConnect -p sle-ha/16.0/x86_64 -r HA_REGCODE
  5. 安装 High Availability 软件包:

    > sudo zypper install -t pattern ha_sles

5 设置第一个节点

SUSE Linux Enterprise High Availability 包含可简化群集安装过程的设置脚本。要在第一个节点上设置群集,请使用 crm cluster init 脚本。

5.1 crm cluster init 脚本概述

crm cluster init 命令会启动一个脚本,该脚本用于定义群集通信所需的基本参数,最终生成一个可运行的单节点群集。

该脚本会检查并配置以下组件:

NTP

检查 chrony 是否配置为在系统引导时启动。如果未配置成这样,系统会显示一条消息。

SSH

检测或生成 SSH 密钥,以用于在群集节点之间进行无口令登录。

防火墙

在防火墙中开放群集通信所需的端口。

Csync2

配置 Csync2,让其在群集中的所有节点上复制配置文件。

Corosync

配置群集通信系统。

SBD/看门狗

检查是否存在看门狗,并询问是否要将 SBD 配置为节点屏蔽机制。

Hawk 群集管理

启用 Hawk 服务并显示 Hawk Web 界面的 URL。

虚拟浮动 IP

询问是否为 Hawk Web 界面配置虚拟 IP 地址。

QDevice/QNetd

询问是否配置 QDevice 和 QNetd 以参与仲裁决策。建议为节点数为偶数的群集(特别是双节点群集)配置。

注意
注意:Pacemaker 默认设置

crm cluster init 脚本设置的选项可能与 Pacemaker 默认设置不同。您可以在 /var/log/crmsh/crmsh.log 中查看脚本更改了哪些设置。引导期间设置的任何选项都可在以后使用 crmsh 进行修改。

注意
注意:不同平台的群集配置

crm cluster init 脚本会检测系统环境(例如 Microsoft Azure),并根据该环境的配置文件调整特定的群集设置。有关详细信息,请参见 /etc/crm/profiles.yml 文件。

5.2 在第一个节点上初始化群集

使用 crm cluster init 脚本在第一个节点上配置群集。该脚本会提示您输入有关群集的基本信息,并配置所需的设置和服务。有关详细信息,请运行 crm cluster init --help 命令。

要求
  • SUSE Linux Enterprise High Availability 已安装且为最新版本。

  • 所有节点至少有两个网络接口或一个网络绑定,静态 IP 地址与每个节点的 FQDN 和简短主机名一起列在 /etc/hosts 文件中。

仅在一个节点上执行以下过程:

  1. root 用户或具有 sudo 权限的用户身份登录第一个节点。

  2. 启动 crm cluster init 脚本:

    > sudo crm cluster init

    该脚本会检查 chrony 是否在运行、开放所需的防火墙端口、配置 Csync2,并检查 SSH 密钥。如果没有可用的 SSH 密钥,脚本会生成这些密钥。

  3. 配置 Corosync 进行群集通信:

    1. 为第一个通信通道 (ring0) 输入 IP 地址。默认情况下,脚本会建议第一个可用网络接口的地址。这可以是单个接口,也可以是绑定设备。接受此地址或输入其他地址。

    2. 如果脚本检测到多个网络接口,会询问您是否要配置第二个通信通道 (ring1)。如果您使用绑定设备配置了第一个通道,可以输入 n 拒绝。如果需要配置第二个通道,请输入 y 确认并输入另一个网络接口的 IP 地址。这两个接口必须位于不同的子网中。

    脚本会配置 Corosync 通信的默认防火墙端口。

  4. 选择是否要将 SBD 设置为节点屏蔽机制:

    1. 输入 y 确认您要使用 SBD。

    2. 当系统提示您提供块设备的路径时,输入 none 以配置无盘 SBD。

    脚本即会配置 SBD,包括相关的超时设置。与基于磁盘的 SBD 不同,无盘 SBD 不需要 STONITH 群集资源。

    如果没有可用的硬件看门狗,脚本会配置软件看门狗 softdog

  5. 配置虚拟 IP 地址,以便使用 Hawk Web 界面进行群集管理:

    1. 输入 y 确认您要配置虚拟 IP 地址。

    2. 输入未使用的 IP 地址作为 Hawk 的管理 IP。

    您可以连接到虚拟 IP 地址,而无需登录到单个群集节点上的 Hawk。

  6. 选择是否配置 QDevice 和 QNetd:

    对于本文中所述的最小设置,输入 n 拒绝。

脚本会启动群集服务,以使群集上线并启用 Hawk。要用于 Hawk 的 URL 将显示在屏幕上。您也可以使用 crm status 命令检查群集的状态。

重要
重要:hacluster 的安全口令

crm cluster init 脚本会创建默认的群集用户和口令。请尽快将默认口令替换为安全口令:

> sudo passwd hacluster

6 添加第二个和第三个节点

使用 crm cluster join 脚本向群集添加更多节点。脚本只需要能够访问一个现有群集节点即可在当前计算机上自动完成基本设置。有关详细信息,请运行 crm cluster join --help 命令。

要求
  • SUSE Linux Enterprise High Availability 已安装且为最新版本。

  • 现有群集已在至少一个节点上运行。

  • 所有节点至少有两个网络接口或一个网络绑定,静态 IP 地址与每个节点的 FQDN 和简短主机名一起列在 /etc/hosts 文件中。

  • 如果以 sudo 用户身份登录:所有节点上都必须存在相同的用户。此用户必须具有无口令 sudo 权限。

  • 如果以 root 用户身份登录:所有节点上都必须配置无口令 SSH 身份验证。

在每个额外的节点上执行以下过程:

  1. 使用用于设置第一个节点的用户登录此节点。

  2. 启动 crm cluster join 脚本:

    • 如果您将第一个节点设置为 root,则可不带其他参数启动该脚本:

      # crm cluster join
    • 如果您以 sudo 用户身份设置了第一个节点,则必须使用以下 -c 选项指定该用户:

      > sudo crm cluster join -c USER@NODE1

    该脚本会检查 chrony 是否在运行、开放所需的防火墙端口并配置 Csync2。

  3. 如果尚未使用 -c 指定第一个节点,系统会提示您输入其 IP 地址或主机名。

  4. 如果尚未在节点之间配置无口令 SSH 身份验证,系统会提示您输入每个现有节点的口令

  5. 配置 Corosync 进行群集通信:

    1. 脚本会为 ring0 建议一个 IP 地址。此 IP 地址必须与第一个节点上用于 ring0 的 IP 地址位于同一子网中。如果并非如此,则请输入正确的 IP 地址。

    2. 如果群集配置了两个 Corosync 通信通道,脚本会提示您输入 ring1 的 IP 地址。此 IP 地址必须与第一个节点上用于 ring1 的 IP 地址位于同一子网中。

脚本会从第一个节点复制群集配置,调整超时设置以将新节点纳入考量,并使新节点上线。

您可以使用 crm status 命令检查群集的状态。

重要
重要:hacluster 的安全口令

crm cluster join 脚本会创建默认的群集用户和口令。请尽快在每个节点上将默认口令替换为安全口令:

> sudo passwd hacluster

7 登录 Hawk

借助 Hawk,您可以使用图形 Web 浏览器监控和管理 High Availability 群集。您还可以配置一个虚拟 IP 地址,无论 Hawk 在哪个节点上运行,客户端都可通过该地址连接到 Hawk。

要求
  • 客户端计算机必须能够连接到群集节点。

  • 客户端计算机必须具有启用了 JavaScript 和 Cookie 的图形 Web 浏览器。

您可以在任何能够连接到群集节点的计算机上执行以下过程:

  1. 启动 Web 浏览器并输入以下 URL:

    https://HAWKSERVER:7630/

    HAWKSERVER 替换为群集节点的 IP 地址或主机名,如果配置了 Hawk 虚拟 IP 地址,则替换为该地址。

    注意
    注意:证书警告

    如果首次访问 URL 时出现证书警告,则说明您使用的是自我签名证书。要校验证书,请联系群集操作员获取证书细节。要继续,可在浏览器中添加例外,以绕过警告。

  2. 在 Hawk 登录屏幕上,输入 hacluster 用户的用户名口令

  3. 单击登录。Hawk Web 界面默认会显示状态屏幕。

“状态”屏幕显示了一个已配置的资源,即虚拟 IP 地址 admin-ip,该资源在名为 alice 的节点上运行。
图 1︰ Hawk 的“状态”屏幕

8 测试群集

以下测试可以帮助您发现群集设置的基本问题。不过,现实中的测试涉及特定的使用情形和场景。将该群集用于生产环境之前,请根据自己的使用场景进行全面测试。

8.1 测试资源故障转移

检查如果当前节点设置为 standby,群集是否会将资源迁移至另一个节点。此过程使用名为 alicebob 的示例节点,以及名为 admin-ip 的虚拟 IP 资源,其示例 IP 地址为 192.168.1.10

  1. 打开两个终端。

  2. 在第一个终端中,ping 该虚拟 IP 地址:

    > ping 192.168.1.10
  3. 在第二个终端中,登录到其中一个群集节点。

  4. 检查虚拟 IP 地址在哪个节点上运行:

    > sudo crm status
    [..]
    Node List:
      * Online: [ alice bob ]
    
    Full List of Resources:
      * admin-ip  (ocf:heartbeat:IPaddr2):    Started alice
  5. alice 置于待机模式:

    > sudo crm node standby alice
  6. 再次检查群集状态。资源 admin-ip 应该已迁移到 bob

    > sudo crm status
    [...]
    Node List:
      * Node alice: standby
      * Online: [ bob ]
    
    Full List of Resources:
      * admin-ip  (ocf:heartbeat:IPaddr2):    Started bob
  7. 在第一个终端中,您应该可以看到,迁移期间虚拟 IP 地址的 ping 流未中断。这表明群集设置和浮动 IP 地址工作正常。

  8. CtrlC 取消 ping 命令。

  9. 在第二个终端中,使 alice 重新上线:

    > sudo crm node online alice

8.2 测试群集故障

crm cluster crash_test 命令可模拟群集故障并报告结果。

该命令支持以下检查:

--split-brain-iptables

通过阻塞 Corosync 端口模拟节点分裂场景,并检查是否可以按预期屏蔽一个节点。运行此测试之前,必须安装 iptables

--kill-sbd/--kill-corosync/ --kill-pacemakerd

终止 SBD、Corosync 或 Pacemaker 的守护程序。运行其中一项测试后,便可以在 /var/lib/crmsh/crash_test/ 目录下找到一份报告。该报告中包含测试用例说明、操作日志记录以及对可能产生的结果的说明。

--fence-node NODE

屏蔽从命令行传递的特定节点。

有关详细信息,请运行 crm cluster crash_test --help 命令。

以下示例将使用名为 alicebob 的节点,并会测试能否屏蔽 bob。要在测试期间观察 bob 的状态变化,您可以登录 Hawk 并导航到状态 › 节点

例 1︰ 测试群集:节点屏蔽
> sudo crm status
[...]
Node List:
  * Online: [ alice bob ]

Active Resources:
  * admin-ip     (ocf:heartbeat:IPaddr2):    Started alice

> sudo crm cluster crash_test --fence-node bob

==============================================
Testcase:          Fence node bob
Fence action:      reboot
Fence timeout:     95

!!! WARNING WARNING WARNING !!!
THIS CASE MAY LEAD TO NODE BE FENCED.
TYPE Yes TO CONTINUE, OTHER INPUTS WILL CANCEL THIS CASE [Yes/No](No): Yes
INFO: Trying to fence node "bob"
INFO: Waiting 71s for node "bob" reboot...
INFO: Node "bob" will be fenced by "alice"!
INFO: Node "bob" was successfully fenced by "alice"

9 后续步骤

本指南介绍了一个可用于测试用途的基本 High Availability 群集。要扩展此群集以用于生产环境,建议另外执行以下步骤:

添加更多节点

使用 crm cluster join 脚本向群集添加更多节点。

启用硬件看门狗

在生产环境中使用此群集之前,请将 softdog 替换为硬件看门狗。

添加更多 STONITH 设备

对于关键工作负载,我们强烈建议配置两台或三台 STONITH 设备,可选用物理 STONITH 设备或基于磁盘的 SBD。

配置 QDevice

QDevice 和 QNetd 会参与仲裁决策。在仲裁方 QNetd 的协助下,QDevice 可提供可配置数量的投票。这能让群集承受超过标准仲裁规则允许数量的节点故障。我们建议在节点数为偶数的群集中部署 QDevice 和 QNetd,在双节点群集中尤其推荐此配置。