面试题答案
一键面试基本原理
ElasticSearch 基于分片(shard)和副本(replica)机制实现分布式搜索数据节点负载均衡。数据被切分成多个分片,每个分片可存在于不同节点,副本是分片的拷贝,用于高可用和负载均衡。当有搜索请求时,请求会被均匀分配到各个节点上的分片,这些分片并行处理请求,然后将结果汇总返回给客户端,实现负载均衡。
主要组件
- 节点(Node):集群中的服务器实例,分为主节点(Master Node)、数据节点(Data Node)、协调节点(Coordinating Node)等。主节点负责集群的元数据管理和节点状态维护;数据节点负责存储和处理数据;协调节点负责接收客户端请求,并将请求分发到各个数据节点,然后收集和汇总结果返回给客户端。
- 索引(Index):逻辑上的数据集,由一个或多个分片组成。
- 分片(Shard):数据的物理存储单元,一个索引的数据会被分散到多个分片中,每个分片是一个 Lucene 索引实例,可以独立进行数据的存储和检索。
- 副本(Replica):分片的拷贝,用于提供数据冗余和提高查询性能。每个分片可以有多个副本,副本可以存在于不同的数据节点上。
主要机制
- 自动分片分配:ElasticSearch 会根据集群状态(如节点数量、磁盘空间等)自动将分片分配到不同的数据节点上,确保数据均匀分布。主节点负责监控集群状态,当有新节点加入或现有节点故障时,主节点会重新分配分片,以保持数据的均衡分布和集群的高可用性。
- 负载感知路由:协调节点在接收到客户端请求时,会根据节点的负载情况(如 CPU、内存、I/O 等)将请求路由到负载相对较低的数据节点。这样可以避免某些节点因负载过高而成为性能瓶颈,保证整个集群的搜索性能。
- 副本机制:副本不仅提供数据冗余,还能用于分担读请求。当有搜索请求时,协调节点可以将请求发送到主分片或副本分片,根据负载情况动态选择,从而实现负载均衡。如果主分片所在节点出现故障,副本分片可以自动提升为主分片,确保数据的可用性和服务的连续性。
- 集群状态管理:主节点负责维护集群状态信息,包括节点列表、分片分配情况、索引元数据等。这些信息会定期同步到其他节点,使所有节点都能了解集群的最新状态。当集群状态发生变化时(如节点加入、离开、故障等),主节点会更新集群状态,并通知其他节点进行相应的调整,以保证数据的一致性和负载均衡。