面试题答案
一键面试底层原理
- 选举机制
- Elasticsearch 基于 Quorum(法定人数)的选举机制。在正常情况下,集群中的节点通过 Gossip 协议互相通信,了解彼此的状态。当网络分区发生时,每个分区内的节点尝试进行选举。只有当一个节点获得超过半数(quorum = (master_eligible_nodes / 2) + 1)的选票时,才能成为主节点。这种机制确保在网络分区后,每个分区内有且仅有一个主节点(如果满足选举条件),避免了脑裂问题,保障数据一致性。
- 版本控制
- 每个文档都有一个版本号。当文档被修改时,版本号递增。主节点负责协调文档的写入操作,并在写入成功后更新版本号。在网络分区场景下,不同分区内对相同文档的修改会有不同的版本号。当网络恢复后,通过版本号可以识别出最新的文档版本,从而合并数据,保证一致性。
具体实现策略
- 主节点职责
- 在网络分区期间,每个分区内的主节点负责管理本分区内的索引、文档的读写操作。主节点会维护一个元数据状态,包括索引的配置、分片的分布等信息。当网络恢复后,主节点之间会进行元数据的合并和同步,以确保整个集群状态的一致性。
- 分片复制与同步
- Elasticsearch 采用分片复制机制,每个主分片都有多个副本分片。在网络分区时,每个分区内的主分片和副本分片会继续为客户端提供服务。当网络恢复后,不同分区内的分片会进行同步。例如,假设一个索引有 3 个主分片和 2 个副本分片,网络分区后,一个分区内有一个主分片和一个副本分片,另一个分区内有另一个主分片和其副本分片。网络恢复后,这些分片会根据版本号等信息进行数据同步,使得所有分片的数据最终达到一致。
- 故障检测与重连
- 节点通过定期发送心跳包来检测其他节点的存活状态。在网络分区时,节点检测到与其他节点失去连接,会标记这些节点为不可达。当网络恢复后,节点会尝试重新连接其他节点,并重新加入集群。同时,主节点会重新分配分片,确保集群状态恢复到正常水平,保障可用性。