HA Cluster/Failover Cluster
HA Cluster必须能够使用共享存储(NAS/SAN), HA Cluster的几种配置,参考Pacemaker的配置:
- Active/Active 两台主机通过负载均衡同时提供相同服务。
- Active/Passive 备机做完整的冗余备份,主机宕机时,备机替代主机上线。
- N+1 提供一台备机,但这台备机能够cover所有的服务(一般适用提供多种独立服务的Cluster),当N=1时,退化成Active/Passive。
- N+M 当N+1配置里的一台备机无法cover所有服务时,考虑增加备机到M。
- N-to-1 备机只是临时使用,当主机恢复后,服务还是自动切换到主机。
- N-to-N 这是Active/Active和N+M的组合模式。
DRBD
DRBD (Distributed Replicated Block Device) 是一个用软件实现的,无共享的,服务器之间mirror块设备内容的存储复制解决方案(可以看做网络上的RAID-1)。
DRBD is a RAID-1 style block device which synchronizes over the network between two computers. In essence, it provides a virtual shared storage between two computers.
DRBD的核心功能通过Linux内核实现(IO栈),它位于文件系统以下。在HA系统中可以替代disk array。
三种复制模式(参考MySQL Replication):
- 异步复制协议
- 半同步复制协议
- 同步复制协议
经常和HeartBeat协同工作,搭建HA系统。
HeartBeat
HeartBeat,消息层,作为一个daemon运行,提供集群的基础服务(communication & membership)。它可以让集群间的节点感知对方是否在线,并且互相通信。
Pacemaker
Pacemaker,资源管理层(CRM, Cluster Resource Manager),提供上层应用服务的自动迁移能力。
Pacemaker从Linux-HA 2.0项目中抽出crmd,pengine,tengine,cib等服务,底层支持HeartBeat和OpenAIS两种cluster stack。
Pacemaker的组件:
- stonithd 节点隔离服务。
- lrmd 本地资源管理服务(Local Resouce Management Daemon),不和集群打交道,只负责处理本地资源(脚本),提供统一接口。
- pengine 策略引擎(Policy Engine),根据当前集群状态和配置,计算出下一状态。
- cib 集群信息库(Cluster Information Base),包括所有的集群配置、节点、资源和当前状态,并且负责在所有节点上同步更新这些信息。
- crmd 集群资源管理服务(Cluster Resouce Management Daemon),协调lrdm和pengine,并且负责选主(Designed Coordinator),DC将负责管理整个集群。
corosync/openais
2007年底CRM从HeartBeat项目分离出来,其中一部分成为corosync,是个功能强大的组件,它的功能基本和HeartBeat重合,同样提供membership管理和可靠组通信服务。而openais提供应用层软件的故障恢复、锁、通信等一系列服务,作为corosync的插件运行。
corosync原生支持UDP/IP和InfiniBand网络。
corosync/openais的代码框架类似这样:
- include 对客户端程序提供的服务头文件,比如 include/saAis.h, saLck.h
- lib 对客户端程序提供的链接库实现,比如 lib/lck.c → libSaLck.so
- services 服务器端的具体实现,比如 services/lck.c → service_lck.lcrso
- test 一些客户端程序示例
其中实现的services里,corosync提供最基础的编程框架,包括:
- cfg.c 显示和配置参数的管理工具
- confdb.c 配置数据库
- cpg.c 当集群partition, merge和fault时,提供组群管理(似乎和EVS有点重叠?)
- evs.c 基于Extended Virtual Synchrony实现了一个消息模型,在UDP/IP实现了一套可靠有序的1:N组播消息机制
- pload.c 一个内置的负载测试工具
- votequorum.c 内置的vote-based quorum服务,用于集群选主(majority)
openais提供一些分布式的应用服务,包括:
- amf.c Availability Management Framework
- ckpt.c Checkpointing
- clm.c Cluster Membership
- evt.c Eventing
- lck.c Distributed Locking
- msg.c Messaging
- tmr.c Timer
openais中的服务在 services/openaisserviceenable.c
这个入口注册,然后通过调用 services/aisexec 启动,这个脚本里通过环境变量 COROSYNC_DEFAULT_CONFIG_IFACE
为corosync进程指定要启动的服务。
STONITH
STONITH(Shoot The Other Node In The Head)用于Node Fencing(意思是把某个节点从cluster中屏蔽出来),STONITH服务通常由一个独立的设备实施(比如一个远程电源开关设备,UPS)。
STONITH设备很独立,它对外提供统一的接口,供CRM调用。