在 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
自动使用umigrate
或unmove
摆脱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 NODE
。cli-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
可能会迁移回来),但它仍然可见。
另请注意,在两节点集群中,您不需要指定另一个节点。