面试题答案
一键面试选举机制概述
在Elasticsearch中,基于Zen Discovery机制进行Master节点选举。当MasterFaultDetection事件触发恢复时,候选Master节点(配置 node.master: true
的节点)之间通过交换ping请求和响应来发现彼此,并确定新的Master。
条件判断
- 节点ID:每个节点都有唯一的节点ID。在选举过程中,节点ID会作为一个标识。
- 节点权重:可以通过
node.master_weight
配置项设置节点的权重,权重高的节点在选举中有更大优势。默认为1。权重值范围是0 - 1000。 - 选举版本:每个参与选举的节点都有一个选举版本号。版本号高的节点优先成为Master。
- 集群状态版本:节点保存的集群状态版本号。版本号越高,表示该节点拥有的集群状态信息越新。
影响因素
- 网络稳定性:节点之间的网络连接质量直接影响选举过程。如果网络不稳定,可能导致ping请求和响应丢失,影响节点间信息交换。
- 节点数量:集群中的候选Master节点数量对选举有影响。法定人数(quorum)是选举的关键,法定人数计算公式为
(master_eligible_nodes / 2) + 1
。只有超过法定人数的节点参与选举,选举才可能成功。 - 节点负载:节点的CPU、内存等资源负载情况会间接影响选举。高负载可能导致节点处理选举相关消息延迟。
异常情况及处理方式
- 脑裂问题
- 情况描述:当网络分区发生时,集群可能被分割成多个部分,每个部分都可能选举出自己的Master节点,形成多个“大脑”,这就是脑裂问题。
- 处理方式:通过设置合理的
discovery.zen.minimum_master_nodes
配置项(等同于法定人数)来避免脑裂。如果某个分区中的节点数量未达到法定人数,就无法选举出Master,从而防止脑裂。同时,Elasticsearch 7.0 及之后版本默认启用了cluster.auto_failover
机制,用于检测和解决脑裂问题。
- 选举超时
- 情况描述:如果在选举过程中,由于网络延迟或其他原因,节点在规定时间内没有收到足够的响应,就会发生选举超时。
- 处理方式:节点会重新发起选举过程。可以通过
discovery.zen.ping_timeout
配置项调整ping请求的超时时间,默认是3秒。适当增加超时时间可以在网络不稳定时减少选举超时的概率。
- 节点故障
- 情况描述:在选举过程中,如果候选Master节点发生故障,可能导致选举中断或结果异常。
- 处理方式:其他存活的节点会检测到故障节点的离开(通过节点的ping机制),然后重新进行选举,将故障节点排除在选举之外。