侧边栏壁纸
博主头像
慧棱镜 All In One 服务平台 博主等级

行动起来,活在当下

  • 累计撰写 33 篇文章
  • 累计创建 62 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

ES实践-性能优化篇

创始者
2024-12-09 / 0 评论 / 0 点赞 / 5 阅读 / 0 字
广告 广告

分片数量设置多少最为好?

在 Elasticsearch 集群中,number_of_shards 设置应根据集群的硬件资源、查询/写入负载和数据量来决定。对于 6 个数据节点,以下是一些考虑因素和推荐的设置:

1. 合理分配分片数量

  • 每个数据节点会持有分片的数据副本和主分片。

  • 理论上,分片数量应能够均匀分布在所有节点上,因此你可以设置分片数量为节点数量的倍数,例如 6、12、18 等。

  • 对于一个有 6 个数据节点的集群,设置为 6 或 12 个分片是常见的选择。这样,每个节点可以持有 1 个或 2 个主分片。

2. 数据量考虑

  • 每个分片的大小通常不宜超过 50GB(较大索引可以适当调整),否则会影响查询性能。

  • 如果你的索引预计会很大,考虑设置更多的分片,例如 12 或 18,这样每个分片的大小会更小,性能也能得到更好的保障。

3. 写入负载

  • 如果你的写入负载很高,可能需要更多的分片来处理高并发的写入操作。如果你的索引写入压力较小,那么较少的分片数量就足够了。

4. 副本数量

  • number_of_replicas(副本数量)也影响资源分配,副本会占用额外的存储空间。如果副本数量为 1,则每个分片会有 1 个副本,实际分片数会是主分片的 2 倍。

  • 例如,如果你设置 number_of_shards: 6number_of_replicas: 1,那么每个节点上会有 2 个分片副本(主分片和副本分片)。

推荐设置:

  1. 小规模索引(数据量小于 50GB):

    • 设置为 6 个分片。

  2. 中等规模索引(数据量大约在 50GB 到 200GB):

    • 设置为 12 个分片。

  3. 大型索引(数据量超过 200GB):

    • 设置为 18 或 24 个分片,确保每个分片不超过 50GB。

示例:

假设你的索引数据量较小,设置为 6 个主分片:

"number_of_shards": 6,
"number_of_replicas": 1

如果数据量更大,则设置更多的分片,例如:

"number_of_shards": 12,
"number_of_replicas": 1

总结:

  • 对于 6 个节点,number_of_shards 可以设置为 6 或 12。选择的关键是根据数据量、性能需求和负载来决定。

我之前的某一个索引的情况如下:

uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   market-subjects-merged-v3                                         T1leCfXERre6GGKJbq97Jw   6   4  435224398    112661324      1.6tb        387.6gb

这说明 market-subjects-merged-v3 索引的分片设置为 6 个主分片(pri: 6),并且副本数量为 4(rep: 4),当前索引存储了约 16TB 的数据。

分析:

  • 主分片数量(pri:6

  • 副本数量(rep:4

  • 文档数:约 4.35 亿条文档

  • 存储大小

    • 总大小(store.size:约 1.6TB

    • 每个主分片的大小(pri.store.size:约 387.6GB

对应的 number_of_shards 设置:

  • 每个分片的大小接近 387.6GB,远超过了常见的推荐分片大小(通常不超过 50GB)。

  • 这可能会影响查询和写入性能,因为分片过大会导致分片迁移和数据读取速度慢,尤其是在节点故障恢复和负载均衡时。

建议:

  1. 分片过大:当前的每个主分片超过了 350GB(最好的做法是将每个分片限制在 50GB 左右),这可能影响性能。

  2. 减小分片大小

    • 如果可能的话,建议重建索引,将 number_of_shards 设置为更多的分片,例如 12 或 18,以便每个分片的大小更合理,约为 100GB 或更小。

    • 可以根据数据量估算每个分片的大小,并优化索引设计。

示例优化:

假设你打算将每个分片的大小保持在 50GB 以下,考虑到索引的数据量(约 1.6TB),可以重新设置主分片数为 32 或 36 个分片,以确保每个分片的大小合理:

"number_of_shards": 36,
"number_of_replicas": 1

这样,每个分片的大小将接近 45GB,符合 Elasticsearch 的最佳实践,提升查询和写入性能,并避免分片过大的问题。

其他优化:

  • 副本数量(rep:根据实际需求决定是否需要如此多的副本。副本数量过多不仅占用存储,还可能增加集群的负载。如果没有严格的高可用要求,可以减少副本数量,例如设置为 1。

  • 定期合并分片:考虑使用索引生命周期管理(ILM)来定期合并分片并归档历史数据,避免过多的小分片。

总结,建议你调整 number_of_shards 来减小每个分片的大小,并根据数据量和负载来决定副本数量。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
广告 广告

评论区