概述
一个正常es集群中只有一个主节点(Master),主节点负责管理整个集群。
如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。
集群的所有节点都会选择同一个节点作为主节点。
脑裂问题的出现就是因为从节点在选择主节点上出现分歧导致一个集群出现多个主节点从而使集群分裂,使得集群处于异常状态
。
脑裂产生的原因
1 网络原因:网络延迟
一般es集群会在内网部署,也可能在外网部署,比如阿里云
内网一般不会出现此问题,外网的网络出现问题的可能性大些。
2 节点负载
主节点的角色既为master又为data。数据访问量较大时,可能会导致Master节点停止响应(假死状态)
#是不是有资格主节点
node.master : true
#是否存储数据
node.data: true
3 JVM内存回收
当Master节点设置的VM内存较小时,引发JVM的大规模内存回收,造成ES进程失去响应。
避免脑裂
-
网络原因
discovery.zen.ping.timeout超时时间配置大一点
。默认是3S -
节点负载:角色分离策略
候选主节点配置为node.master: true node.data: false
数据节点配置为
node.master: false node.data: true
-
JVM内存回收
修改config/jvm.options文件的-Xms和-Xmx为服务器的内存一半。