首页 > 其他分享 >为什么es集群至少需要三个节点

为什么es集群至少需要三个节点

时间:2022-10-30 10:33:48浏览次数:92  
标签:Node zen --- Master 集群 Data 节点 es


elasticsearch集群

graph LR;
A(Master Node) --- B(Data Node);
A --- C(Data Node);
B --- C;

Master: 在Elasticsearch中Master仅仅负责维护集群的状态

  1. 创建或删除索引
  2. 跟踪哪些节点是集群的一部分
  3. 决定将哪些碎片分配给哪个节点
  4. 等集群范围的操作

上面的一些集群信息, 是由Master节点进行维护, 但是 Master也会把节点信息, 同步给其他节点, 但是只有master节点可以修改.

​​​点击查看Elasticsearch节点介绍​

为什么要至少三个节点

首先查看 Elasticsearch 的配置文件, 如下:
​​​Zen Discovery 官方介绍​

# 传递初始主机列表,以便在启动新节点时执行发现
discovery.zen.ping.unicast.hosts: ["192.168.xxx.xxx:9300", "192.168.xxx.xxx:9300"]
# 选举Maste时需要的节点数 (total number of master-eligible nodes / 2 + 1) 防止“防止脑裂”
discovery.zen.minimum_master_nodes: 2
# 一个节点多久ping一次,默认1s
discovery.zen.fd.ping_interval: 1s
# 等待ping返回时间,默认30s
discovery.zen.fd.ping_timeout: 30s
# ping超时重试次数,默认3次
discovery.zen.fd.ping_retries: 3
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);
  1. discovery.zen.minimum_master_nodes: 1

此时出现网络波动, 导致 A—B 之间短暂断开连接, 根据选举规则, B将自己选举为 Master, 当网络波动结束, 就会出现两个Master的情况.

graph LR;
A(Master Node 宕机) --- B(Data Node);
  1. 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 来防止出现脑裂
同时在生产过程中, 为了尽量保持集群高可用, 至少需要三台机器搭建集群

标签:Node,zen,---,Master,集群,Data,节点,es
From: https://blog.51cto.com/51souta/5807349

相关文章

  • 同一个tomcat 共享session
    问题记录 最近学整理java项目session常常用来存储一些公共信息供不同页面访问,比如用户登录信息。访问同一个tomcat下的不同项目所创建的session是不一样的。自然地面临了如......
  • 【XSY2444】【BZOJ4042】【CERC2014】【luogu4757】Parades(树形dp+状压dp)
    题面Description从前有个A国,它有\(n\)个城市和\(n-1\)条道路。每条路连接两个城市。城市之间两两可达。每个城市与不超过10条道路相连。现在给出\(m\)条路径,要求从这些......
  • 【USACO10JAN】Cheese Towers S 奶酪塔 (背包dp)
    一种思路奇特的做法。看到题目容易联想到背包dp,因为看上去很像。但是我们并不知道上面有没有大奶酪。所以我们不妨倒过来看,从上往下加奶酪。设\(dp(i,1/0)\)表示当前......
  • SET DECIMAL_V2=FALSE及UDF ERROR: Cannot divide decimal by zero及Incompatible ret
    概述最近在全职负责一款数据产品的升级改造。因旧版平台的代码写得太乱,简直惨不忍睹;别说增加功能,已有问题的定位与修复都无从下手。用户提交的,在旧版平台能执行的SQL语句,在......
  • spring-messaging
    概述Spring框架作为Java开源世界的集大成者,spring-messaging模块为集成messagingapi和消息协议提供支持。其代码结构为:包括base、converter、core、handler、simp、support......
  • 问题IllegalStateException: The mail session is already initialized解决
    概述很【简单】的一个问题,之前从来没有遇到过;第一反应是搜索Google,没有找到解决方案。木有办法,只好去看源码;看到源码后,很容易就能解决问题。还是记录一下此文。同时,告诫一下......
  • MySQL timestamp(3)问题
    背景最近在负责开发维护的一款数据平台,有一个功能是把数据从某个源头数据源(如常规的JDBC数据源,MySQL,Oracle等)推到目地数据源(还包括企微,MQ等)。一次推送数据就是一个任务,当然......
  • Kubernetes - Cordon, Drain and Uncordon a node
    [cloud-user@rext03-0141project]$kubectlcordonintnode04node/intnode04cordoned[cloud-user@rext03-0141project]$kubectldrainintnode04--ignore-daemonsets......
  • OpenGL ES EGL eglCreateWindowSurface
    一.EGL前言二.EGL绘制流程简介三.eglCreateWindowSurface函数简介1.eglCreateWindowSurface函数2.EGLSurface分类四.eglCreateWindowSurface函数使用五.......
  • iptables防火墙
    一.iptables概述•Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成•主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口等......