2.3.3 配置群集资源管理器Pacemaker


Linux上Pacemaker介绍

在Windows Server操作系统上,由Windows Server Failover Cluster(WSFC)提供高可用性、故障检测和SQL Server AlwaysOn AG的自动故障转移。WSFC是一个群集资源管理器(CRM),运行在集群上的所有节点上负责维护群集的一个一致性镜像。群集管理器的目的是提供对运行在群集上的资源的高可用和容错。


在Linux操作系统上,实际上这个集群资源管理器是开源的软件Pacemaker。它主要由ClusterLabs组织提供社区贡献,Red Hat和SUSE来驱动合作开发。Pacemaker在大多数Linux发布上都是可用的,SQL Server AlwaysOn AG只在当前的Red Hat Enterprise Linux 7.3/7.4版、SUSE Linux Enterprise Server 12 SP2版和Ubuntu 16.04版支持。


Pacemaker栈由以下组件组成:

  •  Pacemaker软件本身,它类似于Windows上的群集服务。

  •  Corosync,一组通讯系统,它类似于Windows上的心跳和仲裁(不要与Heartbeat搞混了,它是功能类似于Corosync的一个Linux程序);它也负责重启失败的应用进程。

  •  libQB,一个高性能的日志、跟踪、进程间通讯和轮询系统,类似于cluster.log在Windows上如何产生的。

  •  Resource Agents,资源代理,允许Pacemaker管理服务和资源的软件,像启动或停止SQL Server AlwaysOn AG资源,像Windows上的群集资源DLL。

  •  Fence Agents,隔离代理,允许Pacemaker隔离和阻止行为异常的节点影响群集可用性。


在所有节点上安装Pacemaker

sudo yum install pacemaker pcs fence-agents-all resource-agents

查看安装的包,它们与不同的组件组成了Pacemaker栈:

  •  pcs,即Pacemaker Configuration System,Pacemaker和Corosync配置工具

  •  fence-agents-all,所有支持的隔离代理的一个集合

  •  resource-agents,所有符合Open Cluster Framework(OCF)规范的资源代理的一个仓库。


为安装 Pacemaker 和 Corosync 包时创建的默认用户设置密码

在所有节点上使用相同的密码。

sudo passwd hacluster


启用并启动pcsd服务和Pacemaker

能在重启后允许节点重新加入群集。在所有节点上运行以下命令:

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker


创建群集

首先为了防止有Cluster的残余配置文件影响后期搭建,可以先执行如下命令删除已经存在的Cluster:

sudo pcs cluster destroy # On all nodes
sudo systemctl enable pacemaker

然后创建并配置群集:

sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3>
sudo pcs cluster start --all
sudo pcs cluster enable --all

Pacemaker配置后,使用pcs来与群集交互。在群集中的一个节点上执行所有命令。


配置隔离

Pacemaker群集供应商需要启用STONITH,并对支持的群集安装配置隔离设备。当群集资源管理器无法确定节点或者节点上资源的状态时,隔离将群集再次带到一个已知状态。


资源级别的隔离,通过配置资源,确保当发生中断时没有数据损坏。例如,当通信链路损坏时,你试用资源级别的隔离来标记一个节点上的磁盘为过时。


节点级别的隔离确保一个节点不运行任何资源。通过重置该节点实现。Pacemaker支持多种隔离设备,依赖于你的环境。你可以使用智能电源分发单元(PDU)、网络交换机、HP iLO设备或者像VMWare STONITH代理的插件。目前,还不支持Hyper-V和微软Azure的STONITH代理。


注意:禁用STONITH仅出于测试目的。如果计划在生产环境中使用Pacemaker,则应根据环境计划STONITH实现,并使其处于启用状态。


生产部署隔离,参考官方文档:Red Hat与Pacemaker的高可用性外接程序:隔离


由于节点级别隔离配置很大程度取决于你的环境,在测试环境,用以下脚本可以禁用节点级别的隔离:

sudo pcs property set stonith-enabled=false


配置群集属性cluster-recheck-interval

Cluster-recheck-interval表示检查群集资源参数、约束和其他群集选项中的更改的轮询间隔。如果副本出现故障,群集尝试在一定的时间间隔内重启副本,该间隔由failure-timeout值和cluster-recheck-interval值确定。例如,如果failure-timeout设置为60秒,cluster-recheck-interval设置为120秒,重启尝试间隔大于60秒并且小于120秒。官方推荐设置failure-timeout为60秒并且cluster-recheck-interval设置为大于60秒。Cluster-recheck-interval不推荐设置为更小的值。以下脚本更新该属性值为2分钟:

sudo pcs property set cluster-recheck-interval=2min


配置群集属性start-failure-is-fatal

所有的包含RHEL 7.3和7.4的发布,使用最新的可用Pacemaker包1.1.18-11.el7介绍了群集配置start-failure-is-fatal为false时的行为改变。它影响了故障转移工作流。如果主副本发生服务中断,群集应故障转移到其中一个可用的辅助副本。相反,用户会注意到该群集会一直尝试启动失败的主副本。如果该主副本永远不会处于联机状态(由于永久的中断),群集永远不会故障转移到另一个可用的辅助副本。因为这个改变,之前推荐的对start-failure-is-fatal的推荐配置不在有效,并且该配置需要恢复回它的默认值true。

sudo pcs property set start-failure-is-fatal=true

此外,AG资源需要更新以包含failover-timeout属性。

使用如下脚本更新ag1资源的failover-timeout属性为60s:

pcs resource update ag1 meta failure-timeout=60s