discovery.zen.minimum_master_nodes对集群的稳定性相当重要,防止脑裂的出现。node
脑裂:算法
若是网络的故障致使一个集群被划分红两片,每片都有多个node,以及一个master。由于master是维护集群状态,以及shard的分配。若是出现了两个master,可能致使数据破损。网络
discovery.zen.minimum_master_nodes的做用是只有足够的master候选节点时,才能够选举出一个master。该参数必须设置为集群中master候选节点的quorum数量。spa
quorum的算法=master候选节点数量/2+1ast
举例:class
一、若是有10个节点,都是data node,也是master的候选节点。则quorum=10/2+1=6集群
二、若是有3个master候选节点,100个数据节点。则quorum=3/2+1=2配置
三、若是有2个节点,都是data node,也是master的候选节点。则quorum=2/2+1=2(有问题)im
若是其中一个节点挂了,那么master的候选节点只有一个,没法知足quorum数量。即没法选举出master。此时只能将quorum设置成1,可是设置为1有可能出现脑裂。总结
总结:通常es集群的节点至少要有3个,quorum设置为2
使用例2的场景说明quorum是如何防止脑裂
假设集群中3个节点有一个节点与其余节点没法通讯,
一、若是master是单独的节点,另外2个节点是master候选节点。那么此时单独的master节点由于没有指定数量的候选master node在本身当前所在的集群里。所以会取消当前的master角色,尝试从新选举(没法选举成功)
另一个网络区域内的node由于没法链接到master,就会发起从新选举,有两个候选节点,知足quorum,成功选举出一个master。
二、若是master和一个node在一个网络区域(A),另外一个node单独在一个网络区域(B)。
B区域只有一个node,由于连不上master,会尝试发起选举,但不知足quorum,没法选举
A区域master继续工做,当前网络也知足quorum,不发起选举。
discovery.zen.minimum_master_nodes除了在配置文件设置,也能够动态设置
PUT /_cluster/settings { "persistent":{ "discovery.zen.minimum_master_nodes":2 } }