9 添加或修改资源代理 #
需由群集管理的所有任务都必须可用作资源。在此处需要考虑两个主要组:资源代理和 STONITH 代理。对于这两个类别,您都可以添加自己的代理,根据需要扩展群集的功能。
9.1 STONITH 代理 #
群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。
由于无法了解 SSH 可能对其他系统问题如何做出反应。出于此原因,生产环境不支持外部 SSH/STONITH 代理(例如 stonith:external/ssh
)。如果您仍要使用此类代理进行测试,请安装
libglue-devel 软件包。
要(从软件端)获取所有当前可用的 STONITH 设备列表,请使用 crm ra list stonith
命令。如果您找不到收藏的代理,请安装
-devel 软件包中。有关 STONITH 设备和资源代理的详细信息,请参见第 10 章 “屏障和 STONITH”。
目前尚无有关写入 STONITH 代理的文档。如果要编写新的 STONITH 代理,请参见以下软件包的源代码中提供的示例: cluster-glue 软件包。
9.2 编写 OCF 资源代理 #
所有 OCF 资源代理 (RA) 都可在 /usr/lib/ocf/resource.d/
中找到,请参见第 6.3.2 节 “支持的资源代理类别”了解更多信息。每个资源代理都必须支持以下操作才能进行控制:
start
启动或启用资源
stop
停止或禁用资源
status
返回资源状态
monitor
与
status
类似,但还会检查是否存在意外状态validate
验证资源配置
meta-data
返回有关资源代理的 XML 格式的信息
创建 OCF RA 的常规过程大概如下:
将文件
/usr/lib/ocf/resource.d/pacemaker/Dummy
装载为模板。为每个新资源代理创建新的子目录,以避免发生命名冲突。例如,如果您的一个资源组
kitchen
具有资源coffee_machine
,可将此资源添加到目录/usr/lib/ocf/resource.d/kitchen/
。要访问此资源代理,请执行命令crm
:root #
crm
configure primitive coffee_1 ocf:coffee_machine:kitchen ...实施其他外壳功能,并用不同名称保存文件。
可在 http://www.linux-ha.org/wiki/Resource_Agents 中找到有关写入 OCF 资源代理的更多细节。在第 1 章 “产品概述”中可以找到有关若干概念的特殊信息。
9.3 OCF 返回代码和故障恢复 #
根据 OCF 规范,有一些关于操作必须返回的退出代码的严格定义。群集会始终检查返回代码与预期结果是否相符。如果结果与预期值不匹配,则将操作视为失败,并将启动恢复操作。有三种类型的故障恢复:
恢复类型 |
说明 |
群集执行的操作 |
---|---|---|
软 |
发生临时错误。 |
重启动资源或将它移到新位置。 |
硬 |
发生非临时错误。错误可能特定于当前节点。 |
将资源移到别处,避免在当前节点上重试该资源。 |
致命 |
发生所有群集节点共有的非临时错误。这表示指定了错误配置。 |
停止资源,避免在任何群集节点上启动该资源。 |
假定某个操作被视为已失败,下表概括了不同的 OCF 返回代码。此外,该表还显示了收到相应的错误代码时群集将启动的恢复类型。
OCF 返回代码 |
OCF 别名 |
说明 |
恢复类型 |
---|---|---|---|
0 |
OCF_SUCCESS |
成功。命令成功完成。这是所有启动、停止、升级和降级命令的所需结果。 |
软 |
1 |
OCF_ERR_GENERIC |
通用“出现问题”错误代码。 |
软 |
2 |
OCF_ERR_ARGS |
资源配置在此计算机上无效(例如,它引用了在节点上找不到的位置/工具)。 |
硬 |
3 |
OCF_ERR_UNIMPLEMENTED |
请求的操作未实现。 |
硬 |
4 |
OCF_ERR_PERM |
资源代理没有足够的特权,不能完成此任务。 |
硬 |
5 |
OCF_ERR_INSTALLED |
资源所需的工具未安装在此计算机上。 |
硬 |
6 |
OCF_ERR_CONFIGURED |
资源配置无效(例如,缺少必需的参数)。 |
致命 |
7 |
OCF_NOT_RUNNING |
资源未运行。群集将不会尝试停止为任何操作返回此代码的资源。
此 OCF 返回代码可能需要或不需要资源恢复,这取决于所需的资源状态。如果出现意外,则执行 |
无 |
8 |
OCF_RUNNING_MASTER |
资源正在主节点中运行。 |
软 |
9 |
OCF_FAILED_MASTER |
资源在主节点中,但已失败。资源将再次被降级、停止再重启动(然后也可能升级)。 |
软 |
其他 |
无 |
自定义错误代码。 |
软 |