MST

星途 面试题库

面试题:ElasticSearch 选举临时Master的基本策略有哪些

请详细阐述 ElasticSearch 在选举临时 Master 时所采用的基本策略,包括涉及到的节点属性、网络通信机制等方面。
19.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. 节点属性相关

  • 节点角色属性
    • Elasticsearch 节点有多种角色,如 master-eligible(可成为主节点的节点)、data(数据节点)、ingest(预处理节点)等。只有标记为 master-eligible 的节点才有资格参与主节点选举。通过配置文件中的 node.master: true 来设置该属性。例如,在 elasticsearch.yml 配置文件中,一个可成为主节点的节点配置如下:
node.name: node1
node.master: true
node.data: false
- 具有 `master-eligible` 角色的节点会在集群状态信息交换中表明自己有参与选举的资格。
  • 节点权重属性
    • 每个 master-eligible 节点都有一个权重值,默认权重为 1。可以通过在配置文件中设置 node.master_weight 来调整权重。例如:
node.master_weight: 10
- 权重值在选举过程中起到重要作用,权重越高的节点在选举时越有可能被选为临时 Master。它可以帮助管理员根据节点的硬件资源(如 CPU、内存等)来分配选举优先级,资源更强大的节点设置更高的权重,以便在选举中更具优势。

2. 网络通信机制

  • 基于 Ping 的发现机制
    • Elasticsearch 使用基于 Ping 的机制来发现集群中的其他节点。节点启动时,会通过 UDP 广播(默认)或单播(可配置)的方式向网络中的其他节点发送 Ping 请求。例如,在单播模式下,需要在配置文件中指定可连接的节点列表:
discovery.seed_hosts: ["node1:9300", "node2:9300"]
- 接收到 Ping 请求的节点会回复响应,告知自己的状态信息,包括节点名称、角色、版本等。通过这种方式,节点可以发现集群中的其他节点,并建立连接。
  • 集群状态信息交换
    • 节点之间通过 TCP 连接进行集群状态信息的交换。节点会定期(默认 1 秒)向其他节点发送包含自身状态信息(如已发现的节点列表、集群状态版本等)的消息。
    • 当一个 master-eligible 节点发现当前集群没有 Master 节点(例如,集群刚启动或者 Master 节点故障)时,它会发起选举流程。该节点会向其他 master-eligible 节点发送选举请求消息,包含自己的节点信息和权重等。
    • 其他 master-eligible 节点收到选举请求后,会根据一定的规则(如比较权重、节点 ID 等)决定是否投票给该节点。如果收到大多数(超过一半)master-eligible 节点的投票,该节点就会成为临时 Master。
    • 在选举过程中,网络通信的稳定性至关重要。如果网络出现分区(即部分节点之间无法通信),可能会导致脑裂问题,即不同分区内各自选举出 Master 节点。为了避免这种情况,Elasticsearch 要求选举时必须有超过半数的 master-eligible 节点在线并能够通信。

3. 选举流程总结

  1. 当集群中没有 Master 节点时,master-eligible 节点开始发起选举。
  2. 每个发起选举的节点向其他 master-eligible 节点发送包含自身节点属性(如权重、节点 ID 等)的选举请求。
  3. 接收到选举请求的 master-eligible 节点根据节点权重、节点 ID 等因素决定是否投票。一般来说,权重高的节点更容易获得投票。如果权重相同,则比较节点 ID,ID 较小的节点更有可能获得投票。
  4. 当某个 master-eligible 节点获得超过半数 master-eligible 节点的投票时,它就成为临时 Master。
  5. 临时 Master 会负责协调集群状态的更新,维护节点列表,处理索引创建、删除等集群级别的操作。在这个过程中,持续通过网络与其他节点保持通信,确保集群状态的一致性和稳定性。