1.4 体系结构

本部分简要地概述了 High Availability Extension 体系结构。它提供了有关体系结构组件的信息,并描述了这些组件是如何协同工作的。

1.4.1 体系结构层

High Availability Extension 具有分层的体系结构。图 1-6说明了不同的层及其相关的组件。

图 1-6 体系结构

消息交换和基础结构层

主层或第一层是消息交换/基础结构层,也称为 OpenAIS 层。此层包含了发送含有我在线信号的消息及其他信息的组件。High Availability Extension 的程序就位于此消息交换/基础结构层。

资源分配层

下一层是资源分配层。此层最复杂,它包含以下组件:

群集资源管理器 (CRM)

在资源分配层中执行的每个操作都要经过群集资源管理器。如果资源分配层的其他组件(或更高层中的组件)需要通讯,则它们通过本地 CRM 进行。

在每个节点上,CRM 维护,包含所有群集选项、节点、资源及其关系和当前状态的定义。如果选择群集中的 CRM 为指定协调程序 (DC),则意味着它具有主 CIB。群集中的所有其他 CIB 是此主 CIB 的复本。对 CIB 的常规读写操作通过主 CIB 进行排序。DC 是群集中唯一可以决定需要在整个群集执行更改(例如节点屏障或资源移动)的实体。

群集信息库 (CIB)

群集信息库是整个群集配置和当前状态在内存中的 XML 表示。它包含所有群集选项、节点、资源、约束及其之间的关系的定义。CIB 还将更新同步到所有群集节点。群集中有一个主 CIB,由 DC 维护。所有其他节点包含一个 CIB 复本。

策略引擎 (PE)

每当指定协调程序需要进行整个群集的更改(对新 CIB 做出反应),策略引擎就会根据群集的当前状态和配置计算群集的下一个状态。PE 还生成一个转换图,包含用于达到下一个群集状态的(资源)操作和依赖性的列表。PE 在每个节点上都运行以加速 DC 故障转移。

本地资源管理器 (LRM)

LRM 代表 CRM 调用本地资源代理(请参见资源层)。因此它可以执行启动/停止/监视操作并将结果报告给 CRM。它还隐藏资源代理支持的脚本标准(OCF、LSB、Heartbeat V1)之间的区别。LRM 是其本地节点上所有资源相关信息的权威来源。

资源层

最高层是资源层。资源层包括一个或多个资源代理 (RA)。资源代理是为启动、停止和监视某种服务(资源)而编写的程序,通常是壳层脚本。资源代理仅由 LRM 调用。第三方可将他们自己的代理放在文件系统中定义的位置,这样就为各自的软件提供了现成群集集成。

1.4.2 处理流程

使用 Pacemaker 作为 CRM。CRM 作为守护程序执行 (crmd),它在每个群集节点上都有一个实例。Pacemaker 通过将某个 crmd 实例选为主实例,从而集中了所有的群集决策制定。如果选定的 crmd 过程(或它所在的节点)出现故障,则将建立一个新的过程。

在每个节点上保留了一个 CIB,它反映了群集的配置和群集中所有资源的当前状态。CIB 的内容会在整个群集的同步过程中自动保留下来。

群集中执行的许多操作都将导致整个群集的更改。这些操作包括添加或删除群集资源、更改资源约束等等。了解执行这样的操作时群集中会发生的状况是很重要的。

例如,假设您要添加一个群集 IP 地址资源。为此,您可以使用一种命令行工具或 GUI 修改 CIB。您不必在 DC 上执行此操作,可以使用群集中任何节点上的任何工具,此操作会被传送到 DC 上。然后 DC 将把此 CIB 更改复制到所有群集节点。

根据 CIB 中的信息,PE 便计算群集的理想状态及如何达到此状态,并将指令列表传递给 DC。DC 通过消息交换/基础结构层发出命令,其他节点上的 crmd 同级将收到此命令。每个 crmd 使用它的 LRM(作为 lrmd 实现)执行资源修改。lrmd 不是群集感知的,它直接与资源代理(脚本)交互。

所有同级节点将操作的结果报告给 DC。一旦 DC 做出所有必需操作已在群集中成功执行的结论,群集将返回至空闲状态并等待进一步事件。如果有操作未按计划执行,则会再次调用 PE,CIB 中将记录新信息。

在某些情况下,可能需要关闭节点以保护共享数据或完成资源恢复。为此,Pacemaker 附带了一个屏障子系统,stonithd。STONITH 是 Shoot The Other Node In The Head(关闭其他节点)的首字母缩写,通常通过一个远程电源开关实施。在 Pacemaker 中将 STONITH 设备构造成资源(并在 CIB 中配置)以便对它们监视故障;然而,stonithd 负责了解 STONITH 拓扑,这样它的客户端只需请求屏障节点,余下的工作由它来完成。