Elasticsearch配置中防止脑裂的配置
Master和DataNode未分离,导致集群不稳定
在ES集群中,节点分为Master、DataNode、Client等几种角色,任何一个节点都可以同时具备以上所有角色,其中比较重要的角色为Master和DataNode:
1. Master主要管理集群信息、primary分片和replica分片信息、维护index信息。
2. DataNode用来存储数据,维护倒排索引,提供数据检索等。
可以看到元信息都在Master上面,如果Master挂掉了,该Master含有的所有Index都无法访问,文档中说,为了保证Master稳定,需要将Master和Node分离。而构建master集群可能会产生一种叫做脑裂的问题,为了防止脑裂,需要设置最小master的节点数为eligible_master_number/2 + 1
脑裂的概念:
如果有两个Master候选节点,并设置最小Master节点数为1,则当网络抖动或偶然断开时,两个Master都会认为另一个Master挂掉了,它们都被选举为主Master,则此时集群中存在两个主Master,即物理上一个集群变成了逻辑上的两个集群,而当其中一个Master再次挂掉时,即便它恢复后回到了原有的集群,在它作为主Master期间写入的数据都会丢失,因为它上面维护了Index信息。
根据以上理论,可以对集群做了如下更改,额外选取三个独立的机器作为Master节点,修改elasticsearch.yml配置
|
1
2
3
|
node.master = truenode.data = falsediscovery.zen.minimum_master_nodes = 2 |
修改其他节点配置,将其设置为DataNode,最后依次重启
|
1
2
|
node.master = falsenode.data = true |
浙公网安备 33010602011771号