2.2. 了解配置故障转移
以下流程介绍了创建运行一个服务的 Pacemaker 集群,当在其上运行服务的节点变得不可用时,会从一个节点切换到另一个节点。通过这个步骤,您可以了解如何在双节点集群中创建服务,并可以查看在运行该服务的节点出现问题时会出现什么情况。
这个示例步骤配置一个运行 Apache HTTP 服务器的双节点 Pacemaker 集群。然后,您可以停止一个节点上的 Apache 服务来查看该服务仍然可用。
在本例中:
-
节点为
z1.example.com
和z2.example.com
。 - 浮动 IP 地址为 192.168.122.120。
先决条件
- 两个运行 RHEL 8 的节点可以相互通信
- 与节点静态分配的一个 IP 地址在同一网络上的浮动 IP 地址
-
运行的节点的名称位于
/etc/hosts
文件中
流程
在这两个节点上,从 High Availability 频道安装红帽高可用性附加组件软件包,并启动并启用
pcsd
服务。# yum install pcs pacemaker fence-agents-all ... # systemctl start pcsd.service # systemctl enable pcsd.service
如果您正在运行
firewalld
守护进程,在这两个节点上启用红帽高可用性附加组件所需的端口。# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload
在集群的两个节点上,为用户
hacluster
设置密码。# passwd hacluster
在您要运行
pcs
命令的节点上,为集群中的每个节点验证用户hacluster
。# pcs host auth z1.example.com z2.example.com
创建名为
my_cluster
的群集,两个节点都是群集成员。这个命令会创建并启动集群。您只需要从集群中的一个节点运行此操作,因为pcs
配置命令对整个集群有效。在集群的一个节点中运行以下命令。
# pcs cluster setup my_cluster --start z1.example.com z2.example.com
红帽高可用性集群要求为集群配置隔离功能。Fencing in a Red Hat High Availability Cluster 包括了这个要求的原因。然而,在本简介中,只显示在此配置中故障转移的工作方式,通过将
启用了stonith 的集群
选项设置为false
来禁用隔离警告对生产环境集群而言,
stonith-enabled=false
的使用完全不合适。它通知集群,假设出现故障的节点已被安全隔离。# pcs property set stonith-enabled=false
创建集群并禁用隔离后,检查集群的状态。
注意运行
pcs cluster status
命令时,可能会显示在系统组件启动时暂时与示例稍有不同的输出。# pcs cluster status Cluster Status: Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Thu Oct 11 16:11:18 2018 Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z1.example.com 2 nodes configured 0 resources configured PCSD Status: z1.example.com: Online z2.example.com: Online
在这两个节点中,配置网页浏览器并创建一个网页来显示简单的文本信息。如果您正在运行
firewalld
守护进程,请启用httpd
所需的端口。注意不要使用
systemctl enable
启用任何由集群管理的在系统引导时启动的服务。# yum install -y httpd wget ... # firewall-cmd --permanent --add-service=http # firewall-cmd --reload # cat <<-END >/var/www/html/index.html <html> <body>My Test Site - $(hostname)</body> </html> END
要让 Apache 资源代理获得 Apache 状态,集群中的每个节点都会在现有配置之外创建一个新的配置来启用状态服务器 URL。
# cat <<-END > /etc/httpd/conf.d/status.conf <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 Allow from ::1 </Location> END
创建
IPaddr2
和apache
资源,供群集管理。'IPaddr2' 资源是一个浮动 IP 地址,它不能是一个已经与物理节点关联的 IP 地址。如果没有指定 'IPaddr2' 资源的 NIC 设备,浮动 IP 必须位于与静态分配的 IP 地址相同的网络中。您可以使用
pcs resource list
命令显示所有可用资源类型的列表。您可以使用pcs resource describe resourcetype
命令显示您可以为指定资源类型设置的参数。例如,以下命令显示您可以为apache
类型的资源设置的参数:# pcs resource describe apache ...
在本例中,IP 地址资源和 apache 资源都配置为名为
apachegroup
的组的一部分,这样可确保资源在同一节点上运行。在集群中的一个节点中运行以下命令:
# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.122.120 --group apachegroup # pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" --group apachegroup # pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com PCSD Status: z1.example.com: Online z2.example.com: Online ...
请注意,在此实例中,apache
group
服务正在节点 z1.example.com 上运行。访问您创建的网站,在运行该服务的节点上停止运行该服务,查看该服务如何切换到第二个节点。
- 将浏览器指向使用您配置的浮动 IP 地址创建的网站。这会显示您定义的文本信息,显示运行网站的节点名称。
停止 apache web 服务。使用
killall -9
模拟应用程序级别的崩溃。# killall -9 httpd
检查集群状态。您应该可以看到,停止 web 服务会导致操作失败,但集群软件在运行该服务的节点中重启该服务,所以您应该仍然可以访问网页浏览器。
# pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Online: [ z1.example.com z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z1.example.com WebSite (ocf::heartbeat:apache): Started z1.example.com Failed Resource Actions: * WebSite_monitor_60000 on z1.example.com 'not running' (7): call=31, status=complete, exitreason='none', last-rc-change='Fri Feb 5 21:01:41 2016', queued=0ms, exec=0ms
在服务启动并再次运行后,清除失败状态。
# pcs resource cleanup WebSite
将运行该服务的节点设置为待机模式。请注意,由于禁用了隔离功能,因此我们无法有效地模拟节点级别的故障(比如拔掉电源电缆)。需要隔离功能集群才可以在出现这类问题时被恢复。
# pcs node standby z1.example.com
检查集群的状态并记录该服务正在运行的位置。
# pcs status Cluster name: my_cluster Stack: corosync Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Fri Oct 12 09:54:33 2018 Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com 2 nodes configured 2 resources configured Node z1.example.com: standby Online: [ z2.example.com ] Full list of resources: Resource Group: apachegroup ClusterIP (ocf::heartbeat:IPaddr2): Started z2.example.com WebSite (ocf::heartbeat:apache): Started z2.example.com
- 访问网站。服务应该仍然可用,显示信息应该指示服务正在运行的节点。
要将集群服务恢复到第一个节点,让节点离开待机模式。这不一定将该服务转换到第一个节点。
# pcs node unstandby z1.example.com
最后,进行清理,停止两个节点上的集群服务。
# pcs cluster stop --all