Pacemaker+Corosync 是 Linux 高可用主流开源组合,Corosync 负责节点通信与成员管理,Pacemaker 负责资源调度,需配合使用;配置上 Corosync 有独立配置文件,Pacemaker 配置存于 CIB;启动须先 corosync 后 pacemaker;双节点 Web 高可用需完成装包、认证、建集群、添加 VIP 及服务资源四步;必须启用 qdevice 仲裁和 fencing 机制防脑裂;运维需结合 corosync-quorumtool、日志分析及故障模拟验证。

Linux 服务器高可用(HA)项目中,Pacemaker + Corosync 是目前最主流、生产环境验证最充分的开源组合。它不依赖商业软件,能实现服务自动故障转移、资源隔离、多节点状态同步,适用于数据库、Web 集群、文件共享等关键业务场景。
核心组件分工要搞清
Corosync 负责底层通信和集群成员管理——它让节点知道“谁在线、谁掉线”,并保证消息可靠传递;Pacemaker 是 资源管理器——它根据策略决定“哪个节点运行哪项服务、出问题时怎么切、切之前要不要先停旧实例”。两者必须配合使用,不能只装一个。
- Corosync 配置文件 是 /etc/corosync/corosync.conf,重点设 bindnetaddr(监听网段)、quorum(法定票数策略)和 totem 参数(超时与重传)
- Pacemaker 本身不存独立配置文件,所有资源、约束、属性都通过 crmsh 或 pcs 命令实时写入集群 CIB(Cluster Information Base)
- 启动顺序固定:先启 corosync,再启 pacemaker;停机则相反
基础高可用服务搭建四步走
以双节点 Web 服务(Apache)为例,实现访问 IP 自动漂移、服务自动重启或迁移:
- 装包统一用发行版源:CentOS/RHEL 用
yum install pcs pacemaker corosync fence-agents-all;Ubuntu/Debian 用apt install pacemaker corosync pcs - 初始化集群前先认证:执行
pcs cluster auth node1 node2 -u hacluster -p 密码,账号密码需一致,hacluster 是默认管理用户 - 创建并启动集群:运行
pcs cluster setup --name mycluster node1 node2,再pcs cluster start --all - 添加 VIP 和 Apache 资源:
pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.10.100 cidr_netmask=24 op monitor interval=30spcs resource create webserver systemd:httpd op monitor interval=60spcs constraint colocation add webserver with vip INFINITYpcs constraint order vip then webserver
避免脑裂和误切换的关键设置
两节点集群最容易因网络闪断导致“各说各话”,必须靠仲裁和 fencing 控制局面:
- 启用 qdevice(推荐):部署一个独立的仲裁节点(qnetd),让集群在只剩一节点时仍能判断是否该继续提供服务,命令:
pcs quorum device add model qnetd host=qnetd.example.com algorithm=ffsplit - 务必配 fencing(隔离机制):如使用
fence_virt(KVM)、fence_ipmilan(iDRAC/iLO)或fence_pcmk(基于 Pacemaker 自身)。没 fencing 的集群等于裸奔,故障时可能双活写数据 - 禁用 STONITH 的后果很严重:不要为了“测试方便”执行
pcs property set stonith-enabled=false,生产环境必须开启,并确保 fence 设备真实可用
日常运维和排错看这三处
别只盯着 pcs status,真正定位问题得交叉验证:
- 查 Corosync 状态:运行
corosync-quorumtool -s看投票结果、corosync-cfgtool -s看节点连通性 - 看 Pacemaker 日志细节:重点翻
/var/log/cluster/corosync.log和/var/log/cluster/pacemaker.log,搜索 WARN、ERROR、fence、transition - 模拟故障快速验证:用
pcs resource move webserver node2手动迁移;用pcs cluster stop node1测试自动接管;拔网线后观察pcs status是否显示 fencing 触发






























