elasticsearch源码分析之discovery(七)

本文详细分析了elasticsearch的Discovery模块,特别是ZenDiscovery。ZenDiscovery是elasticsearch的默认发现模块,负责节点发现和主节点选举。它包含多个子模块,如Ping、Unicast、Master Election等。主节点通过Cluster State Updates发布集群状态信息,同时利用Fault Detection确保集群稳定性。文章深入探讨了ZenDiscovery的构造、运行机制,包括节点加入、主节点选举以及故障检测流程。
摘要由CSDN通过智能技术生成

Discovery模块概述

elasticsearch中的Discover模块,这个模块主要是发现模块负责发现集群中的节点,以及选取主节点。用作处理elasticsearch中的集群问题,是elasticsearch中比较复杂的一个模块。
discovery有几类:

  • Azure discovery(类似于多播),它可作为插件使用。
  • EC2 discovery,作为插件使用。
  • Google Compute Engine (GCE) discovery (类似于多播),它可作为插件使用。
  • zenDiscovery是elasticsearch的内置并且默认的discovery模块。 它提供unicast发现,并且扩展到支持云环境和其他形式的发现。

这里我们只分析zenDiscovery。

Discovery子模块

ZenDiscover其实是由一些其他的模块配合而成的,比如node之间的通信就是用的transport模块。ZenDiscover可以分为以下几个子模块:

Ping

这是一个节点使用发现机制来查找其他节点的过程。

Unicast

通过配置discovery.zen.ping.unicast对列表中的node单播。
单播发现需要使用的主机列表作为传播的路由器,它使用discovery.zen.ping.unicast前缀提供以下设置:

可以是数组设置或逗号分隔设置。
每个值的格式应为host:port或host(其中,port默认为9300)。 请注意,IPv6主机必须加括号。 默认为127.0.0.1,[:: 1]

unicast discovery用transport模块来执行发现。

Master Election

用作Master的选举;集群的主节点被选举或加入是ping过程的一部分。这是自动完成的。
当主节点停止或遇到问题时,群集节点再次开始ping过程,并选择一个新的主节点。这轮ping还用作对(部分)网络故障的保护,其中节点可能不正当地认为主节点已经故障。在这种情况下,节点将简单地从其他节点听到关于当前活动的主机的信息。
discovery.zen.minimum_master_nodes设置需要加入新选择的主节点的主合格节点的最小数量,以便选择完成,并且选择的节点成为masternode。相同的设置控制应作为任何活动集群的一部分的活动主机合格节点的最小数量。如果不满足此要求,活动主节点将退出,并且将开始新的主节点选择。

Fault Delection

用ping的方式来确定node是否在集群里面,有两个fault detection进程运行。 第一个nodesFD是由master去ping所有其他集群中的节点并验证他们是活着的。 第二个masterFD是每个节点ping到master以验证其是否仍然活着或者需要启动选举过程。
有如下设置使用discovery.zen.fd前缀控制fault detection过程:

ping_interval #节点被ping的频率,默认为1s。
ping_timeout #等待ping响应的时间长度,默认为30秒。
ping_retries #ping失败重试次数,默认为3。

Cluster state updates

这个只在master node上有效,用于向其他node发布集群的状态信息。
master节点是集群中可以更改集群状态的唯一节点。 master一次处理一个群集状态更新,修改更新并将更新的群集状态发布到群集中的所有其他节点。 每个节点接收发布过来的消息,更新其本地的集群状态,并且响应给主节点。主节点会等待所有节点的响应,直到一个超时时间,在这之前后面的更新请求都会排在一个队列中。 discovery.zen.publish_timeout默认设置为30秒,可以通过集群更新设置api动态更改。

No master block

要使集群完全可操作,它必须具有活动的master节点,并且运行的主节点合格节点数必须满足discovery.zen.minimum_master_nodes设置(如果设置)。
discovery.zen.no_master_block设置控制当没有活动主机时应拒绝哪些操作。

discovery.zen.no_master_block设置有两个有效选项:

all
节点上的所有操作读和写操作都将被拒绝。这也适用于api集群状态读取或写入操作,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值