管理集群节点和仲裁

1. 管理集群成员

1.1 管理集群成员

Red Hat高可用性附加组件为系统管理员提供了不同的方法来控制集群节点的成员关系:

  1. 启动和停止集群服务控制集群节点在运行时是否参与集群
  2. 启动和禁用集群服务可以控制集群节点是否自动启动集群服务并在启动的时候加入集群
  3. 在集群中添加和删除集群节点将永久更改该节点是否为集群的成员
  4. 备用模式和非备用模式控制集群节点是否允许承载集群内的资源

1.2 管理集群服务

systemd管理的集群服务corosyncpacemaker必须在集群节点上运行,才能加入该节点所属的集群。在运行pcsd的已认证集群节点上,可以通过pcs管理集群服务。

pcs cluster startpcs cluster stop命令用于启动和停止集群服务。这些命令支持在本地启动或停止集群服务Node,一个远程的节点作为参数提供的远程节点,或者使用--all在所有节点上操作。

1
2
3
4
5
6
7
8
9
##启动和停止集群服务
pcs cluster start
pcs cluster stop node1.example.com
pcs cluster stop --all

##启动和禁用集群服务
pcs cluster enable
pcs cluster disable node2.example.com
pcs cluster disable --all

1.3 添加和移除集群节点

Red Hat High Availability Add-On允许动态地添加和删除集群节点。这允许扩展集群或替换集群节点,而不会导致集群上的服务停机。pcs配置实用程序允许系统管理员添加或删除集群节点。使用pcs cluster node add node.fqdn,向集群中添加一个新节点,并使用pcs cluster node remove node.fqdn,节点被永久移除。

将新节点添加到现有集群需要多个配置步骤:

  1. 要加入集群的新节点必须配置为满足以下要求:

    (1) 新集群节点上的防火墙已配置为允许集群通信

    (2) pcs和fence-agents-all及其依赖项都已安装。教室环境包括一个Baseboard Management Controller (BMC),你可以使用通过LAN命令的IPMI来关闭、打开或重新启动机器,需要使用fence- agents-ipmilan包。

    (3) 启动并启用pcsd服务

    (4) 修改hacluster用户的密码,使其与已有节点上的hacluster用户密码保持一致

    (5) 通过所有现有集群成员对新集群节点进行身份验证。这需要运行pcs host auth node.fqdn

  2. 配置完成后,可以将新的集群节点作为集群成员添加到现有集群中,然后使用先前存在的集群节点进行身份验证。这一步应该是在集群中的节点上完成,并且该节点应该处于良好的状态。

将节点从集群中进行移除:

集群节点可以从集群中永久移除。例如,如果集群中不需要额外的节点进行操作,或者集群节点的硬件需要由新系统替换,那么这就是有用的。

  1. 从集群中移除集群节点。该命令必须从集群中处于良好状态的现有节点运行,而不能从要删除的节点运行。 pcs cluster node remove node4.example.com
  2. 通过移除专用fencing设备或通过重新配置共享fencing设备以反映删除了一个节点。
    pcs stonith delete fence_deletednode

1.4 禁止集群节点承载资源

有时管理员需要在不中断常规集群操作的情况下暂时挂起集群节点的资源托管。例如,当需要为托管资源应用重要的安全更新时,就会发生这种情况。可以在将节点逐个置于standby后应用更新,从而减少停机时间。另一 个用例是测试资源迁移。当节点处于standby时,它不会获得分配的任何资源。将当前在该节点上运行的资源迁移到其他节点。

pcs node standby命令可以使本地节点处于standbypcs node standby命令可以将作为参数提供的远程节点或带有--all选项的所有节点置于standby

1
2
pcs node standby node1.example.com
pcs node unstandby --all

1.5 查看集群状态

对于系统管理员来说,能够检索集群、集群节点和集群资源的当前状态非常重要。

通过pcs status可以详细了解集群状态、同步状态、已配置的资源组、资源和集群节点状态。

pcs status输出可以通过以下参数之一进行限制:

image-20240827154830699

pcs status命令是一个功能强大的实用程序,它使系统管理员能够确定集群节点成员的状态,并显示与集群和集群节点相关的所有信息:

集群由4个状态如下的集群节点组成:

  1. 集群节点node3.example.com处于备节点状态。
  2. 集群节点node1.example.comnode2.example.com完全可运行并参与集群,因此标记为Online
  3. 集群节点node4.private.example.com被标记为OFFLINE,因为集群服务在该集群节点上已经停止,或者无法与集群的仲裁部分通信。

2. 描述和查看仲裁操作

2.1 什么是仲裁

为了使集群按预期工作,节点必须就某些事实达成一致,例如哪些机器当前是集群成员,哪些机器正在运行服务,以及哪些机器正在使用哪些资源。

高可用性附加组件通过使用多数投票方案实现该方法。如果每个集群节点成功加入corosync网络通信,并且可以与已经参与集群的其他节点通信,则每个集群节点投一次票。

如果所有可能的选票中有一半以上被成功投出,则集群开始运行。达到半数以上选票所需的最低票数被称为quorum。如果实现了仲裁,则认为集群是仲裁的。如果一半或更多的节点无法相互通信,则集群失去仲裁。

当集群启动时,所有集群节点都尝试彼此通信,并以实现仲裁为目标。一旦形成多数,就会有一个quorum。没有成功加入仲裁集群的所有其他节点将由具有仲裁的节点隔离。如果作为仲裁集群一部分的节点不再能够与集群通信,那么该节点将被隔离。

2.2 为什么仲裁是必须的

在集群中的某些节点无法与某些其他节点通信的情况下,需要仲裁。下图显示了一个由节点1、2、3、4和5组成 的五节点集群,其中一个服务在共享存储上使用ext4文件系统。该服务当前在节点1上运行。

image-20240827162727111

节点4和节点5从主专用网络中分离出来,无法与主专用网络通信节点1、2、3。如果没有仲裁,这两个节点将决 定1、2和3都失败了并且必须被隔离(远程关闭电源),以便他们的资源可以恢复。这样,quorum是fencing之前的一道重要大门。