两个节点的集群的Discovery.zen.minimum_master_nodes值

cur*_*us1 3 elasticsearch

我有两个专用于ES(2.2.0)的Windows服务器(Windows Server 2012R2,每个服务器上有128GB内存)。如果我在每台服务器上都有一个节点,并且这两个节点组成一个集群。什么是正确的价值

discovery.zen.minimum_master_nodes
Run Code Online (Sandbox Code Playgroud)

我在elasticsearch.yml中阅读了此一般规则:

通过配置大多数节点(总节点数/ 2 + 1)来防止“分裂大脑”:

我看到了这样的线程:

对于群集中具有两个节点的专用计算机,ES_HEAP_SIZE的正确值

有一个回答说:

如Elasticsearch飞行前检查清单中所述,您可以在N> 2个节点的集群上将Discovery.zen.minimum_master_nodes设置为至少(N / 2)+1。

请注意“ N > 2”。在我的情况下,什么是正确的值?

Val*_*Val 5

N 是可以作为群集一部分的ES节点(不是物理机,而是ES进程)的数量。

在您的情况下,在两台计算机上有一个节点,N = 2(请注意,此处为4 ),因此该公式N/2 + 1得出2,这意味着如果您想防止出现脑裂情况,则您的两个节点都必须有资格作为主节点。

如果将该值设置为1(这是默认值!),并且遇到网络问题,并且两个节点都可以在短暂的时间内看到对方,则每个节点都将认为它是群集中的一个,并且两个节点都将自己选举为主。您最终遇到两个主控者的情况,这不是一件好事。而如果将该值设置为2并遇到网络问题,则当前的主节点将保持选中状态,而第二个节点将永远不会决定将自己选为新的主节点。无论何时备份网络,第二个节点都将重新加入群集并继续为请求服务。

理想的拓扑结构是具有3个专用的主节点(即with master: true和data:false)并将其discovery.zen.minimum_master_nodes设置为2。这样,无论群集中数据节点的数量如何,您都无需更改设置。

因此,N > 2约束确实应该是N >= 2,但是我想这是暗含的,因为否则,您将为脑裂情况创造沃土。