MST

星途 面试题库

面试题:ElasticSearch集群扩容时数据迁移方案中的分片分配策略

在ElasticSearch集群扩容的数据迁移方案里,阐述一下分片重新分配的默认策略以及如何根据业务需求调整这些策略。
30.4万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

分片重新分配默认策略

  1. 平衡分片数量:Elasticsearch 尝试在所有节点间均匀分配分片,确保每个节点上的主分片和副本分片数量大致相同。例如,集群有 3 个节点,10 个索引且每个索引 5 个主分片,它会尽量让每个节点上的主分片数量接近 16 - 17 个(50 / 3)。
  2. 避免节点过载:会考虑节点的资源使用情况,如 CPU、内存、磁盘 I/O 等。如果某个节点资源紧张,新的分片分配会倾向于其他资源相对充裕的节点,以防止单个节点因负载过重影响集群性能。
  3. 优先分配到新节点:当集群扩容添加新节点时,默认策略优先将分片分配到新节点,以快速实现数据在新节点上的分布,达到负载均衡目的。例如新增一个节点,部分原节点上的分片会迁移到新节点。

根据业务需求调整策略

  1. 基于数据访问模式
    • 热点数据集中场景:如果业务中有明显的热点数据,即部分数据经常被访问。可以设置自定义路由,将热点数据的分片固定分配到特定的高性能节点,以提升查询性能。例如通过 routing 参数指定索引文档到特定节点。
    • 读写分离场景:对于读多写少的业务,可调整副本分片的分配策略。将副本分片分配到不同机架或数据中心的节点,提高读操作的可用性和性能。可以通过配置 cluster.routing.allocation.awareness.attributes 来实现按机架或数据中心分配。
  2. 基于资源限制
    • 磁盘空间限制:如果某些节点磁盘空间有限,可设置 cluster.routing.allocation.disk.threshold_enabledtrue,并配置 cluster.routing.allocation.disk.watermark.lowcluster.routing.allocation.disk.watermark.high 等参数。当节点磁盘空间达到设置的阈值时,Elasticsearch 会避免向该节点分配新的分片。
    • 内存限制:对于内存敏感的业务,通过监控节点内存使用情况,调整 indices.memory.index_buffer_size 等与内存相关的配置参数,同时结合 cluster.routing.allocation.node_concurrent_recoveries 参数限制每个节点上同时进行的分片恢复数量,防止因内存不足导致节点故障。
  3. 基于数据安全
    • 数据隔离需求:对于敏感数据,可通过设置 cluster.routing.allocation.awareness.attributes 参数,按照节点的属性(如安全级别、业务线等)将敏感数据的分片分配到特定的安全级别高的节点,实现数据隔离。例如将财务相关数据分片分配到具有更高安全防护的节点组。