Zen discovery集群发现机制

默认情况下,es进程会绑定本地回环地址(127.0.0.1),扫描本地上的9300~9305端口,尝试和这些端口的启动的其他es进程通信,然后组成一个集群。

但是对于生产环境,每台节点需要绑定在非回环地址上才可以和其他节点通信,同时使用集群发现机制来和其他节点上的es node通信。

一、discovery集群发现机制

1、集群中的节点相互发现组成集群

2、负责es集群master的选举

es默认的discovery机制是zen discovery机制,zen discovery机制提供了unicast discovery集群发现机制,集群发现时节点间通信依赖的transport module(网络模块和协议)。

3、Ping

这是一个节点使用发现机制去寻找其他节点的进程。同时支持多播和单播方式的发现(也可以组合使用)

二、discovery配置

1、unicast(默认,单播方式)

以discovery.zen.ping.unicast作为前缀:

配置描述
hosts是一个数组的配置,或以逗号分隔的字符串。格式为host:port,或者host[port1-port2]

需要配置一个主机列表,用于gossip(流言式)通信协议的路由器,如果通过hostname指定,ping的时候会被解析成ip地址。

基于gossip流言式通信协议的unicast集群发现机制:多个节点发现对方并且组成一个集群,需要一批公共节点(unicast node list),其他节点发送请求到公共节点上,通过公共节点交换各自的信息,进而让所有node感知到其他的node存在,进而相互通信,最终组成一个集群。

当一个node于公共节点中的成员通信之后,会收到一份完整的集群状态,状态中包含集群中所有的node。接着该node再与master通信,加入集群中。

公共节点的配置如下:

discovery.zen.ping.unicast.hosts: ["master", "slave1", "slave2"]

2、multicast(不推荐,多播方式)

多播ping发现的方式通过向其他节点发送一个或多个多播请求来实现,存在的节点将会接收并且响应。提供下面的一组配置,以discovery.zen.ping.multicast做前缀:

配置描述
group默认值为224.2.2.4
port默认值为54328
ttl多播消息的ttl。默认为3
address绑定的地址,默认为null,即绑定所有可用的network接口。

将elasticsearch.yml 配置multicast.enabled设为false可以禁用多播方式。

网络轻微抖动,有可能导致节点间无法相互发现。

三、es中涉及两种角色

1、master节点

(1)维护集群的状态信息(集群的元信息),当集群状态信息变化了,同步元数据给其他data node节点

(2)node加入集群或者从集群中下线,重新分配shard

(3)创建或者删除索引

2、data节点

负责数据的存储和读写

四、Master选举

1、在ping发现过程中为集群选择一个master,设置discovery.zen.ping_timeout参数(默认3秒),如果网路慢或者堵塞,导致master选举超时,那么此时增加该参数值,确保集群启动的稳定性。

discovery.zen.ping_timeout: 60s

2、完成一个集群的master选举之后,每次新的node加入集群,都会发送join request到master node。设置discovery.zen.join_timeout保证node稳定加入集群,增加join的等待时长。如果一次join不上,默认重试20次

3、master node宕机了,集群中的node会再次进行一次ping过程,选出新的master。

4、ping过程选出的master必须有若干个候选master node节点,如果必须拥有的候选master node个数不满足,则选出来的master被停止。然后重新选举master。

候选master node配置参数:

discovery.zen.minimum_master_nodes

注意:节点在成为主节点之后可以通过将node.master设为false来退出。注意,一旦一个节点被明确设为一个客户端节点(node.client设为true),则不能再成为主节点(node.master会自动设为false)。

五、集群故障探查

1、master探查

master会ping集群中所有其他的node,确保他们是否存活

2、node探查

每个node会ping master node来确保master node是存活的。如果不存活,发起一次master选举

ping_interval:每隔多长时间ping一次node,默认是1秒

ping_timeout:每次ping的timeout等待时长,默认是30秒

ping_retries:一个node被ping多少次都失败,判定node故障。默认是3次

以discovery.zen.fdprefix为前缀:

配置描述
ping_interval节点ping的频率。默认为1秒。
ping_timeout等待节点响应的超时时间,默认为30秒
ping_retriesping失败/超时重试次数。默认为3.

六、集群状态的更新

master node 是集群中唯一一个可以对集群状态更新的node。

1、master node每次会处理一个集群的更新事件来更新状态。

2、然后将更新后的状态发布到集群中的其他node。每个node会接受publish message,ack message

3、如果master没有在discovery.zen.commit_timeout指定时间内(默认30秒),从discovery.zen.minimum_master_nodes节点获取ack响应,那么这次集群状态事件会被reject,不会应用。

如果在指定时间内收到了指定数量的ack消息,那么集群状态会被commit,master会向所有node发送commit message。

4、node收到commit message后才将之前收到的集群状态应用到自己node的本地状态中。

5、master会等待所有node再次响应是否更新了本地状态。

在一个等待超时时间内(discovery.zen.publish_timeout),该超时时间即集群状态发布开始计时。

discovery.zen.publish_timeout默认是30秒

6、收到了响应,本次状态事件更新结束。master执行下一个更新事件。

七、master宕机集群做出何种响应

设置discovery.zen.no_master_block参数

1、all

一旦master宕机,所有操作全部拒绝

2、write(默认)

master宕机,所有写操作拒绝,读操作被允许

 

 

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值