面试题答案
一键面试故障检测机制
- 基于Zen Discovery机制:Elasticsearch默认使用Zen Discovery机制来管理节点间的通信和发现。每个节点都会定期向集群中的其他节点发送ping请求,通过响应来判断其他节点是否存活。
- 节点状态感知:节点会维护一个集群状态的本地副本,其中包含了节点信息、索引信息等。当一个节点在一定时间内(可配置的超时时间)没有收到来自主节点的ping响应时,该节点会认为主节点可能发生故障。
从节点选举为新主节点过程
- 资格筛选:并不是所有的从节点都有资格成为主节点。只有那些被配置为
master eligible
(默认情况下,除了数据节点外,大多数节点都有资格)的节点才会参与选举。 - 选举算法:Elasticsearch使用一种基于Bully算法改进的选举机制。当检测到主节点故障后,有资格的从节点会发起选举。每个有资格的节点会向其他有资格的节点发送选举请求。收到请求的节点会根据请求节点的
node ID
(在集群中唯一标识节点)进行比较。如果请求节点的node ID
比自己记录的当前最佳节点(最初为空)的node ID
更大(按照字典序比较),则该节点会投票给请求节点。 - 多数投票:一个节点要成为新的主节点,必须获得集群中超过半数的有资格节点的投票。一旦某个节点获得了足够的票数,它就会宣布自己成为新的主节点,并向集群中的其他节点发送通知。
数据一致性保证
- 写入确认机制:在正常情况下,当客户端向Elasticsearch写入数据时,主节点会将数据同步到所有的副本分片上。只有当所有配置的副本分片都确认接收到数据后(可以通过
consistency
参数配置为one
、quorum
、all
等不同的确认策略),主节点才会向客户端返回写入成功的响应。 - 故障恢复时:当主节点发生故障,新主节点选举出来后,新主节点会首先从自己的本地状态信息中获取集群状态。然后,它会与其他节点进行通信,收集缺失的信息,确保自己的状态与集群中的大多数节点保持一致。新主节点会协调数据分片的复制和同步工作,确保数据在所有节点上保持一致。如果有数据分片在故障期间出现不一致的情况,新主节点会重新同步这些分片,使得整个集群的数据状态恢复到一致状态。