群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。
由于无法了解 SSH 可能对其他系统问题如何做出反应。出于此原因,生产环境不支持外部 SSH/STONITH 代理(例如 stonith:external/ssh
)。如果您仍要使用此类代理进行测试,请安装 libglue-devel
包。
要(从软件端)获取所有当前可用的 STONITH 设备列表,请使用 crm ra list stonith
命令。如果您找不到收藏的代理,请安装 -devel
包。有关 STONITH 设备和资源代理的详细信息,请参见第 10 章 “屏障和 STONITH”。
目前尚无有关写入 STONITH 代理的文档。如果要写入新的 STONITH 代理,请参见 cluster-glue
包的源中提供的示例。
所有 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 ...
实施其他外壳功能,并用不同名称保存文件。
可在 https://github.com/ClusterLabs/resource-agents/blob/master/doc/dev-guides/ra-dev-guide.asc 中找到有关写入 OCF 资源代理的更多细节。在第 1 章 “产品概述”中可以找到有关若干概念的特殊信息。
根据 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 |
资源在主节点中,但已失败。资源将再次被降级、停止再重启动(然后也可能升级)。 |
软 |
其他 |
不适用 |
自定义错误代码。 |
软 |