面试题答案
一键面试处理流程及关键机制
-
故障检测:
- ElasticSearch集群中的节点通过定期的心跳检测来发现故障节点。每个节点会向其他节点发送心跳请求,若在一定时间内未收到某个节点的响应,则判定该节点发生故障。例如,默认情况下,节点间的ping请求频率较高,能快速感知节点状态变化。
-
重新分配分片:
- 主分片故障:如果故障节点包含主分片,ElasticSearch会从该分片的副本分片中选举出新的主分片。选举机制基于节点的版本号、节点ID等因素。例如,具有最新版本号的副本分片有更高几率成为新主分片。一旦新主分片选举完成,集群状态更新,其他节点会收到通知,开始与新主分片进行数据同步等操作。
- 副本分片故障:若故障节点包含副本分片,ElasticSearch会根据集群的配置策略(如默认的副本数等),在其他健康节点上创建新的副本分片,以保证数据的冗余和可用性。
-
并发控制类deciders处理并发操作:
- 写操作:
- 等待新主分片选举:在主分片故障时,正在进行的写操作会被阻塞,直到新主分片选举完成。例如,客户端发送写请求,在等待期间,请求会处于挂起状态。
- 同步写操作:新主分片选举完成后,写操作会重新路由到新主分片。新主分片会将数据同步到其他副本分片,采用的是同步复制机制(可配置为异步)。只有当所有(或一定数量,取决于配置)副本分片确认写入成功后,主分片才会向客户端返回成功响应,保证数据一致性。
- 读操作:
- 故障感知:读请求发送到集群时,节点会先感知到故障节点及相关分片的状态。如果读请求涉及的分片在故障节点上,会根据情况处理。
- 切换读取目标:对于包含故障主分片的索引,读请求会被重定向到其他副本分片。若副本分片也故障,则可能根据配置返回部分数据或等待新副本分片创建完成后再返回数据,以保证读操作的正确性。
- 写操作:
-
集群状态更新:
- 整个故障处理过程中,集群状态不断更新。故障发现、分片重新分配、并发操作的处理决策等信息都会包含在集群状态更新中。其他节点通过订阅集群状态更新,实时调整自身的操作,如更新路由表以适应新的分片分布,确保后续的并发操作能正确执行。