elasticsearch的shard优化

这篇具有很好参考价值的文章主要介绍了elasticsearch的shard优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

shard简介

Elasticsearch 中的数据会整理为索引。每个索引又由一个或多个分片组成。每个分片都是一个 Lucene 索引实例,您可以将其视作一个独立的搜索引擎,它能够对 Elasticsearch 集群中的数据子集进行索引并处理相关查询。
分片是 Elasticsearch 在集群内分发数据的单位。Elasticsearch 在对数据进行再平衡(例如发生故障后)时移动分片的速度取决于分片的大小和数量,以及网络和磁盘性能。

刷新

数据写到分片上周,会定期写到磁盘上不可更新的lucene段中,这个时候数据遍可以查询了,这个就是刷新。

合并

随着段数越来越多,这些段会定期合并为更大的段。这一过程称为合并。由于所有段都是不可更改的,这意味着在索引期间所用磁盘空间通常会上下浮动,这是因为只有合并后的新段创建完毕之后,它们所替换的那些段才能删掉。合并是一项极其耗费资源的任务,尤其耗费磁盘 I/O。

index可能带来的问题

对于每个 Elasticsearch 索引,mapping映射和状态的相关信息都存储在集群状态中。这些信息存储在内存中,以便快速访问。因此,如果集群中的索引和分片数量过多,这会导致集群状态过大,如果mapping映射较大的话,尤为如此。这会导致更新变慢,因为所有更新都需要通过单线程完成,从而在将变更分发到整个集群之前确保一致性。

解决

  1. 对于数据量小的数据,可以使用一个固定名字或者按照月/年存储数据到index,有助于减少存储在集群中的索引和分片数量。
  2. 相似数据结构的数据都存储到一个index中,有助于减少存储在集群中的索引和分片数量。

shard可能带来的问题

  1. 一个shard底层为一个lucene索引,会消耗一定文件句柄,内存,cpu等。例如堆内存会存储分片级别以及段级别信息的数据结构,因为只有这样才能确定数据在磁盘上的存储位置。这些数据结构的大小并不固定,不同用例之间会有很大的差别。
  2. 每个search请求都需要命中index中的shard,如果每一个shard都处于不同的节点还好,如果多个shard都需要在同一个节点上竞争使用相同的资源,可能导致效率降低。
  3. 用于计算相关度的词项统计信息是基于分片的。如果有许多分片,每一个都只有很少的数据会导致很低的相关度。
  4. 在 Elasticsearch 中,每个查询都是在单个分片上以单线程方式执行的。然而,可以同时对多个分片进行处理。这意味着,最低查询延时(假设没有缓存)将取决于数据、查询类型,以及分片大小。尽管查询很多个小分片会加快单个分片的处理速度,但是由于有很多任务需要进入队列并按顺序加以处理,所以与查询较少的大分片相比,这种方法并不一定会加快查询速度。如果有多个并发查询,拥有很多(成百上千)小分片还会降低查询吞吐量。
  5. shard过大,导致集群故障后恢复缓慢,写入放大,导致  bulk queue打满,拒绝率上升
  6. shard过小,导致shard的段过小,无法充分利用多节点资源,机器资源不均衡,影响段合并效率和浪费资源

优化shard的办法

  • shard大小官方通常建议介于20GB至40GB之间
  • 尽管并没有关于shard大小的固定限值,但是官方建议将50GB作为shard大小的上限。
  • 多个shard尽量分布再不同的节点。因为一个index对应的shard在每个节点分配一个对性能提升最好。考虑到高可用和吞吐量,shard是需要配置副本的,故建议根据此公式平衡节点数量,主shard,shard副本的关系:

Max number of nodes = Number of primary shards * (number of primary shard replicas +1)

  • 对于数据量小的数据,可以使用一个固定名字或者按照月/年存储数据到index,有助于减少存储在集群中的索引和分片数量。
  • 建议把每天的数据存储到按照天命名的index中。此类index允许用户在很细的粒度层面管理保留期,也方便用户根据每天不断变化的数据量轻松进行调整,也有助于降低单个shard的大小。
  • 相似数据结构的数据都存储到一个index中,有助于减少存储在集群中的索引和分片数量。
  • 使用shrink index API把数据量小且使用了多个shard的index压缩成较少shard的index。
  • 确保对于节点上已配置的每个GB堆内存,将分片数量保持在20以下。如果某个节点拥有30GB的堆内存,那其最多可有600个分片,但是在此限值范围内,您设置的分片数量越少,效果就越好。

每个节点的 maximum shards open 设置为多大合适

es 7.x 版本后默认单个节点最大分片数为1000。对于分片数的大小,业界一致认为分片数的多少与内存挂钩,认为 1GB 堆内存对应 20-25 个分片。

每个节点可以存储的分片数和可用的堆内存大小成正比关系。

Elastic 官方博客文章建议:堆内存和分片的配置比例为1:20,举例:30GB堆内存,最多可有600个分片。因此,具有30GB堆的节点最多应有600个分片,但是越低于此限制,您可以使其越好。而一个分片的大小不要超过50G,通常,这将有助于群集保持良好的运行状况。

总结

es中并不是shard数量越多越好,也不是shard越小越好,要根据实际情况来优化shard相关参数。文章来源地址https://www.toymoban.com/news/detail-472562.html

到了这里,关于elasticsearch的shard优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • org.elasticsearch.action.search.SearchPhaseExecutionException: all shards failed

    ES节点两个,使用filebeat采集日志后输出到logstash,进一步输出到ES。但是输出到ES后,节点的健康状态就由绿色变为了红色,且ES-head界面的数据浏览中点击索引后ES后台就报错,显示无法分片: 找了很长时间原因,最后在执行DSL指令 curl -XGET \\\"http://192.168.137.132:9200/_cluster/alloc

    2024年02月11日
    浏览(41)
  • Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

    Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed] 今天在做项目遇到这个问题,Es那边出现了问题,谷粒商城去Es中查数据的时候,根据品牌id去查询数据报错。   {\\\"error\\\":{\\\"root_cause\\\":[{ \\\"type\\\":\\\"query_shard_exception\\\",\\\"reason\\\":\\\"failed to create query: {n  \\\"bool\\\" : {n    \\\"fil

    2024年02月02日
    浏览(31)
  • Elasticsearch --- 简介、安装

    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: 在GitHub搜索代码 在电商网站搜索商品   在百度搜索答案     elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、

    2024年02月05日
    浏览(26)
  • ElasticSearch(一)【简介】

    1.1 概述 什么是ElasticSearch ElasticSearch 简称ES,是基于 Apache Lucene 构建的 开源搜索引擎 ,是当前最流行的企业级搜索引擎。Lucene本身就可以被认为迄今为止性能最好的一款开源所搜引擎工具包,但是Lucene的API相对复杂,需要深厚的搜索理论。很难集成到实际应用当中去。 ES采用

    2024年02月08日
    浏览(24)
  • ElasticSearch(二)简介

    Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。 它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。 Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elastics

    2024年02月05日
    浏览(22)
  • Elasticsearch简介及安装

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 官方文档地址 :https://www.elastic.co

    2024年02月11日
    浏览(64)
  • Elasticsearch 简介(太棒了)

    掌握它才说明你真正懂 Elasticsearch - ES(三) | Elasticsearch 技术论坛 Elasticsearch 是使用 Java 编写的一种开源搜索引擎,它在内部使用 Luence 做索引与搜索,通过对 Lucene 的封装,提供了一套简单一致的 RESTful API。 Elasticsearch 也是一种分布式的搜索引擎架构,可以很简单地扩展到上

    2024年02月07日
    浏览(26)
  • ElasticSearch简介及常见用法

    Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。 Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 可以快速 索引、搜索和分析 海量数据。 Ela

    2024年03月20日
    浏览(33)
  • Elasticsearch的倒排索引简介

    Elasticsearch的倒排索引(Inverted Index)是其能够快速执行全文搜索查询的关键技术。为了理解倒排索引的工作原理,我们可以将其与传统的正向索引进行比较。 正向索引(Forward Index) 在正向索引中,索引是以文档为中心构建的。每个文档ID映射到它包含的一系列词汇上。例如

    2024年03月16日
    浏览(41)
  • 引言:ElasticSearch简介和目标

    ElasticSearch是一个开源的搜索和分析引擎,基于Lucene库构建,具有高性能、可扩展性和实时性等优势。它广泛应用于企业级搜索、日志分析、监控等场景。本文将深入探讨ElasticSearch的背景、核心概念、算法原理、最佳实践、应用场景、工具推荐等方面,为读者提供一个全面的

    2024年02月20日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包