跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文档 / 管理指南 / 配置和管理 / QDevice 和 QNetd
适用范围 SUSE Linux Enterprise High Availability Extension 15 SP4

12 QDevice 和 QNetd

QDevice 和 QNetd 会参与仲裁决定。在仲裁方 corosync-qnetd 的协助下,corosync-qdevice 会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。我们强烈建议为双节点群集部署 corosync-qnetdcorosync-qdevice,但对于所含节点数为偶数的群集,一般也建议使用 QNetd 和 QDevice。

12.1 概念概述

与计算各群集节点的定额相比,搭配使用 QDevice 和 QNetd 的方法具有以下优点:

  • 发生节点故障时,会提供更好的可持续性。

  • 您可以编写自己的启发脚本来影响投票。这非常适合用于复杂设置(例如 SAP 应用程序)。

  • 可让您配置 QNetd 服务器来为多个群集提供投票。

  • 允许为双节点群集使用无磁盘 SBD。

  • 可帮助节点数为偶数且处于节点分裂状况下的群集(特别是双节点群集)做出仲裁决定。

使用 QDevice/QNetd 的设置由以下组件和机制构成:

QDevice/QNetd 组件和机制
QNetd (corosync-qnetd)

一个不属于群集的 systemd 服务(一个守护程序,即 QNetd 服务器)。向 corosync-qdevice 守护程序提供投票的 systemd 守护程序。

要提高安全性,可以将 corosync-qnetd 与 TLS 搭配使用以进行客户端证书检查。

QDevice (corosync-qdevice)

每个群集节点上与 Corosync 一起运行的 systemd 服务(守护程序)。这是 corosync-qnetd 的客户端。其主要用途是让群集能够承受大于标准仲裁规则所允许的节点故障数量。

QDevice 可以与不同的仲裁方配合工作,但目前仅支持与 QNetd 配合工作。

算法

QDevice 支持多种不同的算法,而这些算法决定着如何分配投票的行为。目前提供的算法如下:

  • FFSplit (fifty-fifty split) 为默认算法,用于所含节点数为偶数的群集。如果群集分裂为两个相似的部分,此算法会根据启发检查结果和其他因素为其中一个部分提供一个投票。

  • LMS (last man standing) 允许仅剩的那个节点看到 QNetd 服务器以获取投票。因此此算法适用于只有一个活动节点应保留法定票数的群集。

启发

QDevice 支持一组命令(启发)。这些命令在群集服务启动、群集成员资格发生变化、成功连接到 corosync-qnetd 时或(可选)定期在本地执行。可以使用 quorum.device.heuristics 键(在 corosync.conf 文件中)或 --qdevice-heuristics-mode 选项来设置启发。这两种方式都可理解 off(默认值)、syncon 值。syncon 之间的区别在于,您可以另外定期执行以上命令。

仅当所有命令都成功执行时,才会视为已通过启发,否则视为启发失败。启发的结果会发送到 corosync-qnetd,用于进行计算以确定哪个部分应具有法定票数。

决胜方

此项用作群集的几个部分完全均衡且启发结果相同的情况下的后备措施。它可配置为最小、最大或特定的节点 ID。

12.2 要求和先决条件

设置 QDevice 和 QNetd 之前,您需要按如下所示准备环境:

  • 除了群集节点外,您需准备一个单独的计算机,将其作为 QNetd 服务器。请参见第 12.3 节 “设置 QNetd 服务器”

  • 与 Corosync 所使用的物理网络不同的物理网络。建议 QDevice 使用该网络来连接 QNetd 服务器。理想情况下,QNetd 服务器应位于与主群集不同的机架中,或者至少位于一个单独的 PSU 上,且不要位于与 Corosync 环相同的网段中。

12.3 设置 QNetd 服务器

QNetd 服务器不是群集堆栈的一部分,也不是群集的实际成员。因此,您无法将资源转移到此服务器。

QNetd 服务器几乎无状态。一般情况下,您无需更改配置文件 /etc/sysconfig/corosync-qnetd 中的任何内容。默认情况下,corosync-qnetd 服务以 coroqnetd 组中的 coroqnetd 用户身份运行守护程序。这可避免以 root 身份运行守护程序。

要创建 QNetd 服务器,请执行以下步骤:

  1. 在将作为 QNetd 服务器的计算机上,安装 SUSE Linux Enterprise Server 15 SP4

  2. 登录 QNetd 服务器并安装以下软件包:

    root # zypper install corosync-qnetd

    您不需要手动启动 corosync-qnetd 服务。引导脚本会负责 qdevice 阶段中的启动流程。

QNetd 服务器现已准备好接受来自 QDevice 客户端 corosync-qdevice 的连接。无需进行其他配置。

12.4 将 QDevice 客户端连接到 QNetd 服务器

设置好 QNetd 服务器后,您便可以设置并运行客户端。您可以在安装群集期间将客户端连接到 QNetd 服务器,也可以稍后再添加。在下面的过程中,我们将使用后一种方法。我们假设群集包含两个节点(alice 和 bob)和 QNetd 服务器 (charlie)。

  1. 在所有节点上,请确保您已安装软件包 corosync-qdevice

    root # zypper install corosync-qdevice
  2. 在 alice 上初始化群集:

    root # crm cluster init -y
  3. 在 bob 上加入群集:

    root # crm cluster join -c alice -y
  4. 在 alice 和 bob 上,引导 qdevice 阶段。在大多数情况下,默认设置都可正常工作。至少提供 --qnetd-hostname 和 QNetd 服务器(在本例中为 charlie)的主机名或 IP 地址:

    root # crm cluster init qdevice --qnetd-hostname=charlie

    如果您要更改默认设置,请使用 crm cluster init qdevice --help 命令获取所有可能的选项列表。与 QDevice 相关的所有选项都以 --qdevice-NAME 开头。

如果您使用的是默认设置,上面的命令会创建启用了 TLS 并使用 FFSplit 算法的 QDevice。

12.5 使用启发设置 QDevice

如果您需要对确定投票的方式进行额外的控制,请使用启发。启发是一组可并行执行的命令。

为了此目的,crm cluster init qdevice 命令提供了 --qdevice-heuristics 选项。您可以使用绝对路径传递一个或多个命令(以分号分隔)。

例如,如果您自己的启发检查命令位于 /usr/sbin/my-script.sh,则可以在其中一个群集节点上按如下方式运行该命令:

root # crm cluster init qdevice --qdevice-hostname=charlie \
     --qdevice-heuristics=/usr/sbin/my-script.sh  \
     --qdevice-heuristics-mode=on

命令可以任何语言编写,例如 Shell、Python 或 Ruby 语言。如果命令成功执行,将返回 0(零),否则会返回错误代码。

您也可以传递一组命令。仅当所有命令都成功完成(返回代码为 0)后,启发才会通过。

--qdevice-heuristics-mode=on 选项可让启发命令定期运行。

12.6 检查和显示仲裁状态

您可以查询某个群集节点上的仲裁状态,如例 12.1 “QDevice 的状态”中所示。该示例显示了 QDevice 节点的状态。

例 12.1︰ QDevice 的状态
root # corosync-quorumtool 1
 Quorum information
------------------
Date:             ...
Quorum provider:  corosync_votequorum
Nodes:            2 2
Node ID:          3232235777 3
Ring ID:          3232235777/8
Quorate:          Yes 4

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate Qdevice

Membership information
----------------------
    Nodeid      Votes    Qdevice Name
 3232235777         1    A,V,NMW 192.168.1.1 (local) 5
 3232235778         1    A,V,NMW 192.168.1.2 5
         0          1            Qdevice

1

或者,您也可以使用 crm corosync status quorum 命令获得相同的结果。

2

我们预计的节点数量。在此示例中,这是一个双节点群集。

3

由于 corosync.conf 中未显式指定节点 ID,此 ID 会以 32 位整数来表示 IP 地址。在此示例中,值 3232235777 表示 IP 地址 192.168.1.1

4

仲裁状态。在此例中,群集具有仲裁。

5

每个群集节点的状态的含意如下:

A(活动)或 NA(非活动)

显示 QDevice 与 Corosync 之间的连接状态。如果 QDevice 与 Corosync 之间存在检测信号,则会显示为活动 (A)。

V(投票)或 NV(无投票)

显示仲裁设备是否已为节点投票(字母 V)。字母 V 表示两个节点可以相互通讯。在节点分裂情况下,一个节点会设置为 V,另一个节点会设置为 NV

MW(主体获胜)或 NMW(不是主体获胜)

指明是否设置了仲裁设备 master_wins 标志。默认不会设置该标志,因此您会看到 NMW(不是主体获胜)。请参见 votequorum_qdevice_master_wins(3) 的手册页获取详细信息。

NR(未注册)

表示群集未在使用仲裁设备。

如果您查询 QNetd 服务器的状态,会获得类似例 12.2 “QNetd 服务器的状态”中所示的输出:

例 12.2︰ QNetd 服务器的状态
root # corosync-qnetd-tool -lv 1
Cluster "hacluster": 2
    Algorithm:          Fifty-Fifty split 3
    Tie-breaker:        Node with lowest node ID
    Node ID 3232235777: 4
        Client address:         ::ffff:192.168.1.1:54732
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   ACK (ACK)
    Node ID 3232235778:
        Client address:         ::ffff:192.168.1.2:43016
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   No change (ACK)

1

您也可以在群集的其中一个节点上使用 crm corosync status qnetd 命令,这种方法会获得相同的结果。

2

您的群集名称,在配置文件 /etc/corosync/corosync.conf 中的 totem.cluster_name 部分设置。

3

当前使用的算法。此示例中为 FFSplit

4

这是 IP 地址为 192.168.1.1 的节点的相应条目。TLS 处于活动状态。

12.7 更多信息

有关 QDevice 和 QNetd 的其他信息,请参见 corosync-qdevice(8) 和 corosync-qnetd(8) 的手册页。