面试题答案
一键面试1. 选主得票机制基础
在Elasticsearch中,节点通过Zen Discovery机制进行选主。每个节点都有选举权和被选举权。当一个节点启动时,它会尝试与集群中的其他节点建立连接,并交换状态信息。
2. 避免产生多个主节点
- 法定人数(Quorum)机制:Elasticsearch采用法定人数机制来选举主节点。法定人数计算公式为
(master_eligible_nodes / 2) + 1
。例如,若有5个具备主节点资格的节点,法定人数就是(5 / 2) + 1 = 3
。在网络分区形成多个子集群时,只有包含法定人数的子集群才有资格选举主节点。比如网络分区形成了一个2节点和一个3节点的子集群,只有3节点的子集群满足法定人数可以选主,2节点的子集群无法选出主节点,从而避免产生多个主节点。 - 版本号和集群状态:每个集群状态都有一个版本号。当节点尝试选举主节点时,会比较接收到的集群状态版本号。版本号高的状态优先被接受。如果一个子集群中的节点接收到来自另一个子集群的状态信息且版本号更高,它会更新自己的状态,不会在当前子集群中发起选举,进一步避免了多个主节点的产生。
3. 原集群恢复连通后正常选举并达成一致状态
- 重新交换状态信息:当网络恢复连通后,各个子集群的节点开始相互通信并交换状态信息。由于之前各子集群的状态可能不同,节点会比较各自的集群状态版本号。
- 以高版本状态为基础:版本号高的集群状态将成为整个集群恢复后的基础状态。低版本状态的节点会根据高版本状态进行调整,最终所有节点的状态达成一致。
- 重新选举(如有必要):如果在交换状态信息后发现当前主节点并非最合适(例如原主节点所在子集群版本号不是最高),整个集群会重新进行选举,按照法定人数和状态比较机制选出新的主节点,从而确保集群恢复到一致且正常的运行状态。