设置KVM HA群集| Pacemaker GUI | RHEL/CentOS 8
在本文中,将介绍"逐步指南来设置KVM HA群集",或者我们可以在RHEL或者CentOS 8中使用" Pacemaker GUI(Web UI)"说" KVM高可用性群集"。
在RHEL和CentOS 8中使用Pacemaker 2.0时,配置KVM HA群集所需的命令和步骤发生了许多变化。
在开始使用Pacemaker GUI配置KVM高可用性群集的步骤之前,让我们首先了解一些基本术语。
集群术语
如果这是第一个群集,我建议阅读:设置KVM高可用性群集之前了解高可用性群集和体系结构
Pacemaker
这是一个"集群资源管理器",在启动时,各个节点启动或者关闭或者相关资源发生故障时运行脚本。
此外,可以将其配置为定期检查每个群集成员的运行状况。
换句话说,"起搏器将负责启动和停止服务"(例如,Web或者数据库服务器),并将实施逻辑以确保所有必要的服务仅在一个位置运行同时避免数据故障或者损坏。
Corosync
这是一种"消息服务",将提供节点之间的通信通道。
管理仲裁规则和确定。
为在群集的多个成员之间协调或者运行的应用程序提供消息传递功能,因此必须在实例之间传递状态信息或者其他信息。
使用kronosnet库作为其网络传输,以提供多个冗余链接和自动故障转移。
PCS:
这是一个" corosync"和" pacemaker"配置工具,可让我们轻松查看,修改和创建基于起搏器的集群。
pcs守护程序可以创建和配置Pacemaker/Corosync集群
pcs守护程序还可以在集群运行时修改集群的配置
远程配置Pacemaker和Corosync以及启动,停止和显示集群的状态信息
Quorum
为了维持群集的完整性和可用性,群集系统使用称为quorum的概念来防止数据损坏和丢失。
当群集节点的一半以上处于联机状态时,群集即达到法定人数。
为了减少由于故障而导致数据损坏的机会,默认情况下,如果群集没有仲裁,Pacemaker将停止所有资源。
"法定人数是使用投票系统建立的。
"当群集节点无法正常运行或者无法与其余群集通信时,多数工作节点可以投票隔离,并在需要时对节点进行防护。
例如,在6节点群集中,"当至少4个群集节点正在运行时,将建立仲裁"。
如果大多数节点脱机或者不可用,则群集将不再具有仲裁,并且Pacemaker将停止群集服务。
服务器环境
- 我有安装了RHEL 8.1 Linux的物理服务器。
在此服务器上,我安装了与KVM相关的库和rpm,以启用虚拟化。
另外,不是手动创建所有KVM虚拟机,而是在物理服务器上设置KVM PXE服务器以"执行一键安装"。
因此,使用带有kickstart的
virt-install
,我创建了三个KVM虚拟机,并使用网络PXE引导在这些VM上安装了CentOS 8.1,无需任何手动干预。我将使用Pacemaker GUI在这三个虚拟机上设置KVM HA群集
准备工作
设置安装存储库
我们需要访问软件存储库以下载设置KVM高可用性群集所需的rpm。
这些rpm不是RHEL/CentOS 8 ISO的默认BaseOS和AppStream存储库的一部分
RHEL 8上的安装库
要设置KVM HA群集,必须使用正确的池ID(包含与High Availability Cluster相关的软件包)将RHEL 8服务器注册到RHN。
如果服务器位于代理之后,则还必须配置代理以能够下载软件包
我们可以使用以下命令列出所有可用的存储库,然后订阅包含x86_64的Red Hat Enterprise Linux High Availability的相应池。
[root@rhel-8 ~]# subscription-manager list --all --available
此外,我们还需要访问EPEL存储库,因此我们还应该安装EPEL存储库
[root@rhel-8 ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
在CentOS 8上的安装库
要在CentOS 8上设置KVM HA群集,默认情况下,我们可以从CentOS存储库访问所有rpm。
我们只需要访问Internet即可下载并安装rpms
我们必须启用PowerTools和HighAvailability存储库。
[root@centos-8 ~]# dnf config-manager --set-enabled HighAvailability [root@centos-8 ~]# dnf config-manager --set-enabled PowerTools
此外,还要安装并启用EPEL REPO
[root@rhel-8 ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
在我的LAB环境中,由于我的KVM虚拟机位于专用网络中,因此这些VM上没有Internet访问权限。
因此,我通过从CentOS和EPEL存储库下载软件包来设置脱机存储库,然后创建了脱机存储库,它将在我的KVM主机上配置的NFSv4服务器上共享
以下是我在KVM主机上配置的脱机存储库的列表,以使用Pacemaker GUI在RHEL/CentOS 8上设置KVM HA群集
[root@centos8-2 ~]# dnf repolist Last metadata expiration check: 0:16:17 ago on Fri 01 Jan 2017 11:00:08 AM IST. repo id repo name status AppStream CentOS-8 - AppStream 5,331 BaseOS CentOS-8 - Base 2,231 Gluster CentOS-8 - Gluster 58 HighAvailability CentOS-8 - HA 133 MediaAppStream CentOS-8 - Media AppStream 4,755 MediaBaseOS CentOS-8 - Media BaseOS 1,659 PowerTools CentOS-8 - PowerTools 2,002 epel Extra Packages for Enterprise Linux Server 8 5,373 extras CentOS-8 - Extras 20
配置计时(NTP)
对于我们的KVM HA群集,群集节点与同一时区同步非常重要。
再一次,由于虚拟机位于专用网络上,因此我已将KVM主机(rhel-8)配置为可访问Internet的chrony
服务器,其余群集节点将把我的KVM主机用作NTP服务器。
我已经写了另一篇文章,介绍了配置Chrony Server和Client的步骤,因此在此不再赘述。
配置主机名解析
我们可以配置BIND DNS服务器执行主机名解析,也可以更新群集节点的/etc/hosts
文件,以便它们可以使用主机名相互通信。
在我的KVM HA群集设置中,我在所有群集节点上(也在KVM主机上)使用这些值配置了/etc/hosts
。
[root@centos8-3 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.122.10 centos8-2 centos8-2.example.com 192.168.122.11 centos8-3 centos8-3.example.com 192.168.122.12 centos8-4 centos8-4.example.com
验证网络
确保所有群集节点和KVM主机都可以通过TCP网络相互通信。
由于我在群集节点上使用网桥NAT网络,因此所有节点都可以使用192.168.122.0/24(私有)和10.43.138.0/27(公共)子网与其他节点进行通信
安装起搏器
要使用Pacemaker GUI设置KVM HA群集,我们需要pcs
和pacemaker
rpm。
在所有群集节点上安装这些rpm。
我们还将在本文的下一部分中设置围栏,因此稍后将安装fence-agents
。
[root@centos8-2 ~]# dnf install pcs pacemaker -y [root@centos8-3 ~]# dnf install pcs pacemaker -y [root@centos8-4 ~]# dnf install pcs pacemaker -y
设置主机密码
现在,在所有"群集"节点上为" hacluster" Linux帐户设置密码,该帐户是在"安装PCS"时自动创建的。
PCS守护程序使用该帐户来建立节点之间的通信,并且当两个节点上的密码相同时,最好对其进行管理。
要设置
hacluster
的密码,请输入以下命令
提示:
如果在所有群集节点上设置相同的hacluster密码,则更容易进行身份验证,否则我们可能需要分别对它们进行身份验证
[root@centos8-2 ~]# echo Passw0rd | passwd --stdin hacluster Changing password for user hacluster. passwd: all authentication tokens updated successfully.
[root@centos8-3 ~]# echo Passw0rd | passwd --stdin hacluster [root@centos8-4 ~]# echo Passw0rd | passwd --stdin hacluster
启动并启用pcsd
下次启动并在所有群集节点上启用pcsd守护程序
[root@centos8-2 ~]# systemctl enable pcsd.service --now [root@centos8-3 ~]# systemctl enable pcsd.service --now [root@centos8-4 ~]# systemctl enable pcsd.service --now
配置防火墙
我们正在使用firewalld
守护进程来控制防火墙。
添加新规则,以使防火墙上的所有群集节点都具有高可用性服务器
说明:
我在实验室环境中未使用SELinux
[root@centos8-2 ~]# firewall-cmd --permanent --add-service=high-availability [root@centos8-2 ~]# firewall-cmd --reload [root@centos8-3 ~]# firewall-cmd --permanent --add-service=high-availability [root@centos8-3 ~]# firewall-cmd --reload [root@centos8-4 ~]# firewall-cmd --permanent --add-service=high-availability [root@centos8-4 ~]# firewall-cmd --reload
使用Pacemaker GUI设置KVM HA群集
接下来,我们将使用Pacemaker GUI配置KVM HA群集。
要导航到PCS Web界面,请转到
https://<server-FQDN>:2224
或者https://<server-IP>:2224
(请注意,它是https而不是http)接受安全例外,然后使用先前为hacluster设置的凭据登录,如以下屏幕快照所示:
下一步单击"新建"以在Pacemaker GUI上创建新的KVM HA群集
提示:
我们也可以使用添加现有内容将现有的群集节点添加到Pacemaker GUI。
接下来,提供要提供给集群的"集群名称"。
我将使用ha-cluster
。
这可以是任何名称。
接下来提供集群节点的"主机名"地址,然后单击"创建集群"
下一个屏幕将要求" hacluster"身份验证。
默认情况下,所有节点都经过身份验证,因此PCS可以从一个群集成员与其他群集成员进行自我对话。
由于我们在所有群集节点上为" hacluster"用户使用了相同的密码,因此我将选择"对所有节点使用相同的密码"
接下来单击"身份验证"以开始使用Pacemaker GUI构建KVM HA群集
这正是" hacluster"用户派上用场的地方,因为它是用于此目的的帐户。
这个阶段在两个节点上的/etc/corosync/corosync.conf中创建集群配置文件。
此时,所有三个群集节点中的
/etc/corosync/corosync.conf
文件应该相同。
如果没有错误报告,我们将收到一条消息,表示集群已成功创建。
接下来,我们可以选择"选中"复选框以启动集群,然后单击"完成"。
如我们所见,我们的KVM HA群集现在在Pacemaker GUI(Web UI)上可见。
我们可以使用此WebUI管理群集节点。
在Pacemaker GUI上,有"开始","停止","重新启动","备用"等独立选项,还有更多选项可用于管理各个KVM高可用性群集节点。
使用Pacemaker CLI设置KVM HA群集
使用起搏器CLI配置KVM HA群集的步骤已在以下步骤中进行了说明:设置高可用性群集CentOS 8的10个简单步骤
我们可以参考本文中的步骤,以避免在此处再次编写相同的步骤。
检查集群运行状况
启动集群后,我们可以从任何节点检查其状态(请记住,PCS使我们可以从任何节点管理集群):
我们会看到"警告:没有stonith设备并且stonith-enabled不是false",这是因为我们尚未配置防护。
我将在下一篇文章中分享有关防护,用法和在KVM HA群集中配置防护的所有步骤。
[root@centos8-3 ~]# pcs status Cluster name: ha-cluster WARNINGS: No stonith devices and stonith-enabled is not false Stack: corosync Current DC: centos8-2 (version 2.0.2-3.el8_1.2-744a30d655) - partition with quorum Last updated: Fri Jan 1 11:25:17 2017 Last change: Fri Jan 1 11:15:45 2017 by hacluster via crmd on centos8-2 3 nodes configured 0 resources configured Online: [ centos8-2 centos8-3 centos8-4 ] No resources Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
我们还应该启用" corosync"和" pacemaker"服务以在重新启动后自动启动(在所有群集节点上)
[root@centos8-3 ~]# systemctl enable pacemaker [root@centos8-3 ~]# systemctl enable corosync [root@centos8-4 ~]# systemctl enable pacemaker [root@centos8-4 ~]# systemctl enable corosync
标记为DC的节点(即"指定控制器")是最初启动群集并通常从中发出与群集相关的命令的节点。
如果由于某种原因当前的DC发生故障,则会从其余节点中自动选择一个新的指定控制器。
我们可以通过以下命令查看哪个节点是"当前DC":
[root@centos8-3 ~]# pcs status | grep -i dc Current DC: centos8-2 (version 2.0.2-3.el8_1.2-744a30d655) - partition with quorum
" pcs status nodes"命令可让我们查看有关集群及其配置的资源的所有信息:
[root@centos8-3 ~]# pcs status nodes Pacemaker Nodes: Online: centos8-2 centos8-3 centos8-4 Standby: Maintenance: Offline: Pacemaker Remote Nodes: Online: Standby: Maintenance: Offline:
检查仲裁配置
我们可以使用" corosync-quorumtool"来检查"群集"节点上现有的Quorum配置。
由于我们拥有3个节点的KVM HA群集,因此预期的最高票数是3
由于所有3个群集节点当前都处于活动状态,因此总投票数也为3
由于定额值为2,我们需要至少2个活动的群集节点才能使群集正常运行。
如果有两个以上的Cluster节点崩溃,则Quorum值将小于2,这样Cluster不会起作用;
[root@centos8-2 ~]# corosync-quorumtool Quorum information ----------------- Date: Fri Jan 1 11:36:37 2017 Quorum provider: corosync_votequorum Nodes: 3 Node ID: 1 Ring ID: 1/12 Quorate: Yes Votequorum information --------------------- Expected votes: 3 Highest expected: 3 Total votes: 3 Quorum: 2 Flags: Quorate Membership information --------------------- Nodeid Votes Name 1 1 centos8-2 (local) 2 1 centos8-3 3 1 centos8-4
创建群集浮动IP
我们的第一个资源将是群集可以在任一节点上启动的唯一IP地址
该IP将表示在其上运行相应服务的群集节点。
我们可以添加资源约束以仅在DC上运行此资源,以便我们始终可以使用此IP地址连接到DC
无论任何群集服务其中运行,最终用户都需要一个一致的地址来与他们联系
因此,每次我们必须连接到集群时,我们将使用浮动IP,而不是使用单独的集群节点IP,它将将我们连接到活动DC
其中我将选择" 192.168.122.100"作为浮动地址
我们将使用Pacemaker GUI配置集群浮动IP
使用Pacemaker GUI
使用https://<server-fqdn>:2224
或者https://<server-ip>:2224
登录到Pacemaker GUI。
从顶部面板中选择"资源",然后单击"添加"以创建新资源
这里的另一个重要信息是
ocf:heartbeat:IPaddr2
。
这告诉Pacemaker有关我们要添加的资源的三件事:" first"字段(在这种情况下为" ocf")是资源脚本所遵循的标准以及在何处找到它。
" second"字段(在这种情况下为" heartbeat")是特定于标准的;对于OCF资源,它告诉群集资源脚本所在的OCF名称空间。
第三字段(在这种情况下为IPaddr2)是资源脚本的名称。
提供资源ID。
我正在使用ClusterIP
。
这可以是任何名称在"必需参数"下,提供"群集浮动IP"。
群集节点必须可以访问此IP地址在
Optional Arguments
下,提供cidr_netmask
值,即子网值,对于我们的子网来说是24`(192.168.122.0/24)在"可选参数"下,我们还可以为" monitor_retries"提供监视器超时值
单击创建资源以创建集群浮动IP。
如果没有错误,则应该拥有第一个成功运行的资源。
我已经强调了一些其他资源,这些资源是我的集群的一部分。
使用Pacemaker CLI
我们也可以使用心脏起搏器CLI工具来创建集群浮动IP
以以下格式执行命令
[root@centos8-3 ~]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.122.100 cidr_netmask=24 op monitor interval=30s
我们可以根据浮动IP和网络掩码值来更改IP和cidr_netmask的值
"监视间隔"是可选的,但建议定期检查资源的可用性
要获取可用资源标准列表(ocf的ocf的一部分:heartbeat:IPaddr2),请运行:
[root@centos8-2 ~]# pcs resource standards lsb ocf service systemd
要获取可用OCF资源提供者的列表(occ:heartbeat:IPaddr2的heartbeat部分),请运行:
[root@centos8-2 ~]# pcs resource providers heartbeat openstack pacemaker
最后,如果您想查看特定OCF提供程序(的IPaddr2部分)的所有可用资源代理ocf:心跳:IPaddr2),运行:
[root@centos8-2 ~]# pcs resource agents ocf:heartbeat
检查群集和资源运行状况
我们已经在pacemaker GUI上检查了资源运行状况,但是您也可以使用pcs status或pcs resource status命令检查相同的情况
[root@centos8-4 ~]# pcs status Cluster name: ha-cluster Stack: corosync Current DC: centos8-3 (version 2.0.2-3.el8_1.2-744a30d655) - partition with quorum Last updated: Fri Jan 1 21:09:49 2017 Last change: Fri Jan 1 20:58:16 2017 by hacluster via crmd on centos8-3 3 nodes configured 1 resources configured Online: [ centos8-2 centos8-3 centos8-4 ] Full list of resources: ClusterIP (ocf::heartbeat:IPaddr2): Started centos8-4 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
我们还可以使用" pcs状态资源"来检查资源的状态
[root@centos8-2 ~]# pcs status resources ClusterIP (ocf::heartbeat:IPaddr2): Started centos8-4
验证集群浮动IP
现在我们可以使用虚拟IP连接到DC。
由于ClusterIP
资源正在centos8-4
上运行,因此我们已使用Floating IP连接到centos8-4
节点。
[root@rhel-8 ~]# ssh 192.168.122.100 Activate the web console with: systemctl enable --now cockpit.socket Last login: Fri Jan 1 16:18:27 2017 from 192.168.122.1 [root@centos8-4 ~]#
验证KVM HA群集故障转移
我们还将验证KVM HA群集故障转移方案,以确保ClusterIP
资源是高度可用的
由于ClusterIP
在centos8-4
上运行,我将使用pcs nodestandby <cluster_node>
将该节点设置为standby。
[root@centos8-4 ~]# pcs node standby centos8-4
接下来,检查" ClusterIP"资源的状态,正如我们现在所看到的,该资源正在其他集群节点(即" centos8-2")上运行。
因此,这意味着我们的KVM HA群集正在按预期工作
[root@centos8-4 ~]# pcs status resources ClusterIP (ocf::heartbeat:IPaddr2): Started centos8-2