面试题答案
一键面试ElasticSearch中分片的概念
在ElasticSearch中,分片是将一个索引分割成多个较小的部分。每个分片本质上是一个独立的Lucene索引,可以分布在不同的节点上。这使得ElasticSearch能够处理比单个节点物理内存限制更大的数据集,同时也提高了查询性能。
为什么需要分片
- 处理大数据量:单个节点的存储和处理能力有限,通过分片可以将大数据集分散到多个节点,突破单个节点的限制。
- 提高性能:查询时可以并行处理多个分片,提高查询响应速度。不同的分片可以在不同的节点上同时进行搜索,然后将结果合并返回。
主分片和副本分片在分布式架构中的角色
- 主分片
- 数据写入:负责接收写入请求,数据首先写入主分片。
- 数据一致性保证:在副本分片同步数据时,主分片负责协调确保数据的一致性。
- 数据初始分配:索引创建时,主分片被分配到不同的节点上,决定数据的初始存储位置。
- 副本分片
- 高可用性:当主分片所在节点发生故障时,副本分片可以提升为主分片,保证服务的连续性。
- 负载均衡:副本分片也可以处理读请求,分担主分片的负载,提高系统的整体读性能。
它们之间的协同工作
- 写入流程:客户端将数据写入请求发送到ElasticSearch集群,请求会被路由到主分片所在节点。主分片写入数据成功后,会并行将数据复制到相关的副本分片。只有当所有副本分片都成功复制数据后,这次写入操作才被认为是成功的(可根据配置调整为部分副本成功即可)。
- 故障处理:如果主分片所在节点故障,集群会从对应的副本分片中选举一个提升为主分片,以继续提供服务。同时,集群会重新分配副本分片,确保数据的高可用性和冗余。
- 读取流程:读请求可以发送到主分片或副本分片。ElasticSearch会根据负载均衡策略选择一个分片来处理读请求,从而提高整体的读性能。