节点发现
节点发现机制, 是在 Elasticsearch 节点启动
或者 某个节点认为主节点发生故障
时,这个过程机制便会启动。
-
Elasticsearch 节点启动
时,节点基于种子主机提供者 seed hosts providers
的配置进行节点发现。 -
某个节点认为主节点发生故障
时, 节点基于上一个集群已知的主资格节点集 master-eligible nodes that were in the last-known cluster
进行节点发现。
种子主机提供者 seed hosts providers
Elasticsearch 的种子主机提供者 seed hosts providers
有2种配置方式:settings-based 基于配置
(默认) 和 file-based 基于文件
。
settings-based 基于配置
(默认)通过配置一个种子主机的静态列表, 用于节点启动时进行探测发现,从而连通集群。discovery.seed_hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com
file-based 基于文件
通过在discovery.seed_providers: file
elasticsearch.yml
配置一个文件路径,文件位于$ES_PATH_CONF/
路径下。
例如$ES_PATH_CONF/unicast_hosts.txt
:10.10.10.5 10.10.10.6:9305 10.10.10.5:10005 # an IPv6 address [2001:0db8:85a3:0000:0000:8a2e:0370:7334]:9301
PS: 如果同时配置了2种方式, 那么它们会同时作用为ES节点的种子列表。
节点发现过程
-
主合格节点列表同步
-.- 节点
connected and verify 连接并验证
种子列表中的每个节点, 判断是否为master-eligible node 主合格节点
。
-.- 如果是, 那么节点将会 与 远程节点共享它已知的所有master-eligible node 主合格节点
。 -
普通节点循环嗅探
-.- 普通节点(非
master-eligible node 主合格节点
),会重复主合格节点列表同步
过程, 直至 主节点被选举 或 发现主节点。-.- 等待间隔时间受
discovery.find_peers_interval
控制,默认为1s。 -
主合格节点选举
-.- 主合格节点
master-eligible node
,会重复主合格节点列表同步
过程, 直至 主节点被选举 或者 有足够多的master-eligible node 主合格节点
来完成这轮主节点选举。-.- 为什么要等待足够多的主合格节点来完成这轮主节点选举? 只有主合格节点
master-eligible node
才能参与选举,要想选举成功, 投票的主合格节点需要超过半数。-.- 等待间隔时间受
discovery.find_peers_interval
控制,默认为1s。-.-
PS: 在Elasticsearch8.1 中主合格节点的投票配置(一组主合格节点)由 Elasticsearch 动态配置。即在节点加入或离开集群后,Elasticsearch 通过自动对投票配置进行相应更改来做出反应,以确保集群尽可能具有弹性。
场景
节点加入
通过种子列表嗅探集群中的每个节点,发现主节点则请求加入, 未发现则继续普通节点循环嗅探
的过程。
主节点将新节点加入集群的状态发布到集群, 集群状态发布成功则新节点加入集群成功。非主节点节点离开
当一个节点出现3次ping不通的情况时,主节点会认为该节点已宕机,将该节点踢出集群。主节点离开
当主节点发生故障时,集群中的其他节点将会ping当前的master eligible 节点,并从中选出一个新的主节点。