为什么es集群至少需要三个节点
elasticsearch集群
graph LR; A(Master Node) --- B(Data Node); A --- C(Data Node); B --- C;
Master: 在Elasticsearch中Master仅仅负责维护集群的状态
- 创建或删除索引
- 跟踪哪些节点是集群的一部分
- 决定将哪些碎片分配给哪个节点
- 等集群范围的操作
上面的一些集群信息, 是由Master节点进行维护, 但是 Master也会把节点信息, 同步给其他节点, 但是只有master节点可以修改.
为什么要至少三个节点
首先查看 Elasticsearch 的配置文件, 如下:
Zen Discovery 官方介绍
1 | # 传递初始主机列表,以便在启动新节点时执行发现 |
discovery.zen.minimum_master_nodes: 2
其中 minimum_master_nodes 配置是为了防止脑裂
假设 Elasticsearch 有两个节点
graph LR; A(Master Node) --- B(Data Node);
graph LR; A(Master Node) -.X.- B(Data Node);
discovery.zen.minimum_master_nodes: 1
此时出现网络波动, 导致 A—B 之间短暂断开连接, 根据选举规则, B将自己选举为 Master, 当网络波动结束, 就会出现两个Master的情况.
graph LR; A(Master Node 宕机) --- B(Data Node);
discovery.zen.minimum_master_nodes: 2
Master 出现故障, 则 B 将永远不可能将自己选择为 Master
Elasticsearch 有三个节点
三节点配置: discovery.zen.minimum_master_nodes: 2
graph LR; A(Master Node) -.X.- B(Data Node); A -.X.- C(Data Node); B --- C;
出现网络波动 A 节点 和 别的节点短暂断开连接
graph LR; A(Master Node -> Data Node) -.X.- B(Data Node -> Master Node); A -.X.- C(Data Node); B --- C;
A节点降级, B和C 进行选举, 此处模拟选举B为 Master Node
graph LR; A(Data Node) --- B(Master Node); A --- C(Data Node); B --- C;
网络恢复后的节点状况.
总结
以上可以看出, 通过配置 minimum_master_nodes 来防止出现脑裂
同时在生产过程中, 为了尽量保持集群高可用, 至少需要三台机器搭建集群
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 程序员小航!
评论