面试题答案
一键面试技术原理
- 节点角色划分:Elasticsearch 集群中有主节点(Master-eligible node)、数据节点(Data node)和客户端节点(Ingest node、Coordinating node 等)。主节点负责集群状态的管理,如索引的创建、删除,节点的加入、离开等;数据节点负责存储和处理数据;客户端节点主要负责路由请求等。
- 动态调整主节点角色:通过修改节点配置文件中的
node.master
属性来动态改变节点是否具备成为主节点的资格。当将一个节点的node.master
设置为false
时,该节点不再参与主节点选举;设置为true
时,节点可以参与选举。在集群运行时,修改配置后重启节点即可完成角色调整。
选举机制
- 基于 Bully 算法改进:当集群中需要选举主节点时,具备主节点资格(
node.master: true
)且存活的节点开始相互通信。每个节点会向其他节点发送自己的状态信息,包括节点 ID、版本号等。 - 选举过程:节点会比较接收到的其他节点的状态信息,通常具有最高版本号和节点 ID 的节点会被选为新的主节点。如果某个节点在一定时间内(选举超时时间,可配置)没有收到其他节点的响应,它会认为自己是当前集群中最适合成为主节点的节点,并宣布自己为主节点。
- 防止脑裂:为避免脑裂问题(即集群中出现多个“主节点”),Elasticsearch 引入了 quorum(法定人数)概念。默认情况下,quorum 为
(master_eligible_nodes / 2) + 1
。只有当超过 quorum 数量的节点认可某个节点为主节点时,该节点才能真正成为主节点。
确保数据正常读写不受影响
- 数据复制与分片:Elasticsearch 将索引数据划分为多个分片(Shard),每个分片可以有多个副本(Replica)。主分片负责处理写操作,副本分片负责处理读操作。在主节点角色调整过程中,由于副本分片的存在,读操作依然可以从副本分片获取数据,保证读服务不中断。
- 写操作处理:在主节点角色调整期间,新的主节点选举出来之前,写操作可能会受到短暂影响。但一旦新主节点选举完成,集群状态更新,写操作可以重新路由到主分片上进行处理。为减少写操作中断时间,可以通过配置合适的副本数量和选举超时时间来优化。例如,增加副本数量可以提高读操作的可用性和负载均衡能力;合理设置选举超时时间,既不能过长导致写操作长时间等待,也不能过短导致选举过于频繁。
- 集群状态同步:新主节点选举出来后,会向集群中的其他节点发送集群状态更新信息。节点接收到更新后,会根据新的集群状态调整自己的路由表等信息,确保数据的读写请求能够正确路由到相应的分片上,从而恢复正常的数据读写服务。