4.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 启用有状态包检测。High Availability Extension 使用此工具来同步群集节点之间的连接状态。有关详细信息,请参见http://conntrack-tools.netfilter.org/。
- Csync2
可用于在群集中的所有节点间(甚至在 Geo 群集间)复制配置文件的同步工具。Csync2 可处理排入同步组的任意数量的主机。每个同步组都有自己的成员主机列表及其包含/排除模式,包含/排除模式定义了在同步组中应同步哪些文件。同步组、属于每个组的主机名以及每个组的包含/排除规则均在 Csync2 配置文件
/etc/csync2/csync2.cfg
中指定。对于身份验证,Csync2 使用 IP 地址和同步组中的预共享密钥。需要为每个同步组生成一个密钥文件,并将其复制到所有组成员。
有关 Csync2 的更多信息,请参见 http://oss.linbit.com/csync2/paper.pdf。
- 现有群集
术语“现有群集”指的是任何包括至少一个节点的群集。现有群集具有定义通讯通道的基本 Corosync 配置,但它们不一定已有资源配置。
- 多路广播
一种用于网络内一对多通讯的技术,可用于群集通讯。Corosync 支持多路广播和单路广播。
注意:交换机和多路广播要使用多路广播进行群集通讯,请确保交换机支持多路广播。
- 多路广播地址 (
mcastaddr
) Corosync 管理器使用 IP 地址进行多路广播。IP 地址可以为 IPv4 或 IPv6。如果使用 IPv6 网络,则必须指定节点 ID。可以使用专用网内的任何多路广播地址。
- 多路广播端口 (
mcastport
) 用于群集通讯的端口。Corosync 使用两个端口:一个用于接收多路广播的指定
mcastport
和一个用于发送多路广播的mcastport -1
。- Redundant Ring Protocol (RRP)
该协议支持使用多个冗余局域网来从部分或整体网络故障中恢复。这样,只要一个网络运行正常,群集通讯就仍可继续。Corosync 支持 Totem Redundant Ring Protocol。所有参与节点上都强制实施逻辑令牌传递环以确保可靠且有序地传递消息。只有拥有令牌的节点才允许广播消息。
在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。RRP 可具有三种模式 (
rrp_mode
):如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。如果设置为
none
,将会禁用 RRP。
- 单路广播
一种将消息发送到单个网络目标的技术。Corosync 支持多路广播和单路广播。在 Corosync 中,单路广播作为 UDP 单路广播 (UDPU) 实施。
4.2 YaST 模块 #
启动 YaST 并选择
› 。也可以从命令行启动模块:sudo yast2 cluster
下面的列表显示了 YaST 群集模块中可用屏幕的概述。它还指出了屏幕是否包含成功设置群集必需的参数,或其参数是否可选。
- 通讯通道(必需)
允许您定义用于在群集节点之间进行通讯的一个或两个通讯通道。对于传输协议,请使用多路广播 (UDP) 或单路广播 (UDPU)。有关细节,请参见第 4.3 节 “定义通讯通道”。
- 安全性(可选但建议使用)
允许您定义群集的身份验证设置。HMAC/SHA1 身份验证需要使用共享机密来保护和验证消息。有关详细信息,请参见第 4.4 节 “定义身份验证设置”。
- 配置 Csync2(可选但建议使用)
Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。有关详细信息,请参见第 4.5 节 “将配置传输到所有节点”。
- 配置 conntrackd(可选)
可让您配置用户空间
conntrackd
。使用 conntrack 工具为 iptables 进行有状态包检测。有关详细信息,请参见第 4.6 节 “同步群集节点间的连接状态”。- 服务(必需)
允许您配置服务以使群集节点联机。定义是否在引导时启动 Pacemaker 服务,以及是否在防火墙中打开节点间通讯所需的端口。有关详细信息,请参见第 4.7 节 “配置服务”。
如果是首次启动群集模块,它会显示为向导,引导您完成进行基本设置所需的所有步骤。否则,请单击左侧面板上的类别,以访问每个步骤的配置选项。
YaST 群集模块中的一些设置仅适用于当前节点。其他设置可以通过 Csync2 自动传送到所有节点。可在以下各部分中找到有关此配置的详细信息。
4.3 定义通讯通道 #
为实现群集节点间的成功通讯,请定义至少一个通讯通道。对于传输协议,请分别按过程 4.1 或过程 4.2 中所述使用多路广播 (UDP) 或单路广播 (UDPU)。如果要定义另一个冗余通道(过程 4.3),则这两个通讯通道必须使用相同的协议。
要在公有云平台中部署 SUSE Linux Enterprise High Availability Extension,请使用单路广播作为传输协议。云平台本身在一般情况下并不支持多路广播。
YaST /etc/corosync/corosync.conf
中。/usr/share/doc/packages/corosync/
中提供了一些多路广播和单路广播设置的示例文件。
如果您使用的是 IPv4 地址,则节点 ID 可以选填。如果使用的是 IPv6 地址,则必须填写节点 ID。YaST 群集模块提供了一个自动为每个群集节点生成唯一 ID 的选项,用户无需手动为每个节点指定 ID。
使用多路广播时,将为所有群集节点使用相同的 mcastaddr
、bindnetaddr
和 mcastport
。通过使用相同的多路广播地址,群集中的所有节点都将知晓彼此。对于不同的群集,请使用不同的多路广播地址。
启动 YaST 群集模块,然后切换到
类别。将
协议设为多路广播
。定义
。将此值设置为要用于群集多路广播的子网。定义
。定义
。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入法定票数。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数匹配。确认更改。
如果需要,请按过程 4.3 “定义冗余通讯通道”中所述在 Corosync 中定义冗余通讯通道。
要使用单路广播(而非多路广播)进行群集通讯,请按如下所述继续操作。
启动 YaST 群集模块,然后切换到
类别。将
协议设为单路广播
。定义
。对于单路广播通讯,Corosync 需要知道群集中所有节点的 IP 地址。对于将要加入群集的每个节点,单击
并输入以下细节:要修改或删除群集成员的任何地址,请使用
或 按钮。要为每个群集节点自动生成唯一的 ID,请将
保留为启用状态。定义
。输入法定票数。默认情况下,每个节点有
。此值非常重要,Corosync 将使用它来为分区的群集计算1
张投票。 必须与群集中的节点数匹配。确认更改。
如果需要,请按过程 4.3 “定义冗余通讯通道”中所述在 Corosync 中定义冗余通讯通道。
如果由于任何原因不能使用网络设备绑定,第二个最佳选择就是在 Corosync 中定义冗余通讯通道(次环)。这样就可使用两个物理上分隔的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。
Corosync 中的另一个通讯通道将会形成另一个令牌传递环。在 /etc/corosync/corosync.conf
中,您配置的第一个通道就是主环,其环编号为 0
。第二个环(冗余通道)的环编号为 1
。
在 Corosync 中定义了冗余通讯通道后,使用 RRP 告知群集如何使用这些接口。有了 RRP,就可以使用两个物理位置分开的网络进行通讯。如果一个网络发生故障,群集节点仍可通过另一个网络进行通讯。
RRP 可以有三种模式:
如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。如果设置为
none
,将会禁用 RRP。
/etc/hosts
如果 Corosync 中配置了多个环,则每个节点都可具有多个 IP 地址。这需要在所有节点的 /etc/hosts
文件中反映出来。
启动 YaST 群集模块,然后切换到
类别。请激活
。冗余通道必须使用与所定义的第一个通讯通道相同的协议。如果使用多路广播,请输入以下参数:要使用的
,冗余通道的 和 。如果使用单路广播,请定义以下参数:要使用的
及 。输入将加入群集的所有节点的 IP 地址。要告知 Corosync 如何以及何时使用其他通道,请选择要使用的
:如果只定义了一个通讯通道,
将自动禁用(值none
)。如果设置为
active
,则 Corosync 将主动使用这两个接口。但是,此模式已弃用。如果设置为
passive
,Corosync 将选择性地通过可用网络发送消息。
使用 RRP 时,High Availability Extension 会监视当前环的状态,并在发生故障后自动重新启用冗余环。
或者,使用
corosync-cfgtool
手动检查环状态。使用-h
查看可用选项。确认更改。
4.4 定义身份验证设置 #
要定义群集的身份验证设置,您可以使用 HMAC/SHA1 身份验证。此方式需要使用共享机密来保护和验证消息。指定的身份验证密钥(密码)将用于群集中的所有节点。
启动 YaST 群集模块,然后切换到
类别。激活
。对于新创建的群集,请单击
。将创建身份验证密钥并将其写入/etc/corosync/authkey
。如果希望当前计算机加入现有群集,则不用生成新的密钥文件。而是将
/etc/corosync/authkey
从一个节点复制到当前计算机(手动或使用 Csync2 皆可)。确认更改。YaST 会将此配置写入
/etc/corosync/corosync.conf
。
4.5 将配置传输到所有节点 #
如果不想将生成的配置文件手动复制到所有节点,可使用 csync2
工具在群集中的所有节点间进行复制。
这需要以下基本步骤:
Csync2 将帮助您跟踪配置更改,并在群集节点之间保持文件同步。
可以定义对操作至关重要的文件列表。
可以显示这些文件的更改(对于其他群集节点)。
可以使用单个命令同步配置的文件。
使用
~/.bash_logout
中的一个简单外壳脚本,您可以在从系统注销之前获得更改未同步的提醒。
http://oss.linbit.com/csync2/ 和 http://oss.linbit.com/csync2/paper.pdf 上提供了有关 Csync2 的详细信息。
4.5.1 使用 YaST 配置 Csync2 #
启动 YaST 群集模块,然后切换到
类别。要指定同步组,请在
组中单击 ,然后输入群集中所有节点的本地主机名。对于每个节点,必须使用hostname
命令返回的确切字符串。提示:主机名解析如果您的网络中无法正常进行主机名解析,您也可以为每个群集节点指定主机名与 IP 地址的组合。为此,请使用字符串 HOSTNAME@IP,例如
alice@192.168.2.100
。这样,Csync2 将在连接时使用 IP 地址。单击
以创建同步组的密钥文件。密钥文件将写入/etc/csync2/key_hagroup
。创建后,必须将其手动复制到群集的所有成员。要使用通常需要在所有节点间同步的文件填充
列表,请单击 。要在待同步的文件列表中
、 或 文件,请使用相应按钮。必须为每个文件输入绝对路径名。通过单击
激活 Csync2。随后会执行以下命令,以在引导时自动启动 Csync2:root #
systemctl
enable csync2.socket确认更改。YaST 会将 Csync2 配置写入
/etc/csync2/csync2.cfg
。要立即启动同步过程,请继续第 4.5.2 节 “使用 Csync2 同步更改”。
4.5.2 使用 Csync2 同步更改 #
要成功使用 Csync2 同步文件,必须满足以下要求:
同一 Csync2 配置在所有群集节点上均可用。
同一 Csync2 身份验证密钥在所有群集节点上均可用。
所有群集节点上都必须正在运行 Csync2。
因此,在首次运行 Csync2 之前,需要做好以下准备:
如第 4.5.1 节 “使用 YaST 配置 Csync2”所述配置后,将文件
/etc/csync2/csync2.cfg
手动复制到所有节点。将执行第 4.5.1 节 的步骤 3 时在一个节点上生成的
/etc/csync2/key_hagroup
文件复制到群集中的所有节点。它是 Csync2 在进行身份验证时需要使用的文件。但请勿在其他节点上重新生成该文件,因为所有节点上的文件都必须相同。在所有节点上执行以下命令,以便立即启动服务:
root #
systemctl
start csync2.socket
要对所有文件执行一次初始同步,请在要从中复制配置的计算机上执行以下命令:
root #
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.
如果确信当前节点上的文件版本是“最佳”版本,可以通过强制使用此文件并重新同步来解决冲突:
root #
csync2
-f
/etc/corosync/corosync.confroot #
csync2
-x
有关 Csync2 选项的更多信息,请运行
csync2 -help
Csync2 仅推送更改。它不会在计算机之间连续同步文件。
每次更新需要同步的文件时,都必须将更改推送到其他计算机:在您进行了更改的计算机上运行 csync2
-xv
。如果对未更改文件的任何其他计算机运行此命令,则不会执行任何操作。
4.6 同步群集节点间的连接状态 #
要对 iptables 启用有状态包检测,请配置并使用 conntrack 工具。这需要以下基本步骤:
conntrackd
#
使用 YaST 群集模块配置用户空间 conntrackd
(请参见图 4.5 “YaST conntrackd
”)。这需要未用于其他通讯通道的专用网络接口。守护程序可随后通过资源代理启动。
—
启动 YaST 群集模块,然后切换到
类别。定义要用于同步连接状态的
。在
中,定义要与其同步连接状态的组的数字 ID。单击
来创建conntrackd
的配置文件。如果修改了现有群集的任何选项,请确认更改并关闭群集模块。
有关进一步群集配置,请单击第 4.7 节 “配置服务”。
并继续选择
来同步连接状态。会自动检测所选接口的 IPv4 地址并显示在 YaST 中。该地址必须已经配置并且必须支持多路广播。
conntrackd
— #配置 conntrack 工具后,可对 Linux 虚拟服务器使用这些工具(请参见负载平衡)。
4.7 配置服务 #
在 YaST 群集模块中,定义是否在引导节点时启动其上的特定服务。也可使用模块手动启动和停止服务。为使群集节点联机并启动群集资源管理器,Pacemaker 必须作为服务运行。
在 YaST 群集模块中,切换到
类别。要在每次引导此群集节点时启动 Pacemaker,请在
组中选择相应选项。如果在 组中选择 ,则必须在每次引导此节点时手动启动 Pacemaker。要手动启动 Pacemaker,请使用以下命令:root #
crm
cluster start要立即启动或停止 Pacemaker,请单击相应按钮。
要在防火墙中打开所需的端口以在当前计算机上进行群集通讯,请激活
。确认更改。请注意,该配置仅应用于当前计算机,而不是所有群集节点。
4.8 使群集上线 #
完成初始群集配置后,启动所有群集节点上的群集服务,以使堆栈上线:
登录到现有节点。
启动所有群集节点上的群集服务:
root #
crm
cluster start --all使用
crm status
命令检查群集状态。如果所有节点都联机,则输出应类似于如下内容:root #
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 ] ...此输出表示群集资源管理器已启动,可以管理资源了。
完成基本配置并使节点处于联机状态后,可以开始配置群集资源。使用其中一种群集管理工具,例如 crm 外壳 (crmsh) 或 Hawk2。有关更多信息,请参见第 7 章 “使用 Hawk2 配置和管理群集资源”或第 8 章 “配置和管理群集资源(命令行)”。