面试题答案
一键面试基本原理
- 数据冗余:ElasticSearch 通过创建数据副本,将相同的数据存储在多个节点上。当写故障发生时,副本数据可以作为备份来恢复丢失或损坏的数据,确保数据的高可用性。
- 分布式一致性协议:采用类似 Paxos 或 Raft 的分布式一致性协议,确保主副本和从副本之间的数据一致性。在正常情况下,写操作首先在主副本上执行,然后通过一致性协议同步到从副本。当主副本出现故障时,从副本可以依据一致性协议选举出新的主副本,继续提供服务。
大致流程
- 故障检测
- 节点之间通过心跳机制互相监测状态。当一个节点在一定时间内没有收到其他节点的心跳时,就会判定对应节点出现故障。例如,ElasticSearch 集群中的每个节点会定期向其他节点发送心跳包,默认的心跳间隔时间可以在配置中设置。
- 主副本切换(如果必要)
- 如果发生故障的节点是主副本所在节点,那么集群需要选举出新的主副本。
- 符合选举条件的从副本节点(通常依据节点的权重、版本等因素)会参与选举。例如,权重高、数据版本新的从副本节点更有可能被选举为新的主副本。
- 通过分布式一致性协议(如 Raft 的选举算法),从副本节点之间进行投票,得票超过半数的节点会被选举为新的主副本。
- 数据恢复
- 新的主副本节点会协调数据恢复过程。它会向其他拥有副本数据的节点请求缺失的数据。
- 拥有完整副本数据的节点会将数据发送给新主副本节点,新主副本节点接收并重新应用写操作日志(如果存在),以确保数据的一致性和完整性。
- 一旦新主副本节点的数据恢复完成,它会通知集群中的其他节点,整个集群恢复正常服务状态,可以继续处理新的写操作和读请求。