1. elasticsearch集群脑裂现象探讨
我们现在有3台服务器,当主节点服务器1宕机后,就会选举出新的master,如下图,选出服务器2为主节点。
当服务器1恢复后,服务器1有可能不会成为slave,不会加入到原先的集群里,为什么呢?这是因为当服务器满足最小投票人数(也就是1)时,就会成为master,服务器1自己的票投给了自己,那么服务器1就会成为master,这时,就有两个集群了。这就是脑裂现象。
对于不完整的master服务器1来说,此时它里面的数据是不完整的,它是不完整的集群。
那么,我们怎么避免脑裂现象呢?
master主节点要经过多个master节点共同选举后才能成为新的主节点。就跟班级里选班长一样,并不是你1个人能决定的,需要班里半数以上的人决定。 解决实现原理:半数以上的节点同意选举,节点方可成为新的master。
可通过设置参数 discovery.zen.minimum_master_nodes=(N/2)+1
N为集群的中master节点的数量,也就是那些 node.master=true 设置的那些服务器节点总数。
在最新版7.x中,minimum_master_node 这个参数已经被移除了,这一块内容完全由es自身去管理,这样就避免了脑裂的问题,选举也会非常快。