关于ES分片设置的6个建议

ElasticSearch的分片设置对性能至关重要。建议分片大小不超过50GB,最好大于1GB,每个GB堆内存配置的分片数不超过20。时序型索引利于管理数据保留期和调整分片数量。forcemerge操作能优化段大小,应在索引无写入时执行。高效搜索推荐内存-磁盘比为1:30。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ElasticSearch并没有对分片数量和大小做硬性限制,但分片的设置对ES后期的顺畅使用又至关重要,那么最常见的2个问题:

纯干货

  • “我应该设置多少个分片?答:最大20个分片/GB内存”
  • “我应该设置多大的分片?答:小于50GB,但最好大于1GB。”

分片是 Elasticsearch 在集群内分发数据的单位。Elasticsearch 在对数据进行再平衡(例如发生故障后)时移动分片的速度取决于分片的大小和数量,以及网络和磁盘性能。

分片背后的机制:

  1. 数据写到分片上之后,会定期发布到磁盘上不可更改的新 Lucene 段中,此时,数据便可用于查询了。这称为刷新。
  2. 随着段数越来越多,这些段会定期合并为更大的段。这一过程称为合并。合并是一项极其耗费资源的任务,尤其耗费磁盘 I/O。
  3. 已删除文档仍将继续占用磁盘空间和系统资源,直至将它们合并,而合并过程也会消耗大量系统资源。

Tips 1:避免分片过大,因为这样会对集群从故障中恢复造成不利影响。尽管并没有关于分片大小的固定限值,但是人们通常将 50GB 作为分片上限,而且这一限值在各种用例中都已得到验证。

Tips 2: 但凡可能,尽量使用时序型索引来管理数据保留期。根据保留期限对数据分组,将它们存储到索引中。通过时序型索引,用户还能随着时间推移轻松调整主分片和副本分片的数量,这是因为用户可针对要生成的下个索引进行这方面的更改。这样便能简化对不断变化的数据量和数据要求的适应过程。

从集群角度来说,索引和分片都不是免费的,因为每个索引和分片都会产生一定的资源开销。

Tips 3: 分片过小会导致段过小,进而致使开销增加。您要尽量将分片的平均大小控制在至少几 GB 到几十 GB 之间。对时序型数据用例而言,分片大小通常介于 20GB 至 40GB 之间。

Tips 4: 由于单个分片的开销取决于段数量和段大小,所以通过forcemerge操作强制将较小的段合并为较大的段能够减少开销并改善查询性能。理想状况下,应当在索引内再无数据写入时完成此操作。请注意:这是一个极其耗费资源的操作,所以应该在非高峰时段进行。

Tips 5: 每个节点上可以存储的分片数量与可用的堆内存大小成正比关系,但是 Elasticsearch 并未强制规定固定限值。这里有一个很好的经验法则:确保对于节点上已配置的每个 GB,将分片数量保持在 20 以下。如果某个节点拥有 30GB 的堆内存,那其最多可有 600 个分片,但是在此限值范围内,您设置的分片数量越少,效果就越好。一般而言,这可以帮助集群保持良好的运行状态。

以“每GB堆内存配置20个以下分片为目标”的经验法则在ES 8.3 版中已被弃用。

Tips 6: 对于高效搜索(热数据),建议“内存-磁盘”比率在1:30为佳,也就是60GB内存可以支撑的检索数据量约1.8TB。对于温数据或冷数据则不受此限制,甚至可以拓展到1:180。

最佳实践扩展

在Elasticsearch中,分片的设置是一个关键的决策点,它直接影响到集群的性能和可扩展性。以下是一些关于分片设置的最佳实践和建议:

  1. 分片数量:通常建议每个分片的大小不超过50GB,但最好大于1GB。分片过大或过小都不利于集群的性能和可扩展性。过大的分片会增加恢复时间,而过小的分片则会导致资源开销增加。

  2. 分片与内存的关系:每个节点上可以存储的分片数量与可用的堆内存大小成正比关系。一个经验法则是,确保对于节点上已配置的每个GB,将分片数量保持在20以下。例如,如果节点有30GB的堆内存,那么最多可以有600个分片。

  3. 分片分配策略:Elasticsearch的ShardsAllocator组件负责分片的分配和迁移。分配策略的目标是使集群所有节点负载一致,确保流量均匀分布。

  4. 分片分配的触发时机:创建索引、节点加入或离开集群、分片分配相关配置修改、索引副本数增加或减少等情况都会触发分片分配。

  5. 副本分片:副本分片的数量可以随时更改,而不会中断索引或查询操作。通常,副本分片用于提供高可用性和读取容量。

  6. 集群扩展:随着数据量的增加,可以通过增加分片数和机器数来扩展集群。Elasticsearch会自动迁移分片以重新平衡集群。

  7. 索引和分片的资源开销:每个索引和分片都会产生一定的资源开销。因此,合理规划分片数量和大小对于集群的性能至关重要。

  8. 时序型索引:对于时序型数据,使用时序型索引来管理数据保留期是一个好方法。这样可以随着时间推移轻松调整主分片和副本分片的数量。

  9. 分片合并:通过forcemerge操作强制将较小的段合并为较大的段,可以减少开销并改善查询性能。但这是一个耗费资源的操作,应该在非高峰时段进行。

  10. 内存-磁盘比率:对于高效搜索(热数据),建议“内存-磁盘”比率在1:30为佳,也就是60GB内存可以支撑的检索数据量约1.8TB。对于温数据或冷数据则不受此限制,甚至可以拓展到1:180。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024点线面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值