Pacemaker:迁移资源而不在配置中添加“prefer”行

Pacemaker:迁移资源而不在配置中添加“prefer”行

在 2 节点主/从配置中使用起搏器。
为了执行一些测试,我们想要切换主角色节点1节点2,反之亦然。例如,如果当前的 master 是节点1, 正在做

# crm resource migrate r0 node2

确实将资源移动到节点2。那么,理想情况下,

# crm resource migrate r0 node1

会迁移回节点1。问题是迁移在配置中添加一行来执行切换

location cli-prefer-r0 r0 role=Started inf: node2

为了迁移回来,我必须首先删除该行......

有没有更好的方法将主节点从一个节点切换到另一个节点?

答案1

我知道这有点老了;但似乎没有人对此做出满意的回答,并且请求者也从未发布过他的问题是否得到解决的信息。所以这里有一个解释。

当你执行:

# crm resource migrate r0 node2

cli-prefer-*创建了一条规则。

现在,当您想将 r0 移回 node1 时,您不需要这样做:

# crm resource migrate r0 node1

但你执行:

# crm resource unmigrate r0

自动使用umigrateunmove摆脱cli-prefer-*规则。

如果您尝试在集群配置中手动删除此规则,集群中会发生非常糟糕的事情,或者至少在我的情况下发生了糟糕的事情。

答案2

哦,欢乐。

这一切都归结为是否使用migrate带有或不带有目标节点的命令。从当前的 cli 文档通过crm resource help migrate

如果目标节点被遗漏,则通过创建阻止资源在当前节点上运行的约束来迁移资源。对于要创建的此类约束,需要使用力参数。

在过去,这也可以在没有 的情况下完成force,当您运行一个双节点集群时(两个节点永远不会构成一个正确的集群,但我们不要在这里离题),您最终会在pacemakers运行配置中得到一条语句,明确告诉它不要在命令被触发时运行在它运行的节点上migrate,因此起搏器会强制它移到另一个节点上。

如果您运行了 a,crm resource migrate您最终会location cli-...在起搏器配置中看到一条语句。有两种类型的此类语句,可以很容易地检查它们:

crm configure show | grep -e cli-prefer -e cli-ban

对于严肃的业务,上面的命令也应该是 nagios/icinga/无论什么监控检查的一部分,因为从长远来看,这些手动约束永远不应该出现在运行配置中。

如果您再次迁移回另一个节点,您最终会得到另一个这样的语句,将最后一个节点也标记为资源的“不可运行”位置。如果您最终所有节点都以这种方式“迁移”...您的相关资源将无法从任何地方开始,并且您运气不好,这可能是首先提出这个问题的原因。

解决方案是在省略目标节点时始终让一个crm resource migrate命令后面跟着一个crm resource unmigrate命令,以免最终搬起石头砸自己的脚。


但是,如果您始终指定目标节点,则所有这些都无关紧要:

crm resource migrate RESOURCE NODE重新运行/后,起搏器配置中的语句会得到调整,所以不用担心pcs resource move RESOURCE NODEcli-prefer...

因此,您可以根据需要经常运行crm resource migrate/ ,pcs resource move而不会遇到资源无法启动的问题。

要摆脱特定资源的任何这些手动限制,请运行以下命令之一:

crm resource unmigrate RESOURCE
crm resource clear RESOURCE

pcs resource clear RESOURCE

然而,如果您一开始没有创建位置限制,这不会使您的资源神奇地到达其初始主机 - 与此处建议的其他答案不同。

答案3

一种解决方案是cli-prefer在尝试迁移回来之前手动删除这些约束,或者(如果您不关心持续存在的不活动约束)添加一个时间段,例如 5 分钟:

crm resource migrate r0 node2 PT5M

5 分钟后,该规则不再有效(并且r0可能会迁移回来),但它仍然可见。

另请注意,在两节点集群中,您不需要指定另一个节点。

相关内容