ElasticSearch-脑裂
2025-01-22 08:19:30 479 字
This post is also available in English and alternative languages.
ElasticSearch版本:6.5.0(点击跳转官方文档)
假设 集群中有十个节点,其中一个为master节点。
集群网络发生异常,三个节点(DataNode-1、DataNode-4、DataNode-7)与原集群失联,但三个节点之间还能联络。
三个节点联络不上master节点,认为对方出现了故障,于是开始选举Master,导致一个集群被分割成了两个独立的集群。
至此,集群中出现了两个Master节点,Master主宰集群状态维护、分片分配,出现两个Master节点,会导致数据被破坏,这种情况称为脑裂。
1. 如何避免
- 集群尽量部署在同一内网环境,各个节点通讯可靠
- master节点与data节点分离,保证master节点响应可靠性。
- 检查、配置 discovery.zen.minimum_master_nodes。
2. discovery.zen.minimum_master_nodes
最小master候选节点数。配置最小master候选节点数,该参数对集群稳定、防止脑裂很重要。
ElasticSearch 进行选举时,如果没有足够master候选节点时,就不要进行master节点选举。等master候选节点数量足够了才进行选举。
数量计算:(master候选节点数 / 2)+ 1。
例如:
1 | 集群中有10个节点 |
3. 配置
3.1. elasticsearch.yml
1 | discovery.zen.minimum_master_nodes: 2 |
3.2. dsl配置
minimum_master_nodes 配置允许通过API调用,动态修改配置。
这是一个永久配置,会优先生效;当 添加、删除 master 节点时,也需要修改该配置。
1 | PUT /_cluster/settings |