46.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 频道安装 Red Hat High Availability Add-On 软件包,并启动并启用
pcsd
服务。yum install pcs pacemaker fence-agents-all systemctl start pcsd.service systemctl enable pcsd.service
# yum install pcs pacemaker fence-agents-all ... # systemctl start pcsd.service # systemctl enable pcsd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您正在运行
firewalld
守护进程,在两个节点上启用红帽高可用性附加组件所需的端口。firewall-cmd --permanent --add-service=high-availability firewall-cmd --reload
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群的两个节点上为用户
hacluster
设置密码。passwd hacluster
# passwd hacluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在要运行
pcs
命令的节点上,为集群中的每个节点验证用户hacluster
。pcs host auth z1.example.com z2.example.com
# pcs host auth z1.example.com z2.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
my_cluster
的集群,两个节点都作为集群成员。这个命令会创建并启动集群。因为pcs
配置命令对整个集群的影响,您只需要从集群的一个节点上运行。在集群的一个节点中运行以下命令。
pcs cluster setup my_cluster --start z1.example.com z2.example.com
# pcs cluster setup my_cluster --start z1.example.com z2.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 红帽高可用性集群要求为集群配置隔离功能。在红帽知识库解决方案 Red Hat High Availability Cluster 中的隔离 中描述了此要求的原因。但是,对于此介绍,仅显示了在这个配置中故障转移是如何工作的,通过将
stonith-enabled
集群选项设置为false
来禁用隔离。警告对生产集群而言,不要使用
stonith-enabled=false
。它通知集群,假设出现故障的节点已被安全隔离。pcs property set stonith-enabled=false
# pcs property set stonith-enabled=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建集群并禁用隔离后,检查集群的状态。
注意运行
pcs cluster status
命令时,可能会显示与系统组件启动时稍有不同示例的输出。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这两个节点中,配置网页浏览器并创建一个网页来显示简单的文本信息。如果您正在运行
firewalld
守护进程,启用httpd
所需的端口。注意不要使用
systemctl enable
启用任何由集群管理的服务在系统引导时启动。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要让 Apache 资源代理获得 Apache 状态,集群中的每个节点都会在现有配置之外创建一个新的配置来启用状态服务器 URL。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IPaddr2
和apache
资源,供集群管理。IPaddr2
资源是一个浮动 IP 地址,它不能是已经与物理节点关联的浮动 IP 地址。如果没有指定IPaddr2
资源的 NIC 设备,浮动 IP 必须位于与静态分配的 IP 地址相同的网络中。您可以使用
pcs resource list
命令显示所有可用资源类型的列表。您可以使用pcs resource describe resourcetype
命令显示您可以为指定资源类型设置的参数。例如,以下命令显示您可以为类型apache
的资源设置的参数:pcs resource describe apache
# pcs resource describe apache ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,IP 地址资源和 apache 资源都配置为名为
apachegroup
的组的一部分,这样可确保这些资源在同一节点中运行。在集群中的一个节点中运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,在这个实例中,
apachegroup
服务在节点 z1.example.com 中运行。访问您创建的网站,在运行该服务的节点上停止运行该服务,查看该服务如何切换到第二个节点。
- 将浏览器指向使用您配置的浮动 IP 地址创建的网站。这会显示您定义的文本信息,显示运行网站的节点名称。
停止 apache web 服务。使用
killall -9
模拟应用程序级别的崩溃。killall -9 httpd
# killall -9 httpd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群状态。您应该可以看到,停止 web 服务会导致操作失败,但集群软件在运行该服务的节点中重启该服务,所以您应该仍然可以访问网页浏览器。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在服务启动并再次运行后,清除失败状态。
pcs resource cleanup WebSite
# pcs resource cleanup WebSite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将运行该服务的节点设置为待机模式。请注意,由于禁用了隔离功能,因此我们无法有效地模拟节点级别的故障(比如拔掉电源电缆)。需要隔离功能集群才可以在出现这类问题时被恢复。
pcs node standby z1.example.com
# pcs node standby z1.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的状态并记录该服务正在运行的位置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 访问网站。服务应该仍然可用,显示信息应该指示服务正在运行的节点。
要将集群服务恢复到第一个节点,让节点离开待机模式。这不一定将该服务转换到第一个节点。
pcs node unstandby z1.example.com
# pcs node unstandby z1.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最后,进行清理,停止两个节点上的集群服务。
pcs cluster stop --all
# pcs cluster stop --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow