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

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。

相关推荐
Elastic 中国社区官方博客8 小时前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
隔壁老王1569 小时前
mysql实时同步到es
数据库·mysql·elasticsearch
SunnyRivers10 小时前
关于ES中text类型时间字段范围查询的结构化解决方案
elasticsearch·时间·text·范围查询
API_technology11 小时前
电商搜索API的Elasticsearch优化策略
大数据·elasticsearch·搜索引擎
stone.eye14 小时前
阿里云通过docker安装skywalking及elasticsearch操作流程
elasticsearch·阿里云·docker·skywalking
fruge19 小时前
git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行
大数据·git·elasticsearch
飞火流星020271 天前
ElasticSearch公共方法封装
elasticsearch·搜索引擎·es鉴权·es代理访问·es公共方法封装·es集群访问·判断es索引是否存在
vvvae12341 天前
Elasticsearch实战应用:从“搜索小白”到“数据侦探”的进阶之路
elasticsearch
yinbp1 天前
bboss v7.3.5来袭!新增异地灾备机制和Kerberos认证机制,助力企业数据安全
大数据·elasticsearch·微服务·etl·restclient·bboss