关于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。

相关推荐
AI_Claude_code2 小时前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx
RD_daoyi8 小时前
新手小白独立站运营实操手册:从0到1跑通流量-转化-留存闭环
搜索引擎
老纪的技术唠嗑局9 小时前
告别OpenClaw配置丢失——Mindkeeper内测版邀测
大数据·elasticsearch·搜索引擎
老陈头聊SEO9 小时前
高效整合长尾关键词以提升网站SEO排名的有效策略
其他·搜索引擎·seo优化
key_3_feng9 小时前
揭秘AI的“语言积木“:Token科普之旅
人工智能·搜索引擎·token
Elasticsearch9 小时前
使用 Elasticsearch + Jina embeddings 进行无监督文档聚类
elasticsearch
勇哥的编程江湖11 小时前
flinkcdc streaming 同步数据到es记录过程
大数据·elasticsearch·flink·flinkcdc
曾阿伦11 小时前
Elasticsearch 7.x 常用命令备忘录
大数据·elasticsearch·搜索引擎
斯特凡今天也很帅12 小时前
Elasticsearch数据库专栏(二)DSL语句总结(更新中)
大数据·elasticsearch·搜索引擎
要记得喝水12 小时前
适用于 Git Bash 的脚本,批量提交和推送多个仓库的修改
git·elasticsearch·bash