Heartbeat 是一个基于Linux开源的高可用集群系统。主要包括心跳服务和资源接管两个高可用集群组件。心跳监测服务可以通过网络链路和串口进行,而且支持冗余链路, 它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。本文简要描述了heartbeat v2集群架构组件及其相关概念,供大家参考。
一、高可用集群的特点
高可用服务
通常使用集群方式实现,这也是集群的最大作用和体现。
其终极目标是确保服务实时可用,不会因为任意的软硬件故障导致服务出现终止和不可用的情形。
度量标准
系统的可靠性(reliability)和可维护性(maintainability)来度量。
工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均修复时间(MTTR)来度量系统的可维护性。
计算公式,HA=MTTF/(MTTF+MTTR)*100%
99% 全年停机时间不超过4天
99.9% 全年停机时间不超过10小时
99.99% 全年停机时间不超过1小时
99.999% 全年停机时间不超过6分钟
集群节点
集群软件必须包括一种机制来定义哪些系统的可用作集群节点(定义节点,2节点或以上)。
所有位于集群中的主机都称为节点。
集群服务与资源
哪些服务或应用程序可以在节点之间进行故障转移,并互连可以在节点间传送通信。
服务通常包括多种资源,多种资源组成某种服务。
如mysql高可用服务,则vip,mysqld,共享或镜像磁盘等则为该服务所需要的资源。
对集群服务的管理,实际上是对资源的管理。
资源隔离与脑裂
由于软硬件故障导致节点宕机发生资源争用,即出现故障节点或正常并存的情形。
在故障的节点控制相同的集群资源的情况下,实施资源隔离,防止脑裂发生(Fence机制,STONITH等)。
集群状态监控
通过集群管理和监控工具以及预定义的脚本来配置常见的服务或应用程序,监控,故障转移等。
最为大家所熟知的如心跳,主要用于在集群环境中各节点之间相互感知对方的存在。
可以基于串口、多播、广播和组播通信机制。一旦心跳失败,则会发生相应的资源转移,集群重构等动作。
二、HeartBeat组件
Heartbeat 是一个基于Linux开源的高可用集群系统。主要包括心跳服务和资源接管两个高可用集群组件,其重大的版本变更主要分为三个阶段。
1、Heartbeat 1.x组件
Heartbeat1.x允许集群节点和资源通过/etc/ha.d目录下面的两个文件来配置
ha.cf:定义集群节点,失效检测和切换时间间隔,集群时间日志机制和节点Fence方法
haresources:
定义集群资源组,每一行定义可以一起进行失效切换的一个默认的节点和一组资源,资源包括IP地址,文件系统,服务或者应用
2、Heartbeat 2.x组件
Heartbeat 2.0 在基于Heartbeat1.x 基础上配置引入了模块结构的配置方法,集群资源管理器(Cluster Rescource Manager-CRM).
CRM模型可以支持最多16个节点,这个模型使用基于XML的集群信息(Cluster Information Base-CIB)配置。
Heartbeat 2.x官方最后一个STABLE release 2.x 版本是2.1.4。
CIB文件(/var/lib/heartbeat/crm/cib.xml)会在各个节点间自动复制,它定义了下面的对象和动作:
*集群节点
*集群资源,包括属性,优先级,组和依赖性
*日志,监控,仲裁和fence标准
*当服务失败或者其中设定的标准满足时,需要执行的动作
Heartbeat 2.x组件图
消息传递和基础设施层(Messaging and Infrastructure Layer)
初级或第一层是消息传递/基础设施层,也被称为心跳层。#Author:Leshami
此层包含了发送含有“我还活着”信号的心跳信息,以及其他信息的组件。
Heartbeat程序驻留在消息/基础设施层。#Blog:
成员层(Membership Layer)
成员层从底层即心跳层获取信息,负责计算集群节点的最大完全连接设置并同步到节点上的所有成员。
该层负责集群成员间的一致性,提供集群拓扑结构给上一层组件。
资源分配层(Resource Allocation Layer)
第三层是资源分配层。这一层是最复杂的,且由以下部分组成:
集群资源管理器(Cluster Resource Manager)
在资源分配层的每一个动作由集群资源管理器管理。
资源分配层的任意组件,或其他更高层的任何组件需要通信,则由本地集群资源管理器管理。