首页 > 解决方案 > 将分离的数据节点重新加入集群

问题描述

我有 3 个弹性搜索节点,它们都充当主数据节点。由于连接问题,一个节点离开集群并将iteslf提升为主节点。现在我有两个集群,第一个有两个节点,另一个有一个节点。由于所有节点都在负载均衡器下,所有节点都从logstash接收请求。如果我重新启动单节点集群并尝试将其添加回原始集群会发生什么?

标签: elasticsearchelastic-stack

解决方案


您遇到的问题称为裂脑问题。

这是它的描述

当一个节点出现故障或由于某种原因节点之间的通信中断时,就会出现问题。如果其中一个从节点无法与主节点通信,它会从仍然连接的那些节点中发起新的主节点的选举。然后,新的主节点将接管前一个主节点的职责。如果旧的主节点重新加入集群或通信恢复,新的主节点会将其降级为从节点,因此不会发生冲突。在大多数情况下,这个过程是无缝的并且“正常工作”。

但是,考虑一个只有两个节点的场景:一个主节点和一个从节点。如果两者之间的通信中断,slave 将被提升为 master,但一旦通信恢复,您最终会得到两个 master 节点。原来的主节点认为从节点掉线了,应该作为从节点重新加入,而新的主节点认为原来的主节点已经掉线,应该作为从节点重新加入。因此,您的集群据说有一个裂脑。

参考链接:https ://qbox.io/blog/split-brain-problem-elasticsearch

为避免此问题,请将其添加到主节点上的 yml 文件中: discovery.zen.minimum_master_nodes: 2

The formulae for this is : Prevent the "split brain" by configuring the 

majority of nodes (total number of master-eligible nodes / 2 + 1)

推荐阅读