核心概念深度解析
1. 节点 (Node)
- 定义: 集群中的物理服务器或虚拟机,是运行集群软件的载体。
- 关键特性:
- 身份与状态: 集群中的每个节点都有一个唯一的主机名。除了你提到的主备之分,节点通常还会有一个“状态”,如:
- 在线/离线: 心跳检测的结果。
- 主/备: 资源的当前归属。
- 隔离性: 为了防止“脑裂”(Split-Brain),节点必须具备自我隔离或被强制隔离的能力(Fencing),确保故障节点在资源转移后不会继续干扰集群。
- 身份与状态: 集群中的每个节点都有一个唯一的主机名。除了你提到的主备之分,节点通常还会有一个“状态”,如:
2. 资源 (Resource)
- 定义: 为了提供特定服务所需的所有元素的抽象。
- 关键特性:
- 资源的依赖关系: 资源之间通常存在启动顺序的依赖。例如:
- 必须先挂载磁盘分区(资源A)。
- 才能启动IP地址(资源B)。
- 最后才能启动应用服务(资源C,如Nginx或MySQL)。
- 资源组: 为了简化管理,通常将存在依赖关系的多个资源(如VIP+HTTP服务)绑定在一起作为一个整体(资源组/服务组),在节点间一同转移。
- 资源的依赖关系: 资源之间通常存在启动顺序的依赖。例如:
3. 事件 (Event)
- 定义: 触发集群状态机发生变化的因素。
- 补充说明:
- 分层故障: 事件不仅仅是“节点故障”。现代HA软件会区分不同层次的事件:
- 资源级故障: 应用进程挂了,但节点正常。
- 节点级故障: 系统宕机、内核崩溃、心跳丢失。
- 网络级故障: 网卡失效或交换机断开。
- 脑裂: 这是最严重的“事件”结果,指集群中因为心跳中断导致节点间失去联系,各自认为对方已死,从而争抢资源运行,造成数据损坏。
- 分层故障: 事件不仅仅是“节点故障”。现代HA软件会区分不同层次的事件:
4. 动作 (Action)
- 定义: 策略引擎根据事件做出的最终决策。
- 补充说明:
- 不仅仅是Shell脚本: 虽然底层通常由Shell脚本执行具体操作(如
systemctl start nginx),但集群软件本身有一套复杂的策略引擎来决定“动作”的流程。典型的动作包括:- 故障转移: 主节点故障,备用节点接管资源。
- 故障回复: 原主节点恢复后,资源是否自动回切。
- ** fencing(隔离):** 这是最重要的动作。确认节点故障后,集群必须通过STONITH(Shoot The Other Node In The Head)等手段强制关闭故障节点的电源或切断其磁盘访问,保证数据一致性。
- 通知: 执行动作的同时,通常还会触发报警邮件或短信通知管理员。
- 不仅仅是Shell脚本: 虽然底层通常由Shell脚本执行具体操作(如
总结流程图
将这些概念串联起来,一个典型的高可用集群工作流程如下:
- 节点状态检测 (Heartbeat) —— 涉及节点
- 事件发生 (如主节点网络中断) —— 涉及事件
- 策略决策 (集群软件判定节点失联) —— 涉及策略
- 执行隔离 (Fencing/STONITH,确保故障节点不再写入数据) —— 涉及动作
- 资源转移 (在备用节点上启动IP、挂载磁盘、启动服务) —— 涉及资源
发表回复