面试题答案
一键面试1. 数据完整性保障机制
- 副本机制:
- ElasticSearch 采用多副本策略,每个主分片有多个副本分片。当某个节点发生故障时,副本分片会被提升为新的主分片。例如,假设有一个索引有 1 个主分片和 2 个副本分片,存储在节点 A、B、C 上,若节点 A 故障,其主分片对应的副本分片(如在节点 B 或 C 上)会被选举为新的主分片,从而保证数据不丢失。
- 底层原理是 ElasticSearch 通过分布式一致性协议(如 Raft 变种)来保证副本之间的数据一致性。在正常情况下,主分片接收写请求,然后将数据同步到副本分片,确保所有副本都拥有相同的数据。
- 故障检测与数据修复:
- ElasticSearch 集群中的节点会定期通过心跳机制检测其他节点的状态。当检测到某个节点故障后,集群会标记该节点上的分片为未分配状态。
- 随后,集群会根据副本分布情况,选择合适的节点重新分配这些未分配的分片。这个过程中,会从其他副本中复制数据来重建故障节点上丢失的分片数据,以保证数据完整性。例如,通过
_recovery
API 可以查看数据恢复的进度。 - 底层原理是基于集群状态的管理,集群状态存储了所有节点、索引、分片等信息。当节点故障时,集群状态更新,触发分片重新分配和数据恢复流程。
2. 流程继续推进机制
- 重新分配与恢复:
- 当节点故障导致分片未分配时,ElasticSearch 会重新计算分配策略,将未分配的分片分配到其他健康的节点上。例如,原本分配在故障节点上的主分片副本,会被分配到其他有足够资源的节点上,并开始数据恢复过程。
- 恢复过程分为两种:本地恢复和远程恢复。如果副本分片所在节点有足够的信息可以重建主分片(如最近的事务日志等),则进行本地恢复,速度较快;否则进行远程恢复,从其他副本分片复制数据。
- 底层通过分片状态机来管理这个过程,分片状态机定义了分片在不同阶段(如初始化、分配、恢复等)的状态转换和操作。
- 集群协调与元数据更新:
- 集群中的主节点负责协调整个重新分配和恢复过程。主节点会更新集群元数据,记录新的分片分配信息,并通知其他节点。
- 例如,主节点会向其他节点发送指令,告知它们哪些分片需要接收新的副本数据。其他节点根据这些指令,调整自身的状态和操作,确保流程顺利进行。
- 底层原理是主节点通过发布 - 订阅模式与其他节点进行通信,更新集群元数据并同步状态,以保障整个集群在节点故障后能继续正常工作。