Linux 高可用(HA)集群中的 Corosync 和 Pacemaker 技术 是构建可靠服务的关键组件。它们协同工作,通过节点状态管理和资源自动故障转移,确保关键服务在硬件或软件故障时持续可用。以下是其核心概念与实现原理的详细解析:
一、技术概念
1. Corosync
- 定位:集群通信引擎(Cluster Communication Layer)。
- 核心功能:
- 节点心跳检测:通过多播(Multicast)或单播(Unicast)协议(如 Totem 协议)实时监控节点存活状态。
- 消息有序广播:确保集群事件(如节点加入/离开、资源状态变化)在所有节点间同步。
- Quorum(仲裁)机制:防止脑裂(Split-Brain),确保集群决策合法性(如多数节点存活时才允许操作)。
- Token 环传递:通过逻辑令牌(Token)维护集群成员的一致性。
2. Pacemaker
- 定位:集群资源管理器(Cluster Resource Manager)。
- 核心功能:
- 资源管理:定义和管理集群资源(如 IP 地址、服务进程、存储设备)。
- 故障检测与恢复:监控资源健康状态,自动触发故障转移(Failover)。
- 策略引擎:根据资源约束(Constraints)和优先级(Priority)分配资源。
- 依赖关系管理:处理资源启动顺序(如先启动数据库,再启动 Web 服务)。
二、实现原理
1. 集群通信与状态同步(Corosync)
- 节点发现:
Corosync 初始化时,节点通过配置的通信协议(多播/单播)发现彼此,形成集群成员列表。 - 心跳检测:
每个节点周期性发送心跳消息,若某节点在超时时间内未响应,视为宕机,触发集群状态变更事件。 - 消息传递:
使用 Totem 协议确保消息按顺序、可靠地传递到所有节点,防止消息丢失或乱序。 - Quorum 仲裁:
集群通过投票机制判断是否具备多数存活节点(Quorum),避免网络分区时出现脑裂。例如,5 节点集群至少需要 3 节点存活才能操作资源。
2. 资源管理与故障转移(Pacemaker)
- 资源代理(Resource Agents):
Pacemaker 通过资源代理(如ocf:heartbeat:IPaddr2)控制资源的启动、停止和监控。代理类型包括:- LSB:兼容 Linux Standard Base 的 init 脚本。
- OCF:Open Cluster Framework 标准脚本(更灵活)。
- Systemd:直接管理系统服务单元。
- 资源监控:
周期性地检查资源健康状态(如进程是否存活、IP 是否可访问)。若检测到故障,标记资源为异常。 - 故障转移流程:
- Corosync 检测到节点故障,通知 Pacemaker。
- Pacemaker 根据资源约束和优先级,重新计算资源分配策略。
- 触发资源迁移:释放故障节点资源,在健康节点启动资源。
- 更新集群状态并同步到所有节点。
3. 资源约束(Constraints)
Pacemaker 通过约束规则定义资源的运行策略:
- 位置约束(Location):指定资源倾向在哪些节点运行(如优先在性能更强的节点)。
- 顺序约束(Order):控制资源启动/停止顺序(如先启动数据库,再启动应用服务)。
- 共置约束(Colocation):强制资源在同一节点运行(如 Web 服务与 VIP 必须共存)。
4. 典型故障切换流程示例
1. 节点 A(Active)运行资源(VIP + Apache)。
2. 节点 A 宕机,Corosync 检测到心跳丢失。
3. 集群重新计算 Quorum,剩余节点投票确认节点 A 离线。
4. Pacemaker 根据约束选择节点 B(Standby)作为新主节点。
5. 节点 B 启动 VIP 和 Apache 服务,接管流量。
三、核心架构与交互
+-------------------------+ +-------------------------+
| Node 1 | | Node 2 |
| +---------------------+ | | +---------------------+ |
| | Pacemaker |<---Corosync 通信--->| Pacemaker | |
| | - 资源管理 | | | | - 资源管理 | |
| | - 约束策略 | | | | - 约束策略 | |
| +---------------------+ | | +---------------------+ |
| | Corosync | | | | Corosync | |
| | - 心跳检测 | | | | - 心跳检测 | |
| | - 消息广播 | | | | - 消息广播 | |
| +---------------------+ | | +---------------------+ |
| | 资源(VIP, Apache) | | | | 资源(VIP, Apache) | |
+-------------------------+ +-------------------------+
四、关键配置工具
- pcs:Pacemaker/Corosync 的现代配置工具(推荐)。
# 创建集群 pcs cluster auth node1 node2 pcs cluster setup --name my_cluster node1 node2 pcs cluster start --all # 配置资源 pcs resource create WebVIP IPaddr2 ip=192.168.1.100 cidr_netmask=24 pcs resource create WebServer systemd:httpd pcs constraint colocation add WebVIP with WebServer - crm:旧版交互式命令行工具(逐步被 pcs 替代)。
- Hawk Web UI:基于 Web 的图形管理界面。
五、高级特性
- STONITH(Shoot The Other Node In The Head):
通过物理或虚拟方式强制关闭故障节点,防止数据冲突(如 IPMI 远程重启服务器)。 - QDevice(Quorum Device):
引入第三方仲裁设备(如一台独立服务器),在网络分区时辅助决策 Quorum。 - 多资源组(Resource Groups):
将多个资源绑定为一个组,按顺序启动/停止(如 VIP + Apache + MySQL)。
六、典型应用场景
- Web 服务高可用:VIP 和 HTTP 服务自动切换。
- 数据库主备切换:如 MySQL 主节点故障后,备节点接管。
- 分布式存储冗余:结合 DRBD 实现存储层同步。
七、挑战与解决方案
- 脑裂问题:通过 Quorum 和 STONITH 避免。
- 资源启动依赖:使用顺序约束和资源组管理。
- 性能开销:优化心跳网络(专用链路)、选择异步复制模式。
总结
Corosync 和 Pacemaker 的组合为 Linux 高可用集群提供了通信层与资源管理层的完整解决方案。Corosync 确保节点状态一致,Pacemaker 实现资源自动化管理,二者通过事件驱动机制协同工作,最终达成服务零中断或快速恢复的目标。实际部署时需结合场景合理配置约束、仲裁机制和监控策略,以平衡可靠性与性能。
浙公网安备 33010602011771号