搜索
写经验 领红包
 > 美容

es怎么防止脑裂(es如何解决脑裂问题)

导语:ES是如何避免脑裂的?

一、ES中“脑裂”是什么意思

脑裂问题,就是同一个集群中的不同节点,对于集群的状态,有了不一样的理解。

即集群中不同的节点对于master的选择出现了分歧,出现了多个master竞争,导致主分片和副本的识别也发生了分歧,对一些分歧中的分片标识为了坏片。

二、“脑裂”问题可能的成因

1.网络问题:集群间的网络延迟导致一些节点访问不到master,认为master挂掉了从而选举出新的master,并对master上的分片和副本标红,分配新的主分片

2.节点负载:主节点的角色既为master又为data,访问量较大时可能会导致ES停止响应造成大面积延迟,此时其他节点得不到主节点的响应认为主节点挂掉了,会重新选取主节点。

3.内存回收:data节点上的ES进程占用的内存较大,引发JVM的大规模内存回收,造成ES进程失去响应。

三、ES是如何通过quorum机制避免脑裂的?

有一个很关键的配置,discovery.zen.minimum_master_nodes,这个指定的是选举的quorum数量,比如3个节点应该指定为2,5个节点应该指定为3;

如果一个node发现自己跟quorum个节点都建立连接了,就可以发起master选举投票了,此时会投给id序号最大的那个节点,这是Bully算法;同时每个node要监听自己收到多少master投票给自己的;

如果一个node发现quorum个节点都投票给自己了,就确定自己是master;

如果master发现有node离开集群了,而且node数量不足quorum了,此时自己就要放弃掉masetr身份,然后集群里就没有master了,所有人都必须是连接到quorum以上的node,才能再次发起选举,新的master也必须收到quorum以上数量的node的投票,才能确认自己的身份;

这样就可以保证集群内一定需要半数以上的机器投票给自己才能选举出master,而另外部分机器永远小于一半,根据这种机制保证只可能有一个master节点;

本文内容由快快网络小苹整理编辑!