面试题答案
一键面试ElasticSearch 分片分布基础概念
- 分片(Shard):Elasticsearch 将索引(Index)数据拆分成多个部分,每个部分就是一个分片。分片是 Elasticsearch 存储和处理数据的最小单元。它允许 Elasticsearch 水平扩展,能够存储超出单个节点硬件限制的数据量,并在多个节点上并行处理搜索和索引请求,提高性能。
- 主分片(Primary Shard):每个文档在索引时会被分配到一个主分片上,主分片负责处理文档的写入和更新操作。主分片的数量在索引创建时就固定下来,后续不能直接修改(除非重新索引)。
- 副本分片(Replica Shard):副本分片是主分片的拷贝,它主要用于提高搜索性能和数据可用性。副本分片可以处理读请求(如搜索),分担主分片的负载。当主分片所在节点发生故障时,副本分片可以提升为主分片继续提供服务。副本分片的数量可以动态调整。
分片在集群节点间的初始分配
- 索引创建时:当创建一个新索引时,Elasticsearch 根据配置(默认设置或用户指定)确定主分片和副本分片的数量。例如,默认情况下,每个索引有 5 个主分片和 1 个副本分片。
- 分配算法:Elasticsearch 使用一种称为“一致性哈希”的算法来分配分片。它首先计算每个节点的哈希值,将所有节点映射到一个环形的哈希空间上。对于每个主分片,根据其名称计算哈希值,然后在哈希环上顺时针找到第一个节点,将该主分片分配到这个节点上。例如,假设有三个节点 Node1、Node2、Node3,主分片 P1、P2、P3,通过哈希计算 P1 对应到 Node2,P2 对应到 Node3,P3 对应到 Node1 等。
- 副本分片分配:副本分片不会与对应的主分片分配到同一个节点上,以确保数据的高可用性。Elasticsearch 在分配副本分片时,会尽量将其均匀地分配到其他节点上。例如,如果主分片 P1 在 Node2 上,其副本分片 R1 会被分配到 Node1 或 Node3 上,以避免单点故障。这种分配策略保证了数据的冗余和系统的稳定性,同时也提高了搜索的并行处理能力。