7 使用 YaST 群集模块 #
使用 YaST 群集模块,您可以手动从头设置群集,或修改现有群集的选项。
7.1 术语定义 #
下面定义了 YaST 群集模块和本章中使用的多个关键术语。
- 绑定网络地址 (
bindnetaddr
) Corosync 管理器应绑定的网络地址。为方便在群集间共享配置文件,Corosync 使用网络接口网络掩码来仅屏蔽用于路由网络的地址位。例如,如果本地接口是
192.168.5.92
并且网络掩码是255.255.255.0
,则bindnetaddr
将设置为192.168.5.0
。例如,如果本地接口是192.168.5.92
并且网络掩码是255.255.255.192
,则bindnetaddr
将设置为192.168.5.64
。如果在
/etc/corosync/corosync.conf
中明确配置了包含ringX_addr
的nodelist
,则不一定需要bindnetaddr
。注意:适用于所有节点的网络地址由于所有节点上都会使用相同的 Corosync 配置,请务必使用
bindnetaddr
之类的网络地址,不要使用特定网络接口地址。conntrack
工具可与内核中连接跟踪系统交互,以便对 iptables 启用有状态数据包检测。SUSE Linux Enterprise High Availability 使用它们在群集节点间同步连接状态。有关详细信息,请参见 https://conntrack-tools.netfilter.org/。
- Csync2
可用于在群集中的所有节点间(甚至在 Geo 群集间)复制配置文件的同步工具。Csync2 可处理排入同步组的任意数量的主机。每个同步组都有自己的成员主机列表及其包含/排除模式,包含/排除模式定义了在同步组中应同步哪些文件。同步组、属于每个组的主机名以及每个组的包含/排除规则均在 Csync2 配置文件
/etc/csync2/csync2.cfg
中指定。对于身份验证,Csync2 使用 IP 地址和同步组中的预共享密钥。需要为每个同步组生成一个密钥文件,并将其复制到所有组成员。
有关 Csync2 的详细信息,请参见 https://oss.linbit.com/csync2/paper.pdf。
- 现有群集
“现有群集”一词指的是至少包含一个节点的任何群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。
- 启发
QDevice 支持一组命令(即“启发”)。这些命令在发生以下情况时在本地执行:当群集服务启动、群集成员资格发生变化、成功连接到 QNetd 服务器时,或(可选)定期执行。
仅当所有命令都成功执行时,才会视为已通过启发,否则视为启发失败。启发的结果会发送到 QNetd 服务器,用于计算哪个部分应具有法定票数。
- 多播
一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多播和单播。
注意:交换机和多播要使用多播进行群集通讯,请确保交换机支持多播。
- 多播地址 (
mcastaddr
) Corosync 管理器使用 IP 地址进行多播。IP 地址可以为 IPv4 或 IPv6。如果使用 IPv6 网络,则必须指定节点 ID。可以使用专用网内的任何多播地址。
- 多播端口 (
mcastport
) 用于群集通讯的端口。Corosync 使用两个端口:用于接收多播的指定
mcastport
和用于发送多播的mcastport -1
。- QDevice
每个群集节点上与 Corosync 一起运行的 systemd 服务(守护程序)。这是 QNetd 服务器的客户端。其主要用途是让群集能够承受大于标准仲裁规则所允许的节点故障数量。
QDevice 可以与不同的仲裁方配合工作,但目前仅支持与 QNetd 配合工作。
- QNetd
它是一项 systemd 服务(即 “QNetd 服务器”守护程序),并非群集的一部分。该 systemd 服务用于向 QDevice 守护程序提供投票。
要提高安全性,可以将 QNetd 与 TLS 搭配使用来检查客户端证书。
- Redundant Ring Protocol (RRP)
该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。所有参与节点上都强制实施逻辑令牌传递环以确保可靠且有序地传递消息。只有拥有令牌的节点才允许广播消息。
在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。RRP 有三种模式 (
rrp_mode
):如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。如果设置为
none
,将会禁用 RRP。
- 单播
一种将消息发送到单个网络目标的技术。Corosync 支持多播和单播。在 Corosync 中,单播作为 UDP 单播 (UDPU) 实施。
7.2 启动 YaST 模块 #
启动 YaST 并选择
› ,或者在命令行中启动该模块:#
yast2 cluster
如果是首次启动群集模块,它会显示为向导,引导您完成进行基本设置所需的所有步骤。否则,请选择左侧面板上的相应类别来访问每个步骤的配置选项。
下面的列表显示了 YaST 群集模块中可用屏幕的概述。它还指出了屏幕是否包含成功设置群集所需的参数,或其参数是否可选。如果您正在按照首次设置向导进行操作,则屏幕将按照下面所列的顺序显示。
- 通讯通道(必需)
允许您定义用于在群集节点之间进行通讯的一个或两个通讯通道。对于传输协议,请使用多播 (UDP) 或单播 (UDPU)。有关详细信息,请参见 第 7.3 节 “定义通讯通道”。
重要:冗余通讯路径对于支持的群集设置,要求有两个或更多冗余通讯路径。首选方式是使用网络设备绑定。如果不可行,则必须在 Corosync 中定义另一个通讯通道。
- Corosync QDevice(可选,但建议为节点数为偶数的群集配置)
用于将 QDevice 配置为 QNetd 服务器的客户端,以参与仲裁决定。建议为节点数为偶数的群集(特别是双节点群集)配置。有关详细信息,请参见 第 7.4 节 “配置参与仲裁决定的仲裁方”。
- 安全性(可选,但建议配置)
允许您定义群集的身份验证设置。HMAC/SHA1 身份验证需要使用共享机密来保护和验证讯息。有关详细信息,请参见 第 7.5 节 “定义身份验证设置”。
- 配置 Csync2(可选,但建议配置)
Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。如果您是第一次使用 YaST 设置群集,我们强烈建议您配置 Csync2。如果不使用 Csync2,则必须手动将第一个节点上的所有配置文件都复制到群集中的其余节点上。有关详细信息,请参见 第 7.6 节 “配置 Csync2 以同步文件”。
- 配置 conntrackd(可选)
可让您配置用户空间
conntrackd
。使用 conntrack 工具为 iptables 进行有状态数据包检测。有关详细信息,请参见 第 7.7 节 “同步群集节点间的连接状态”。- 服务(必需)
允许您配置服务以使群集节点上线。定义是否在引导时启动群集服务,以及是否在防火墙中打开节点之间通讯所需的端口。有关详细信息,请参见 第 7.8 节 “配置服务”。
YaST 群集模块中的特定设置仅适用于当前节点。其他设置可以通过 Csync2 自动传送到所有节点。可在以下各部分中找到有关此配置的详细信息。
7.3 定义通讯通道 #
为实现群集节点间的成功通讯,请定义至少一个通讯通道。YaST /etc/corosync/corosync.conf
中。/usr/share/doc/packages/corosync/
中提供了一些多播和单播设置的示例文件。
如果您使用的是 IPv4 地址,则节点 ID 可以选填。如果使用的是 IPv6 地址,则必须填写节点 ID。YaST 群集模块提供了一个自动为每个群集节点生成唯一 ID 的选项,用户无需手动为每个节点指定 ID。
对于传输协议,请按以下过程所述使用多播 (UDP) 或单播 (UDPU)。
要配置多播,请执行过程 7.1 “定义第一个通讯通道(多播)”。
要配置单播,请执行过程 7.2 “定义第一个通讯通道(单播)”。
如果还需要定义第二个冗余通道,请执行上述过程之一配置第一个通道,然后继续执行过程 7.3 “定义冗余通讯通道”。
要在公有云平台上部署 SUSE Linux Enterprise High Availability,请使用单播作为传输协议。云平台本身在一般情况下并不支持多播。
使用多播时,将为所有群集节点使用相同的 mcastaddr
、bindnetaddr
和 mcastport
。通过使用相同的多播地址,群集中的所有节点可了解彼此的存在。对于不同的群集,请使用不同的多播地址。
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
将
协议设为Multicast
。定义
。将此值设置为要用于群集多播的子网。定义
。定义
。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入仲裁。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数一致。如果需要在 Corosync 中定义冗余通讯通道,请继续执行过程 7.3 “定义冗余通讯通道”。
否则,请单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
将
协议设为Unicast
。定义
。对于单播通讯,Corosync 需要知道群集中所有节点的 IP 地址。对于每个节点,选择
并输入以下详细信息:要修改或去除群集成员的任何地址,请使用
或 按钮。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入仲裁。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数一致。如果需要在 Corosync 中定义冗余通讯通道,请继续执行过程 7.3 “定义冗余通讯通道”。
否则,请单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。
如果由于任何原因不能使用网络设备绑定,第二个最佳选择就是在 Corosync 中定义冗余通讯通道(次环)。这样就可使用两个物理上分隔的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。
Corosync 中的另一个通讯通道会形成另一个令牌传递环。您配置的第一个通道是主环,环编号为 0
。第二个环(冗余通道)的环编号为 1
。
/etc/hosts
如果 Corosync 中配置了多个环,则每个节点都可具有多个 IP 地址。这需要在所有节点的 /etc/hosts
文件中反映出来。
按照过程 7.1 “定义第一个通讯通道(多播)”或过程 7.2 “定义第一个通讯通道(单播)”所述配置第一个通道。
激活
。冗余通道必须使用与所定义的第一个通讯通道相同的协议。如果使用多播,请输入以下参数:要使用的
,冗余通道的 和 。如果使用单播,请定义以下参数:要使用的
及 。在 下, 每个条目,为将加入群集的每个节点添加 。要告知 Corosync 如何以及何时使用其他通道,请选择要使用的
:如果只定义了一个通讯通道,
将自动禁用(值设为none
)。如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。
使用 RRP 时,SUSE Linux Enterprise High Availability 会监控当前环的状态,并在发生故障后自动重新启用冗余环。
或者,使用
corosync-cfgtool
手动检查环状态。使用-h
查看可用选项。单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。
7.4 配置参与仲裁决定的仲裁方 #
QDevice 和 QNetd 会参与仲裁决定。在仲裁方 corosync-qnetd
的协助下,corosync-qdevice
会提供一个可配置的投票数,以使群集可以承受大于标准仲裁规则所允许的节点故障数量。我们建议您对节点数为偶数的群集(特别是双节点群集)部署 corosync-qnetd
和 corosync-qdevice
。有关详细信息,请参见第 18 章 “QDevice 和 QNetd”。
在配置 QDevice 之前,必须先设置 QNetd 服务器。请参见第 18.3 节 “设置 QNetd 服务器”。
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
选中
。在
字段中,输入 QNetd 服务器的 IP 地址或主机名。选择
模式:如果不需要使用 TLS 且不应尝试,请采用
模式。如果希望使用 TLS 进行连接,但当 TLS 不可用时则不使用 TLS 来连接,请采用
模式。采用
模式会强制使用 TLS。如果 TLS 不可用,QDevice 将会退出并返回错误消息。
接受
和 的默认值。如果需要更改这些值,可在完成群集设置后使用crm cluster init qdevice
命令进行更改。选择
:使用
可禁用启发命令。使用
可按 定期运行启发命令。使用
则仅会在启动时、群集成员发生变化以及连接 QNetd 时运行启发命令。
如果将
设置为 或 ,请将启发命令添加到 列表中:选择
。将打开一个新窗口。输入命令的
。在
字段中输入命令。这可以是一条命令,也可以是脚本的路径,可以用 Shell、Python 或 Ruby 等任何语言编写。单击
关闭窗口。
单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。
7.5 定义身份验证设置 #
要定义群集的身份验证设置,您可以使用 HMAC/SHA1 身份验证。此方式需要使用共享机密来保护和验证讯息。指定的身份验证密钥(口令)将用于群集中的所有节点。
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
选中
。对于新创建的群集,请选择
。系统会创建身份验证密钥并将其写入/etc/corosync/authkey
。如果希望当前计算机加入现有群集,则不用生成新的密钥文件。而是将
/etc/corosync/authkey
从一个节点复制到当前计算机(手动或使用 Csync2)。单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。YaST 会将此配置写入/etc/corosync/corosync.conf
。
7.6 配置 Csync2 以同步文件 #
您可以使用 csync2
工具在群集中的所有节点间进行复制,而无需手动将配置文件复制到所有节点。Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。
可以定义对操作至关重要的文件列表。
可以显示这些文件的更改(对于其他群集节点)。
可以使用单个命令同步配置的文件。
使用
~/.bash_logout
中的一个简单外壳脚本,您可以在从系统注销之前收到更改未同步的提醒。
有关 Csync2 的详细信息,请参见 https://oss.linbit.com/csync2/ 和 https://oss.linbit.com/csync2/paper.pdf。
Csync2 仅推送更改。它不会在计算机之间连续同步文件。每当您更新需要同步的文件时,都需要将更改推送到其他计算机。稍后使用 YaST 完成群集配置后,将介绍如何使用 csync2
推送更改。
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
要指定同步组,请在
组中选择 ,然后输入群集中所有节点的本地主机名。对于每个节点,必须使用hostname
命令返回的确切字符串。提示:主机名解析如果您的网络中无法正常进行主机名解析,您也可以为每个群集节点指定主机名与 IP 地址的组合。要执行此操作,请使用字符串 HOSTNAME@IP,例如
alice@192.168.2.100
。这样 Csync2 便会在连接时使用该 IP 地址。单击
以创建同步组的密钥文件。密钥文件会写入/etc/csync2/key_hagroup
。要在
列表中填充通常需要在所有节点间同步的文件,请选择 。要在需同步的文件列表中
、 或 文件,请使用相应按钮。必须输入每个文件的绝对路径。选择
激活 Csync2。这样 Csync2 会在系统引导时自动启动。单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。YaST 会将 Csync2 配置写入/etc/csync2/csync2.cfg
。
7.7 同步群集节点间的连接状态 #
要对 iptables 启用有状态数据包检测,请配置并使用 conntrack 工具。这需要执行以下基本步骤:
conntrackd
#
使用 YaST 群集模块配置用户空间 conntrackd
(请参见图 7.6 “YaST conntrackd
”)。这需要未用于其他通讯通道的专用网络接口。守护程序可随后通过资源代理启动。
-
如果您是在修改现有群集,请切换到
类别。如果您正在按照初始设置向导进行操作,则无需手动切换类别。
选择
来同步连接状态。YaST 会自动检测并显示所选接口的 IPv4 地址。该地址必须已经配置并且必须支持多播。定义要用于同步连接状态的
。在
中,定义要将连接状态同步到的目标组的数字 ID。选择
创建conntrackd
的配置文件。如果修改了现有群集的任何选项,请确认更改并关闭群集模块。
单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。
配置 conntrack 工具后,可对 Linux 虚拟服务器使用这些工具(请参见负载平衡)。
conntrackd
- #7.8 配置服务 #
在 YaST 群集模块中,定义是否要在某个节点引导时启动其上的特定服务。也可使用模块手动启动和停止服务。为使群集节点上线并启动群集资源管理器,Pacemaker 必须作为服务运行。
本节中的配置仅适用于当前计算机,而不是所有群集节点。
如果您是在修改现有群集,请切换到
类别。您可以使用本节中的选项来启动和停止该节点上的群集服务。如果您正在按照初始设置向导进行操作,则无需手动切换类别。稍后您将启动群集服务,因此可以直接跳到步骤 5。
要在此群集节点每次引导时启动群集服务,请选择
。如果选择 ,那么每次此节点引导时,您都必须手动启动群集服务。要立即启动或停止群集服务,请选择
或 。要立即启动或停止 QDevice,请选择
或 。要在防火墙中打开群集通讯所需的端口,请选中
。单击
(如果使用设置向导)或 (如果在修改现有群集)确认更改。如果您正在按照初始设置向导进行操作,这会完成初始配置并退出 YaST。继续执行第 7.9 节 “将配置传输到所有节点”。
7.9 将配置传输到所有节点 #
通过 YaST 完成群集配置后,使用 csync2
将配置文件复制到群集的其余节点。要接收文件,节点必须包含在您在过程 7.6 “使用 YaST 配置 Csync2”中配置的 组中。
首次运行 Csync2 前,需要执行以下准备工作:
确保在节点之间配置了无口令 SSH。群集通讯需要使用此访问方式。
手动将文件
/etc/csync2/csync2.cfg
复制到群集中的所有节点。手动将文件
/etc/csync2/key_hagroup
复制到群集中的所有节点。它是 Csync2 在进行身份验证时需要使用的文件。但请不要在其他节点上重新生成该文件,因为在所有节点上,该文件必须是相同的。在所有节点上执行以下命令立即启用并启动该服务:
#
systemctl enable --now csync2.socket
执行以下过程将配置文件传输到所有群集节点:
要一次性同步所有文件,请在要从中复制配置的计算机上运行以下命令:
#
csync2 -xv
这会将文件推送到其他节点,从而一次同步所有文件。如果成功同步了所有文件,Csync2 完成时不会显示任何错误。
如果在其他节点(不只是当前节点)上对要同步的一个或多个文件进行了修改,Csync2 会显示类似以下消息的输出来报告存在冲突:
While syncing file /etc/corosync/corosync.conf: ERROR from peer hex-14: File is also marked dirty here! Finished with 1 errors.
如果确信当前节点上的文件版本是“最佳”版本,可以通过强制使用此文件并重新同步来解决冲突:
#
csync2 -f /etc/corosync/corosync.conf
#
csync2 -xv
有关 Csync2 选项的更多信息,请运行
#
csync2 --help
Csync2 仅推送更改。它不会在计算机之间连续同步文件。
每次更新应同步的文件时,都需要在您进行了更改的计算机上运行 csync2 -xv
,来将更改推送到其他计算机。如果在文件未更改的任何其他计算机上运行此命令,系统不会执行任何操作。
7.10 使群集上线 #
完成初始群集配置后,启动所有群集节点上的群集服务,以使堆栈上线:
登录到现有节点。
启动所有群集节点上的群集服务:
#
crm cluster start --all
此命令要求节点之间使用无口令 SSH 访问方式。您还可以使用
crm cluster start
启动单个节点。使用
crm status
命令检查群集状态。如果所有节点都已上线,则输出应类似于如下内容:#
crm status
Cluster Summary: * Stack: corosync * Current DC: alice (version ...) - partition with quorum * Last updated: ... * Last change: ... by hacluster via crmd on bob * 2 nodes configured * 1 resource instance configured Node List: * Online: [ alice bob ] ...此输出表示群集资源管理器已启动,可以管理资源了。
要获得支持,SUSE Linux Enterprise High Availability 群集必须启用 STONITH(节点屏蔽)。节点屏蔽机制可以是物理设备(电源开关),也可以是 SBD 结合看门狗构成的一种机制。在继续使用群集之前,请按照第 16 章 “屏障和 STONITH”或第 17 章 “存储保护和 SBD”中的说明配置一个或多个 STONITH 设备。