群集 是一组计算机(称为节点/成员),可以一起工作以执行任务的业务模型。群集根据应用场景可以分为四种类型,分别是存储群集;高可用性群集;负载均衡群集和高性能计算群集。在生产环境中,HA(高可用性)和 LB(负载均衡)群集是群集环境中部署最多的群集类型。它为终端用户提供了不间断的服务/数据可用性。HA 群集配置有时分为两种模式:主动-主动和主动-被动。
- 主动-主动模式:通常至少需要两个节点,两个节点在同一服务/应用程序上主动运行。这主要用于实现负载均衡(LB)群集,以在节点之间分配工作负载。
- 主动-被动模式:至少需要两个节点才能提供完全冗余的系统。此时,服务/应用程序一次仅在一个节点上运行,并且主要用于实现高可用性(HA)群集,因为一个节点将是活动的,而另一个节点将是备用的(被动)。
本文将演示如何在 CentOS 7 系统配置高可用(HA)群集,在我们的设置中,将仅关注高可用性(即主动-被动模式,也可以称为故障转移群集)。在 HA 群集中的节点,可以相互跟踪其他节点的状态,在节点出现故障时将服务迁移到其他节点。另外,节点的故障对于群集外部的客户端来说是看不到的,但是在迁移期间会有很小的服务中断。
RedHat / Centos 7 中的高可用性群集与以前的版本完全不同。从 RedHat 7 开始,”pacemaker”成为默认的集群资源管理器(RM),Corosync 负责与其他群集节点定期交换和更新群集信息。Pacemaker 和 Corosync 都是非常强大的开源工具,它们完全替代了RedHat 之前版本中使用的 CMAN 和 RGManager。
本教程将演示如何在 CentOS 7 系统上配置具有公共 iscsi 共享存储的高可用性(HA)/故障转移群集。这些内容将适合 RHEL/CentOS/Fedora,只需要对其中的部分内容做较少的改动。
1] 实验环境
本教程将使用三台主机,两台为 HA 群集节点,另外一台为 iSCSI 目标服务器。
- HA 节点1
- 主机名:node-1
- IP 地址:172.16.200.1
- 操作系统:CentOS 7
- HA 节点2
- 主机名:node-2
- IP 地址:172.16.200.2
- 操作系统:CentOS 7
- 浮动 IP:172.16.200.3
- iSCSI 目标服务器
- 主机名:iscsi-server
- IP 地址:172.16.200.4
- 操作系统:CentOS 7
2] 配置共享存储服务器(iSCSI 目标)
在 iSCSC 服务器执行如下命令,查看服务器块文件信息:
# lsblk
输入信息如下:
图.1 iSCSI 目标服务器块存储信息
使用上面的命令,就可以用树状格式列出主机所有块设备。示例将配置”/dev/sdb”作为群集节点的共享存储。
特别提示:
共享存储是所有高可用群集的重要资源之一,因为它为集群中的所有节点提供相同类型的应用程序数据,并且可以让群集中所有节点的应用程序进行访问。在生产环境中,SAN 存储将被广泛使用。示例中,我们将 iSCSI 共享存储用于HA群集。
现在更新 iSCSI 服务器的系统并安装相应工具:
# yum update -y # yum install targetcli -y
安装好后,使用 targetcli 工具,按如下步骤创建 iSCSI 目标:
1. 创建块存储设备
/> cd /backstores/block /> create iscsilun1 /dev/sdb
2. 创建 iSCSI 目标
/> cd /iscsi /> create iqn.2021-01.local.server-iscsi:server
3. 创建 ACLs
/> cd /iscsi/iqn.2021-01.local.server-iscsi:server/tpg1/acls /> create iqn.2021-01.local.client-iscsi:client1
4. 创建 LUNs
/> cd /iscsi/iqn.2021-01.local.server-iscsi:server/tpg1/luns /> create /backstores/block/iscsilun1
5. 启用 CHAP 认证
/> cd /iscsi/iqn.2021-01.local.server-iscsi:server/tpg1/ /> set attribute authentication=1 /> cd /iscsi/iqn.2021-01.local.server-iscsi:server/tpg1/acls/iqn.2021-01.local.client-iscsi:client1/ /> set auth userid=rultr /> set auth password=rultr /> cd / /> saveconfig
全部配置完成后,在 targetcli 工具命令行使用 ls 命令查看全部配置,典型输出如下所示:
图.2 iSCSI 目标配置详情
iSCSI 目标配置完成了,开启防火墙端口并关闭 SELinux,启动 target 服务后,就完成了 iSCSI 目标服务器的配置:
# firewall-cmd --add-service=iscsi-target --permanent --zone=public # firewall-cmd --reload # systemctl enable --now target # systemctl status target
2] 配置高可用(HA)群集
配置 HA 群集之前,先将如下内容添加至”/etc/hosts”文件中,以便通过主机名识别主机:
172.16.200.1 node-1 172.16.200.2 node-2 172.16.200.4 iscsi-server
两台节点主机均安装 iSCSI 启动器工具,连接使用共享存储:
# yum install iscsi-initiator-utils -y
启动器安装成功后,编辑”/etc/iscsi/initiatorname.iscsi”文件,将启动器名称设置为与 iSCSI 目标服务器的一致:
InitiatorName=iqn.2021-01.local.client-iscsi:client1
启动 iscsid 服务:
# systemctl enable --now iscsid # systemctl status iscsid
由于目标服务器配置了CHAP 认证,所以需要修改 iscsi 服务的配置文件”/etc/iscsi/iscsid.conf”,配置 CHAP 认证信息:
# systemctl enable --now iscsid
全部完成后,使用如下命令发现并连接 iSCSI 目标:
# iscsiadm --mode discoverydb --type sendtargets --portal iscsi-server --discover # iscsiadm -m node --login # lsblk
图.3 HA 节点连接 iSCSI 共享存储
可以看到,iSCSI 目标已经被系统所识别。之后就可以格式化该设备并将它挂载到系统目录:
# mkfs.xfs /dev/sdb # mkdir -p /iscsi # mount /dev/sdb /iscsi/
两台主机均挂载成功后,修改”/etc/fstab”文件,添加如下内容,以使目标卷开机自动挂载到系统:
/dev/sdb /iscsi xfs defaults,_netdev 0 0
两个 HA 节点均可以访问共享存储后,继续创建群集。注意以下命令两台 HA 节点均需要执行。
# yum install pcs fence-agents-all -y # firewall-cmd --add-service=high-availability --zone=public --permanent # firewall-cmd --reload # systemctl enable --now pcsd
HA 软件包安装成功后,会自动创建一个”hacluster”用户,来管理高可用程序,使用如下命令为该用户设置密码:
# passwd hacluster
群集节点使用”hacluster”用户在节点之间进行通信,为了能够正确的进行通信,我们需要为此帐户设置一个密码。建议在所有节点上使用相同的密码。
密码设置完成后,使用如下命令验证群集:
# pcs cluster auth node-1 node-2
图.4 验证群集中的所有节点
上面的命令主要用于验证群集中每个节点之间的 pcsd。身份验证只需要执行一次,验证通过后,令牌(授权)密钥文件将保存在以下路径”~/.pcs/tokens 或 /var/lib/pcsd/tokens”中。
群集中所有节点均验证通过后,就可以使用如下命令创建群集了:
# pcs cluster setup --start --enable --name HA_cluster node-1 node-2
图.5 创建高可用群集
通过上面的命令,我们可以建立一个新群集。使用”–name”参数设置群集的名称,示例中使用”HA_cluster”,并添加了 node- 1 和 node-2 作为群集中的节点。”–start”和”–enable”的参数将同时影响群集中两个节点上的群集服务。
从图.5 的输出中,可以看到群集已成功创建并在两个节点上启动了服务。
最后,将群集设置为开机自动启动,并查看群集状态:
# pcs cluster enable --all # pcs cluster status
图.6 查看群集状态
以上命令只列出了群集部件的状态,使用”pcs status”命令会显示群集的详细信息,包括节点的详细信息,主机状态和资源信息。
从图.6 的输出中,可以看到群集设置在两个节点上均正常运行,但是尚未配置任何资源。接下来,我们将演示添加一些资源以完成群集的所有设置。
在添加资源之前,我们先验证一下群集配置:
# crm_verify -L -V
图.7 验证群集配置
看到一堆的错误也不要头大,这只是意味着验证工具发现有关 Fencing 设置的一些错误,因为在默认情况下启用了STONITH。演示方便起见,我们将禁用此功能。而对于生产环境的群集,则不建议禁用此项。
Fencing 也称为 STONITH,它是群集中的重要工具之一,用于保护共享存储上的数据不受损坏;当节点之间无法相互通信时,Fencing 起着至关重要的作用,它将分离故障节点访问的共享存储。
对于 Fencing,有两种可用的类型:资源级防护和节点级防护。
在本演示中,由于我们的计算机运行在不支持 Fmware 的环境中,因此我将不运行 Fencing(STONITH),但是在生产环境中实施的用户,请点击 >>这里<< 查看 Fencing 的相关设置。
使用以下命令禁用 STONITH 并忽略仲裁策略,并检查”群集属性”的状态以确保两者均被禁用:
# pcs property set stonith-enabled=false # pcs property set no-quorum-policy=ignore # pcs property list
图.8 关闭群集 STONITH 功能
此时,群集的 STONITH 和仲裁策略全部禁用,再次使用之前的命令验证群集配置,也不会出现报错了。
群集架构搭建完成后,就可以为群集添加资源了,没有资源的群集是没有任何实际意义的。在群集服务中,资源可以是物理硬件单元(例如磁盘驱动器),也可以是逻辑单元(例如 IP 地址,文件系统或应用程序)。在群集中,资源一次只能在单个节点上运行。
示例演示中,我们将使用以下资源:
- HTTP 服务
- IP 地址
- 文件系统
我们首先在每个节点均安装 HTTP 服务器,使用 NGINX,安装教程可以参考 >>这里<<
安装完成后,使用以下命令修改服务器主目录以及开启防火墙服务:
# vi /etc/nginx/conf.d/default.conf location / { root /iscsi/html; index index.html index.htm; } # firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --reload
为了能够让群集软件监控 NGINX 服务状态,在”/etc/nginx/conf.d/”目录下添加一个”status.conf”配置文件,内容如下:
server { listen 8008; server_name localhost; location / { stub_status on; access_log off; } } //开启防火墙 # firewall-cmd --add-port=8008/tcp --zone=public --permanent # firewall-cmd --reload
现在开始创建群集资源,我们将添加三个群集资源:名为 NGINX_FS 的文件系统资源,名为 NGINX_VIP 的浮动 IP 地址资源,以及名为 NGINX_WEB 的 Web 服务器资源。使用以下命令将三个资源添加到同一资源组中:
# pcs resource create NGINX_FS Filesystem device="/dev/sdb" directory="/iscsi/" fstype="xfs" --group nginx # pcs resource create NGINX_VIP IPaddr2 ip=172.16.200.3 cidr_netmask=24 --group nginx # pcs resource create NGINX_WEB ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" httpd="/usr/sbin/nginx" port=8008 status10url="http://localhost" --group nginx
全部配置完成后,就可以使用如下命令查看群集资源状态:
# pcs resource show
图.9 查看群集资源状态
可以看到,所有群集资源均已经启动,并且所有资源均归属于 node-1 节点。
此时,就可以分别查看两个节点的文件系统及 IP 地址信息:
图.10 节点1 文件系统及 IP 地址信息
图.11 节点2 文件系统及 IP 地址信息
可以看出,节点1 已经挂载了”/dev/sdb”卷,并且使用了群集的浮动 IP 地址。而节点2并没有被分配这些群集资源,与之前描述的 HA 群集同时只有一个节点使用资源一致。至于 Nginx 服务也由节点1 来承担,可以通过浏览器分别访问节点1的 IP 地址以及浮动 IP 来进行验证,这里就不再过多演示。
至此,我们已经 CentOS 7 系统上成功配置了两个节点高可用性群集。希望本文能帮助您了解有关”HA /故障转移群集”的一些知识。 如果想要了解更为细致的内容,可以参考相关手册。