pacemaker高可组件安装与部署

📅 2026/7/29 11:32:58
pacemaker高可组件安装与部署
[hoc]安装安装在全部控制节点安装相关服务yum install pacemaker corosync pcs fence-agents resource-agents -y各包作用# pacemaker资源管理器CRM负责启动与停止服务位于 HA 集群架构中资源管理、资源代理层 # corosync消息层组件Messaging Layer管理成员关系、消息与仲裁为高可用环境中提供通讯服务位于高可用集群架构的底层为各节点node之间提供心跳信息 # resource-agents资源代理在节点上接收CRM的调度对某一资源进行管理的工具管理工具通常为脚本 # pcs命令行工具集 # fence-agentsfencing 在一个节点不稳定或无答复时将其关闭使其不会损坏集群的其它资源其主要作用是消除脑裂构建集群启动pcs服务systemctl enable pcsd --now或者systemctl enable pcsd systemctl start pcsd配置密码在所有节点配置hacluster用户密码passwd hacluster# 密码自定此外以Hapassw0rd为例。设置密码的另一种方法echo Hapassw0rd | passwd --stdin haclustercorosync配置文件准备cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf节点配置vim /etc/corosync/corosync.conf节点认证认证配置在任意节点操作以控制节点1为例# 集群节点添加 pcs host auth hostname addrn.n.n.n -u hacluster -p password # 节点认证组建集群需要用上一步设置的password [rootcontroller01 ~]# pcs cluster auth node1 node2 node3 -u hacluster -p Hapassw0rd --force集群设置和同步corosync# pcs cluster setup MyCluster server1 server2 # pcs start --all #开启集群 # corosync-cfgtool -s #检查集群通信是否顺畅当前节点的初始化信息 # #修改配置文件后还需要执行如下几条命令让配置同步其他节点、和立即生效 pcs cluster sync # pcs cluster reload corosync # 重载配置 corosync-cmapctl # 查询当前内存中corosync的配置集群恢复重配置pcs cluster destroy --force pcs cluster setup cluster-name node1 addrn.n.n.n node2 addrn.n.n.n ... nodeN addrn.n.n.n pcs cluster enable --all启动# 启动集群以controller01节点为例 [rootcontroller01 ~]# pcs cluster start --all# 设置集群开机启动 [rootcontroller01 ~]# pcs cluster enable --all查看集群状态# 查看集群状态也可使用” crm_mon -1”命令 # “DC”Designated Controller # 通过”cibadmin --query --scope nodes”可查看节点配置 [rootcontroller01 ~]# pcs status cluster查看corosync状态# “corosync”表示一种底层状态等信息的同步方式 [rootcontroller01 ~]# pcs status corosync查看节点# 或corosync-cmapctl runtime.totem.pg.mrp.srp.members [rootcontroller01 ~]# corosync-cmapctl | grep members查看集群资源[rootcontroller01 ~]# pcs resource或通过web访问任意控制节点https://172.16.20.3:2224账号/密码即构建集群时生成的密码hacluster/hapsssw0rd配置设置属性# 在任意控制节点设置属性即可以controller01节点为例 # 设置合适的输入处理历史记录及策略引擎生成的错误与警告在troulbshoot时有用 [rootcontroller01 ~]# pcs property set pe-warn-series-max100 \ pe-input-series-max100 \ pe-error-series-max100 # pacemaker基于时间驱动的方式进行状态处理” cluster-recheck-interval”默认定义某些pacemaker操作发生的事件间隔为15min建议设置为5min或3min [rootcontroller01 ~]# pcs property set cluster-recheck-interval5 # corosync默认启用stonith但stonith机制通过ipmi或ssh关闭节点并没有配置相应的stonith设备通过“crm_verify -L -V”验证配置是否正确没有输出即正确此时pacemaker将拒绝启动任何资源 # 在生产环境可根据情况灵活调整验证环境下可关闭 [rootcontroller01 ~]# pcs property set stonith-enabledfalse # 默认当有半数以上节点在线时集群认为自己拥有法定人数是“合法”的满足公式total_nodes 2 * active_nodes # 以3个节点的集群计算当故障2个节点时集群状态不满足上述公式此时集群即非法当集群只有2个节点时故障1个节点集群即非法所谓的”双节点集群”就没有意义 # 在实际生产环境中做2节点集群无法仲裁时可选择忽略做3节点集群可根据对集群节点的高可用阀值灵活设置 [rootcontroller01 ~]# pcs property set no-quorum-policyignore # v2的heartbeat为了支持多节点集群提供了一种积分策略来控制各个资源在集群中各节点之间的切换策略通过计算出各节点的的总分数得分最高者将成为active状态来管理某个或某组资源 # 默认每一个资源的初始分数取全局参数default-resource-stickiness通过pcs property config --all查看是0同时每一个资源在每次失败之后减掉的分数取全局参数default-resource-failure-stickiness也是0此时一个资源不论失败多少次heartbeat都只是执行restart操作不会进行节点切换 # 如果针对某一个资源设置初始分数”resource-stickiness“或resource-failure-stickiness则取单独设置的资源分数 # 一般来说resource-stickiness的值都是正数resource-failure-stickiness的值都是负数有一个特殊值是正无穷大INFINITY和负无穷大-INFINITY即永远不切换与只要失败必须切换是用来满足极端规则的简单配置项 # 如果节点的分数为负该节点在任何情况下都不会接管资源冷备节点如果某节点的分数大于当前运行该资源的节点的分数heartbeat会做出切换动作现在运行该资源的节点将释 放资源分数高出的节点将接管该资源 # pcs property config 只可查看修改后的属性值参数”--all”可查看含默认值的全部属性值 # 也可查看/var/lib/pacemaker/cib/cib.xml文件或”pcs cluster cib”或“cibadmin --query --scope crm_config”查看属性设置” cibadmin --query --scope resources”查看资源配置 [rootcontroller01 ~]# pcs property config又节点必须配置pcs property set stonith-enabledfalse # 禁用 STONITH测试环境 pcs property set no-quorum-policyignore # 忽略仲裁丢失 crm_verify -L # 验证资源配置没报错就行配置vip# 在任意控制节点设置vipresource_id属性命名即为“vip” # ocfstandard属性资源代理resource agent的一种另有systemdlsbservice等 # heartbeat资源脚本的提供者provider属性ocf规范允许多个供应商提供同一资源代理大多数ocf规范提供的资源代理都使用heartbeat作为provider # IPaddr2资源代理的名称type属性IPaddr2便是资源的type # 通过定义资源属性standard:provider:type定位”vip”资源对应的ra脚本位置 # centos系统中符合ocf规范的ra脚本位于/usr/lib/ocf/resource.d/目录目录下存放了全部的provider每个provider目录下有多个type # op表示Operations [rootcontroller01 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip172.30.200.30 cidr_netmask24 op monitor interval30s # 查看集群资源 [rootcontroller01 ~]# pcs resource # 通过”pcs resouce”查询vip资源在controller01节点 # 通过”ip a show”可查看vip [rootcontroller01 ~]# ip a show ens33其他服务资源pcs resource create nginx-server systemd:nginx op monitor timeout5s设置资源组# 创建资源组 pcs resource group add mysql-cluster db-store mariadb-server db-vip # 检查资源组 pcs resource group list查看支持的资源组[rootGpower1 ~]# pcs resource standardslsb ocfservicesystemd[rootGpower1 ~]# pcs resource providersheartbeat linbit openstack pacemaker查看指定的资源组代理# pcs resource list systemd# pcs resource list ocf:heartbeat:pgsql查看指定资源代理的帮助pcs resource describe ocf:heartbeat:IPaddr检查各资源对各节点倾向性分数crm_simulate-sL# 这个命令可以打印出当前集群各资源对各节点的倾向性的分数手动迁移资源到其他节点# pcs resource move resource nodename如 pcs resource move web work02HA管理通过web访问任意控制节点https://172.30.200.31:2224账号/密码即构建集群时生成的密码hacluster/hapsssw0rd虽然以cli的方式设置了集群但web界面默认并不显示手动添加集群实际操作只需要添加已组建集群的任意节点即。# 如果api区分admin/internal/public接口对客户端只开放public接口通常设置两个vip如命名为vip_management与vip_public # 建议是将vip_management与vip_public约束在1个节点 [rootcontroller01 ~]# pcs constraint colocation add vip_management with vip_public # 约束关系检查 [rootcontroller01 ~]# pcs constraint config配置内核参数# 全部控制节点修改内核参数以controller01节点为例 # net.ipv4.ip_nonlocal_bind是否允许no-local ip绑定关系到haproxy实例与vip能否绑定并切换 # net.ipv4.ip_forward是否允许转发 [rootcontroller01 ~]# echo net.ipv4.ip_nonlocal_bind 1 /etc/sysctl.conf [rootcontroller01 ~]# echo net.ipv4.ip_forward 1 /etc/sysctl.conf [rootcontroller01 ~]# sysctl -p设置pcs资源# 任意控制节点操作即可以controller01节点为例 # 添加资源lb-haproxy-clone [rootcontroller01 ~]# pcs resource create lb-haproxy systemd:haproxy --clone [rootcontroller01 ~]# pcs resource设置资源启动顺序# 设置资源启动顺序先vip再lb-haproxy-clone # 通过“cibadmin --query --scope constraints”可查看资源约束配置 [rootcontroller01 ~]# pcs constraint order start vip then lb-haproxy-clone kindOptional多服务绑定约束# 官方建议设置vip运行在haproxy active的节点通过绑定lb-haproxy-clone与vip服务将两种资源约束在1个节点 # 约束后从资源角度看其余暂时没有获得vip的节点的haproxy会被pcs关闭 [rootcontroller01 ~]# pcs constraint colocation add lb-haproxy-clone with vip [rootcontroller01 ~]# pcs resource配置 Pacemaker 资源定义资源代理安装 PostgreSQL 资源代理yum install -y resource-agents创建集群资源# 添加虚拟 IP 资源 pcs resource create pg_vip ocf:heartbeat:IPaddr2 ip192.168.1.100 cidr_netmask24 op monitor interval30s # 添加 PostgreSQL 资源 pcs resource create pgsql ocf:heartbeat:pgsql \ pgctl/usr/bin/pg_ctl \ psql/usr/bin/psql \ pgdata/var/lib/pgsql/data \ rep_modesync \ node_listnode1 node2 \ primary_conninfo_optpasswordrep_password \ op start timeout60s \ op stop timeout60s \ op promote timeout30s \ op demote timeout120s \ op monitor interval15s timeout10s roleMaster \ op monitor interval16s timeout10s roleSlave # 设置资源组确保 VIP 和 PostgreSQL 在同一节点 pcs constraint colocation add pg_vip with pgsql INFINITY pcs constraint order pgsql then pg_vip验证资源配置pcs resource # 显示资源详情 pcs status # 查看集群状态pcs节点操作认证新节点pcs cluster auth node3-uhacluster# 系统会提示输入 hacluster 用户的密码节点添加# 配置同步到新节点并加入集群pcs clusternodeaddnode3# 进阶选项新节点加入后立即启动集群服务并设置开机自启加上 --start 和 --enablepcs clusternodeaddnode3--start--enable验证状态# 检查节点是否成功加入pcs status nodespcs status nodes为节点添加属性pcs node attribute {NodeName} propertyNamepropertyValue节点删除# 节点是在线且健康的pcs clusternoderemove node2# 节点故障时pcs clusternoderemove node2 --skip-offline--force--skip-offline允许在节点离线时执行命令--force强制移除配置故障转移测试模拟主节点故障# 在 node1 上停止 PostgreSQL systemctl stop postgresql # 观察 Pacemaker 自动切换至 node2 pcs status | grep Current DC手动切换主备pcs resource clear pgsql # 清理操作状态 pcs resource move pgsql node2 # 将主库切换至 node2日常管理命令# 查看集群状态 pcs cluster status # 临时禁用资源 pcs resource disable pgsql # 将节点设为备用 pcs node standby node1 # 停止整个集群 pcs cluster stop --all # 查看集群状态且启动刷新 crm_mon -Afr # 查看集群状态 crm_mon -Afr -1 # 查看已配置的资源 # pcs resource # 查看可用资源 # pcs resource list # 查看某个具体资源 # pcs resource describe ocf:heartbeat:IPaddr2 # 查看集群配置 # pcs config # 将节点设置为standby状态 # pcs node standby Pacemaker-Mysql-02 # 手动迁移资源至其他节点 提示前边crmsh里执行手动迁移资源它默认会在配置界面给我们添加一条位置约束pcs也是一样的套路它也会给配置界面添加一条位置约束可以使用pcs config或者pcs constraint查看到相关约束信息 # pcs resource move mysql-cluster Pacemaker-Mysql-01 # 创建位置约束 # pcs constraint location add cli-prefer-mysql-cluster mysql-cluster Pacemaker-Mysql-01 100 # pcs constraint location add mysql-cluster_with_Pacemaker-Mysql-03 mysql-cluster Pacemaker-Mysql-03 INFINITY # 清除约束 # pcs constraint location remove mysql-cluster_with_Pacemaker-Mysql-03 # 清理告警 pcs resource cleanup resourceName # 清理指定资源的告警历史,包括所有相关的可以指定--strict只清除指定的资源 pcs resource cleanup nodenodename # 清理节点上所有资源的告警历史 pcs resource resourceID cleanup nodenodename # 清理指定节点上指定资源的告警历史 # 显示资源对集群各节点的倾向性分数 # crm_simulate -sL常见问题解决脑裂Split-Brain• 现象节点间通信中断各自认为自己是主节点。• 解决pcs cluster stop --all # 停止所有节点 pcs cluster start --all # 重新启动资源无法启动• 现象pcs status 显示资源 FAILED。• 解决pcs resource cleanup pgsql # 清理资源状态 journalctl -xe # 查看详细日志VIP 无法切换• 现象虚拟 IP 未迁移到新主节点。• 解决arping -c 3 -U -I eth0 192.168.1.100 # 强制刷新 ARP pcs resource restart pg_vip # 重启 VIP 资源性能优化建议调整复制模式pcs resource update pgsql rep_modeasync # 异步复制更高性能监控同步延迟SELECT pg_current_wal_lsn(), replay_lsn FROM pg_stat_replication;启用 WAL 压缩在 postgresql.conf 中设置 wal_compression on关于corosync的日志说明及配置其默认配置文件位于 /etc/corosync/corosync.conf这里我们可以看到默认情况下其日志相关的配置段如下logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes timestamp: on }因此可以看到日志会存储到2个地方除了定义的logfile之外也会写入到syslog也即 /var/log/messages如果不想corosync的日志写入到 /var/log/messages 将其to_syslog 修改成no参考官文https://clusterlabs.org/projects/pacemaker/doc/2.1/Pacemaker_Administration/html/pcs-crmsh.html?highlightdrbdhttps://www.php.cn/faq/1959417.htmlhttps://blog.csdn.net/mengshicheng1992/article/details/123612431https://yueludanfeng.blog.csdn.net/article/details/125136649https://huaweicloud.csdn.net/6549fb06525bff6100e998b2.html#devmenu9https://www.cnblogs.com/drgcaosheng/p/14760989.html