我在 RHEL 6.9 上有一个 2 节点集群。一切都已配置,除了我在通过创建到服务(在/etc/init.d/myApplication
)中创建的 shell 脚本启动的应用程序时遇到困难,我将调用该服务“我的应用程序”。从该应用程序中,我做了一个pcs resource create myApp lsb:myApp op monitor interval=30s op start on-fail=standby
.我刚开始使用这套软件,但它是为了工作。我需要的是这个应用程序同时在两个节点上启动,因为它必须手动启动,因此如果第一个节点发生故障,如果它在被动节点上尚未处于活动状态,则需要干预。
我还有另外两项服务:
-VirtIP (ocf:heartbeat:IPaddr2)
为应用程序服务器提供服务IP
-Cron (lsb:crond)
同步应用程序文件(我们不使用共享存储)
我通过托管到 myApp 将 VirtIP 和 Cron 作为依赖项。
我尝试过主/从以及克隆,但我一定错过了有关其配置的一些内容。如果我使应用程序脱机,pacemaker 不会检测到服务已关闭并pcs status
输出 myApp 仍在节点(或节点,具体取决于我的配置)上运行。我有时还会遇到这样的问题:运行应用程序的服务被被动节点上的起搏器停止。
我需要以哪种方式进行配置?我已经阅读了 RHEL 文档,但仍然陷入困境。如果 myApp 服务出现故障,如何让起搏器启动故障转移?我不知道为什么在某些情况下它没有检测到服务已停止。
编辑:因此,出于测试目的,我删除了启动/重新启动的密码要求,并且服务按预期正常启动/重新启动,并且托管依赖资源按预期停止/启动。但停止 myApp 服务并不反映为已停止的资源,而只是停留在已启动的节点 1 上。同样,通过将节点 1 置于备用状态来模拟故障转移只会停止节点 1 上的所有资源。
答案1
我的猜测是您的 shell/init 脚本没有返回正确的返回代码。为了使起搏器能够与初始化脚本很好地配合,初始化脚本需要完全兼容 LSB。通过此处的兼容性检查运行初始化脚本:http://www.linux-ha.org/wiki/LSB_Resource_Agents
我怀疑你的脚本在不应该返回状态时返回了 0。
答案2
我遇到了这个问题 - 电脑无法识别资源何时不再处于良好状态。从这个文档看来,有一种方法可以配置它来检查“已启动”和“已停止”状态:
当 Pacemaker 第一次启动资源时,它会运行一次性监视操作(称为探测器),以确保资源在其应该在的位置运行,而不是在不应该在的位置运行。 (此行为可能会受到资源发现位置约束属性的影响。)除了那些初始探测之外,Pacemaker 不会(默认情况下)检查资源是否继续保持健康状态。 您必须显式配置监视器操作才能执行这些检查。
以下是我配置资源以进行持续监控的方法:
pcs resource update CoreVIP op monitor interval=60s OCF_CHECK_LEVEL=5 role=Started
pcs resource update CoreVIP op monitor interval=61s OCF_CHECK_LEVEL=5 role=Stopped