什么是脑裂问题?
在分布式系统中有一个经典的网络问题。
当一个集群在运行时,作为master节点的node1的网络突然出现问题,无法和其他节点通信,出现网络隔离情况。那么node1自己会组成一个单节点集群,并更新cluster state;同时作为data节点的node2和node3因为无法和node1通信,则通过选举产生了一个新的master节点node2,也更新了cluster state。那么当node1的网络通信恢复之后,集群无法选择正确的master。
如何解决脑裂问题?
解决方案也很简单:仅在可选举的master-eligible节点数 >= quorum的时候才进行master选举。
quorum(至少为2)=master-eligible数量/2 + 1。
通过discovery.zen.minimum_master_nodes为quorum即可避免脑裂。
主要意思是:如果要选举主节点必须“半数以上”的集群节点同意。