我有基于 Pacemaker 和 corosync 的集群。集群节点位于多个数据中心。并且某些节点之间的 ping 延迟高达 450 毫秒。有时这些延迟会导致脑裂。
我找到了max_network_delay
corosync 的选项。
文档说:
[心跳机制] 此常数以毫秒为单位指定您的网络将一个数据包从一台机器传输到另一台机器所需的近似延迟。此值由系统工程师设置,如果不确定,请不要更改,因为这会影响使用心跳的故障检测机制。(默认值:50ms)
另外,还有警告:
在没有 corosync 社区指导的情况下,不建议覆盖此值。
但我没有找到有关使用此选项的任何信息。
有人能帮助我吗?我应该使用此选项吗?或者也许还有其他选项可以帮助我?
答案1
我应该使用这个选项吗,或者也许还有其他选项可以帮助我?
由于问题带有 Pacemaker 标签,我假设您使用 Corosync 进行 Pacemaker 通信。如果是这种情况,我建议使用 Pacemaker 的 booth 插件。管理地理上分离的 Pacemaker 集群之间的服务故障转移是 booth 的主要用途。 https://github.com/ClusterLabs/booth
这将是一次相当大的设计变更,因为您不再拥有一个集群,而是每个不同位置都有一个集群。单节点集群可以工作,但不建议这样做(您不能相信节点可以自我隔离)。
答案2
我通过 corosync/pacemaker 社区的邮件得到了答案:
某些节点之间的 ping 延迟高达 450 毫秒。有时这些延迟会导致脑裂。
是的,相当多。将 token 超时时间延长,如下所示:
totem {
...
token: 5000
...
}
将有助于
我找到了 corosync 的 max_network_delay 选项。
此选项不执行任何操作,直到heartbeat_failures_allowed已设置。我不知道您是否已启用它,但我建议不要启用它。
问候,Honza