linux服务故障转移依赖pacemaker+corosync组合:corosync负责心跳仲裁,pacemaker管理资源调度与故障切换,需配置时间同步、免密ssh、防火墙放行,并强制启用fencing防脑裂,配合vip或lb实现客户端无感切换。

Linux 环境下实现服务故障转移,核心是靠集群软件协调多节点状态、自动接管资源。这不是单点配置能解决的事,而是需要分层设计、组件协同——底层保障链路冗余,中层管理服务生命周期,上层分发客户端请求。
Pacemaker + Corosync 是当前最主流、生产环境验证最充分的组合
它不依赖特定发行版(RHEL/CentOS、Ubuntu、SLES 均原生支持),也不绑定某类应用(数据库、Web 服务、存储网关都能纳管)。关键在于:Corosync 负责节点间通信与心跳仲裁,Pacemaker 负责定义“哪些资源要高可用”“谁该运行在哪”“出问题怎么切”。
安装时统一用系统包管理器:
apt install pacemaker corosync fence-agents(Debian/Ubuntu)yum install pacemaker corosync fence-agents-all(RHEL/CentOS)
不建议源码编译,避免版本错配导致资源代理失效。初始化集群前必须完成三件事:
所有节点时间同步(chrony 或 ntpd,误差 ≤ 50ms)
节点间免密 SSH(Pacemaker 后续执行远程操作依赖)
防火墙放行 Corosync 默认端口(5404/udp、5405/udp)-
资源定义要贴合业务实际:
比如托管 PostgreSQL,不能只起服务进程,还要确保数据目录可访问、VIP 漂移、监听端口就绪;
可用pcs resource create一条命令封装全部依赖:pcs resource create pgsql systemd:postgresql \ op monitor interval=30s on-fail=restart \ meta target-role=Started \ --clone interleave=true
故障判定不是靠“ping通就活”,而是多级健康检查叠加
Pacemaker 允许为每个资源配置不同粒度的检测:
- 节点级:Corosync 心跳超时(默认 1.5 秒未响应即标记 lost)
- 服务级:每 30 秒执行
pg_isready -q判断数据库是否接受连接 - 应用级:curl 访问
/healthz接口返回 200 才算真正就绪
任意一级失败,Pacemaker 就触发迁移逻辑——停止故障节点上的资源,启动到另一节点,并更新 VIP 绑定。
隔离(fencing)不是可选项,而是防脑裂的强制措施
若网络分区发生,两个节点都以为对方宕机,可能同时抢 VIP 和存储写入,造成数据损坏。必须配置 fencing:
- 物理服务器常用 IPMI 或 DRAC;
- 云环境(AWS/Azure/VPS)用云厂商提供的 fencing agent(如
fence_aws、fence_azure_arm); - 测试环境可用
fence_pcmk模拟,但生产环境严禁关闭 fencing。
配合前端 VIP 和负载均衡器才能对外透明
Pacemaker 自身不处理客户端流量分发。常见做法:
- 用 Keepalived 管理一个浮动 VIP,绑定在当前主节点网卡;
- 或用 HAProxy/Nginx 做 TCP/HTTP 层代理,后端指向 Pacemaker 管理的多个服务实例;
- 客户端只需连 VIP 或 LB 地址,完全感知不到后端切换。
不复杂但容易忽略











