面试题答案
一键面试关键组件
- 节点:Elasticsearch 集群中的各个服务器节点,每个节点在分布式系统中扮演不同角色,如数据节点负责存储和处理数据,主节点负责集群的管理等。在 PacificA 算法场景下,各节点参与数据的复制和一致性维护过程。
- 副本:每个分片(shard)都有一个主副本(primary shard)和多个复制副本(replica shard)。副本用于数据冗余和高可用性,同时在 PacificA 算法实现错误检测中,副本间状态的对比和确认是重要环节。
大致流程
- 数据写入:
- 客户端向 Elasticsearch 集群写入数据,请求会首先到达主节点。主节点确定数据应写入的主分片所在的数据节点。
- 主分片将数据写入本地,并同时并行地向其所有副本分片发送写入请求。
- 副本确认:
- 每个副本分片接收到写入请求后,将数据写入本地。完成写入后,副本分片向主分片发送确认响应(ACK)。
- 主分片等待接收大多数副本分片(法定人数,quorum)的 ACK。例如,如果有一个主分片和两个副本分片,法定人数为 2(主分片本身 + 一个副本分片)。
- 错误检测:
- 副本间差异检测:主分片持续监控副本分片的状态。如果在一定时间内没有收到某个副本分片的 ACK,主分片会认为该副本分片可能出现问题。此外,副本分片之间也会相互对比数据状态,通过版本号、校验和等机制,若发现数据不一致,会向主分片报告。
- 心跳检测:节点之间通过定期发送心跳消息来维持连接状态。若主节点长时间未收到某个数据节点(包含副本分片)的心跳,就会判定该节点出现故障,将其从集群中移除,并触发副本的重新分配和恢复流程,以保证数据的高可用性和一致性。
- 写入失败检测:如果主分片在等待法定人数副本的 ACK 时超时,说明写入操作可能失败。此时主分片会记录相关错误信息,并尝试重新向未确认的副本分片发送写入请求,若多次尝试仍失败,则会标记该副本分片为异常,触发修复或替换操作。