用Pacemaker+Corosync搭建Linux高可用集群的核心是实现服务自动迁移、不丢数据、不断业务,关键在于理解资源约束、启动顺序、仲裁逻辑和fencing机制。

用 Pacemaker + Corosync 搭建 Linux 高可用集群,核心是让服务在节点故障时自动迁移,不丢数据、不断业务。关键不在装软件,而在理解资源约束、启动顺序、仲裁逻辑和 fencing 机制。
Corosync 负责通信,Pacemaker 负责决策
Corosync 是底层消息层,负责节点间心跳检测、状态同步和成员管理;Pacemaker 是集群资源管理器(CRM),根据 Corosync 提供的集群视图,决定服务该跑在哪、何时启动、怎么恢复。
- 必须先配好 Corosync 的 quorum(如 qdevice 或 3 节点奇数部署),否则 Pacemaker 拒绝启动资源
- Corosync 的 totem.interface.bindnetaddr 要设成本地实际网卡网段,不能写 0.0.0.0
- Pacemaker 默认启用 no-quorum-policy=ignore 是危险的,生产环境应设为 freeze 或 stop
资源定义要带约束,不能只靠 order 和 colocation
比如部署一个高可用 Web 服务(IP + Apache + 文件系统),光写启动顺序不够,还要明确“IP 必须和 Apache 在同一节点”“文件系统挂载完 Apache 才能起”。
- 用 primitive 定义每个资源(ocf:heartbeat:IPaddr2、systemd:httpd、ocf:heartbeat:Filesystem)
- 用 colocation 确保强绑定关系:“web-ip with web-server INFINITY”
- 用 order 控制依赖顺序:“fs-before-httpd mandatory”
- 加 location 约束可实现主备偏好,例如 “prefer-node1 100: node1”
fencing 不是可选项,是安全底线
当节点失联又可能还在写数据时,fencing(隔离)能强制关机或断电,避免脑裂导致数据损坏。没配 fencing,集群宁可拒绝服务也不冒险。
- 常用 fencing 设备:ipmilan(IPMI)、fence_virt(KVM)、fence_sbd(SBD 磁盘心跳)
- SBD 方式较轻量,需共享磁盘(如 iSCSI LUN),配置 sbd -d /dev/sdb create 后启用 systemd sbd 服务
- 检查 fencing 是否就绪:pcs stonith show 和 pcs status 中确认 STONITH enabled: Yes
日常运维离不开 pcs 命令和 crm_mon 实时观察
别依赖图形界面,命令行才是排障主力。每次变更后务必验证资源行为,模拟节点宕机看是否自动切换。
- 查看集群状态:pcs status(汇总)或 crm_mon -1(实时刷新)
- 手动迁移资源:pcs resource move web-server node2(会自动生成临时位置约束)
- 清理失败记录:pcs resource cleanup web-server(清除 error state,触发重试)
- 停用某节点维护:pcs cluster standby node1,恢复用 pcs cluster unstandby node1
不复杂但容易忽略:时间同步(chrony/ntpd 必须全集群一致)、防火墙放行 Corosync 端口(默认 5405/udp)、禁用 selinux 或配好策略、所有节点 host 解析必须双向准确。








