自从使用 CentOS 7 以来,我们从常规心跳设置切换到 pacemker。
我们主要拥有在一个节点上处于活动状态的 IP 资源,如果发生故障转移,则切换到第二个节点。此外,我们还会在发生故障转移时执行一些脚本。没什么特别的。
为了使资源始终在主节点上启动,我使用
pcs constraint location Cluster_IP prefers server1=master-server
我也用
pcs resource defaults resource-stickiness=INFINITY
以防止故障转移后资源移回。
如果主机发生故障(例如硬件故障),这对我来说很好。
因为如果故障转移需要一些时间,这对我来说不是问题,所以我想在出现短暂的脑裂的情况下实现某种延迟。
在执行任何操作之前,从属服务器应等待约 2 分钟,然后再接管,以防主服务器在这约 2 分钟内再次可访问。
我想知道,最好的方法是什么?
答案1
我从未将 Corosync 中的令牌超时设置为 10 秒以上的任何值,但您可以尝试增加/设置token
您的值corosync.conf
到120000
(120 秒,以毫秒为单位)。应该在您的;部分token
中定义以了解更多详细信息。totem{}
corosync.conf
man corosync.conf
这应该可以防止 Corosync 在网络崩溃时宣布节点在 120 秒内死亡。
答案2
您可以使用 更改资源的监控间隔,op monitor interval=Ns
其中N
是秒数,然后将migration-threshold
资源上的 设置为2
。请记住,如果设置为 ,120s
您可能会看到总延迟为 120-240 秒,具体取决于监控间隔内初始故障发生的时间。
还有其他注意事项,即应用的失败计数器migration-threshold
不会在成功时重置。要做到这一点,您还需要设置failure-timeout
或手动干预。
使用op monitor interval=120s
、migration-threshold=2
和failure-timeout=121s
您的resource-stickiness
设置,您需要进行测试以确保它提供了您期望的功能以及原始主服务器恢复时故障计数器的行为方式。它可能需要手动干预,但我对此并不 100% 确定