面试题答案
一键面试1. 文档路由机制
- Elasticsearch 在写入文档时,会根据文档的
_id
(如果未指定,Elasticsearch 会自动生成)通过哈希算法计算出该文档应该存储在哪个主分片上。公式为:shard = hash(_id) % number_of_primary_shards
。这样可以确保相同_id
的文档始终被路由到同一个主分片上。 - 这种路由机制使得文档均匀分布在各个主分片之间,为后续副本分片的负载均衡打下基础。
2. 副本分片分配机制
- 自动分配策略:Elasticsearch 集群启动时,会根据集群的节点数量、磁盘空间、负载等因素,自动将副本分片均匀分配到不同的节点上。例如,当一个节点加入集群时,Elasticsearch 会重新平衡分片的分布,确保副本分片分散在不同节点,避免单点故障,提高可用性。
- 感知节点故障:如果某个节点发生故障,Elasticsearch 能够快速检测到。此时,集群会自动将故障节点上的主分片对应的副本分片提升为新的主分片,并在其他健康节点上重新分配新的副本分片,以恢复集群的完整性和可用性。
3. 负载均衡策略
- 请求路由:客户端发送读取请求时,Elasticsearch 会根据轮询、随机等负载均衡算法,将请求均匀分配到主分片和副本分片上。例如,轮询算法会依次选择不同的分片来处理请求,确保每个分片都有机会处理请求,避免某个分片负载过高。
- 分片状态感知:Elasticsearch 会实时监控每个分片的负载情况,包括 CPU 使用率、内存使用率、网络带宽等。如果发现某个分片负载过高,会调整请求的分配策略,将更多请求路由到负载较低的分片上,以实现整体负载均衡,提高读取性能。
4. 动态调整机制
- 集群扩容:当集群中添加新节点时,Elasticsearch 会自动将部分分片(包括主分片和副本分片)迁移到新节点上,重新平衡整个集群的负载。这个过程是自动且平滑的,尽量减少对业务的影响。
- 集群缩容:当节点从集群中移除时,Elasticsearch 会将该节点上的分片迁移到其他节点上,重新分配负载,确保集群的可用性和性能不受太大影响。同时,在迁移过程中,会尽量避免数据的重复传输,提高效率。