在每一个节点上,集群资源管理器维护集群信息库,或CIB(见下文集群信息库)。
集群中的一个节点会被选为指定协调器(DC),这意味着它具有主CIB。集群中的所有其他CIB是主CIB的副本。
对CIB正常的读写操作都通过主CIB序列化。
在集群中,DC可以决定一个群集范围的变化需要执行的相关变更,如隔离一个节点或移动资源等。
集群信息库(Cluster Information Base)
集群信息库或CIB是整个集群配置和状态,包括节点成员,资源约束等,是一个驻留内存的XML文件。
在集群中,有一个由DC维护的主CIB,所有其他节点包含一个CIB副本。
如果管理员想管理集群,则可以使用cibadmin命令行工具或heartbeat GUI工具。
heartbeat GUI工具可以用于从任何机器到集群的连接。
cibadmin命令必须在集群节点上使用,并且不限制于只能在DC节点。
策略引擎和转换引擎(Policy Engine (PE) and Transition Engine (TE))
每当指定协调器需要进行集群范围的变化(重构新的CIB),策略引擎用于计算集群的下一个状态和(资源)来实现它需要操作的列表。
由策略引擎计算出的命令然后由转换引擎执行。
DC将向集群资源管理器发送相关信息,然后用自己的本地资源管理器(LRM),进行必要的资源操作。
PE和TE必须成对运行在DC节点上。
本地资源管理器LRM(Local Resource Manager)
本地资源管理器调用本地资源代理代表CRM。因此它可以执行启动/停止/监视操作并将结果报告给CRM。
LRM保留的是本地节点上所有资源相关的信息。
资源层(Resource Layer)
第四和最高层是资源层。资源层包括一个或多个资源代理(RA)。
资源代理是一个程序,通常是一个shell脚本,包含启动,停止和监视某种服务(资源)。
最常见的资源代理是LSB初始化脚本。然而,HeartBeat也支持更加灵活和强大的开放式集群架构资源代理API。
提供心跳的代理被写入OCF规范。资源代理只由本地资源管理器调用。
第三方可以在文件系统中定义自己的代理,整合自己的软件到集群中。
3、Heartbeat 3.x组件
在v3版本后,整个heartbeat项目进行了功能拆分,分为不同的子项目来分别进行开发。但是HA实现原理与Heartbeat2.x基本相同,配置也基本一致。在v3版本后,被拆分为heartbeat、pacemaker(心脏起博器)、cluster-glue(集群的贴合器),架构分离开来了,可以结合其它的组件工作。
Heartbeat 3官方正式发布的首个版本是3.0.2。原来之前的CRM管理由pacemaker来替代,底层message layer依旧可以使用heartbeat v3也可以使用corosync等。 其具体细节本文不做介绍,可单独参考clusterlabs.org。
三、heartbeat集群处理流程
在群集中执行的任意行为将导致整个群集的更改。这些操作包括像添加或删除集群资源或改变资源的限制。当执行这样操作的时候,重要的是要了解集群中会发生什么。
例如,假设需要添加一个集群IP地址资源。要做到这一点,使用的cibadmin命令行工具或Heartbeat GUI工具来修改主CIB。它不要求使用cibadmin命令或在指定协调器上的GUI工具。你可以在集群中的任何节点上使用任何工具,本地的CIB将重放的请求的更改到指定协调器。然后指定协调会复制CIB变化到所有群集节点,并启动转换过程。
在策略引擎和过渡引擎的帮助下,指定协调器获得的一系列需要在集群中完成的步骤,有可能在多个节点上的步骤。指定协调器通过消息层向其他集群资源管理器发送命令。
如果需要的话,其他的群集资源管理使用它们的本地资源管理器来执行资源的修改并返回其结果给指定协调器。一旦指定协调的上的TE推断出在集群中所有必须的操作已成功完成,集群将回到空闲状态并等待进一步事件。
如果任何操作并没有按计划进行,该策略引擎再次调用记录在CIB中的新信息。
当一个服务或节点死亡,同样的事情会发生。指定协调器会被集群一致成员服务(在一个节点死亡)或本地资源管理通知(如遇失败的监视器操作)。指定协调器需要确定将要变更到一个新的群集状态的行为。新的群集状态将由一个新的CIB表示。