Elasticsearch虽然搜索很快,但如果分片设置不当,当数据量达到一个量级后,查询速度也会直线下降。

如果一个索引具有很大的数据量,它的数据量可能会超出单个节点的容量限制(硬盘容量),而且单个节点数据量过大,执行性能也会随之下降,每个搜索请求的执行效率都会降低。 为了解决上述问题, Elasticsearch 提出了分片的概念,索引将划分成多份,称为分片。当创建索引时,可以很简单的指定想要的分片数量。每个分片都是功能齐全的,独立的“索引”,驻留在集群的各个节点中。

分片的作用

Elasticsearch 中的分片其实就是 Lucene 索引。

分片有两个主要的用处:

  • 水平划分数据
  • 多个分片分发工作,并行执行,从而提高性能,吞吐量

分片分为主分片和副本分片。副本分片主要功能如下:

  • 高可用性:副本分片作为数据备份,当某个主分片发生故障时,副本分片能够成为新的主分片,保证服务的可用性。
  • 提高性能:副本分片本身也是一个功能齐全的独立的分片(所以才能够随时取代故障的主分片),当有查询请求时,既可以在主分片中完成查询,也可以在副本分片中完成查询,当然数据添加、更新的操作只能在主分片中完成。

副本分片与主分片需要分配在不同的节点上,一是为了更好的均衡负载,不同节点上二是节点发生故障时,主分片和副本分片一起故障,没法保证高可用性。所以 Elasticsearch 集群最好要有 2 个节点或以上。

一个索引默认有 5 个主分片,每个主分片默认有 1 个副本分片,即创建一个索引默认会有 10 个分片。

实际应用举例

场景1:数据量大小约为10GB, 用于输入时自动提示场景,数据每天定时更新部分字段。ES集群有5台机器。

方案一:主分片数=1,副分片数=4,每个节点持有一个分片。

  • 优点:每个节点持有一个分片,读请求可以在一个分片获取结果,不需要合并结果等操作。
  • 缺点:索引写入的时候,全部请求到主分片的机器,再由主分片同步到副分片,由于副分片较多,写入过程变慢。

方案二:主分片数=2,副分片数=4,每个节点持有一个主分片和一个副分片。

  • 优点:副分片变少,对写入操作友好。
  • 缺点:多个分片分散在不同节点上,请求会发布到各个分片号上取topN汇总。由于评分是在各个分片内进行,在本场景中存在TF/IDF评分差异,导致返回结果排序问题。

考虑业务场景,最终选择方案一。

场景2:在ELK(ELK是Elasticsearch、Logstash、Kibana的简称)中,想一下, 大部分的 Logstash 用户并不会频繁的进行搜索, 甚至每分钟都不会有一次查询. 所以这种场景, 推荐更为经济使用的设置. 在这种场景下, 搜索性能并不是第一要素, 所以并不需要很多副本。

总结

  • 读远大于写的场景,可以减少主分片个数,增加副本数,提升读吞吐率,前提是写的优先级不高。极端情况下单分片多副本可以最大程度提升总的读吞吐。
  • 写远大于读的场景,最大程度分配主分片个数,一个机器一个,并最大程度减少副本数(极端情况下集群规模不大且可用性优先级较低时可以不要副本)。

分片的大小和数量怎么设定?

注1:小的分片会造成小的分段,从而会增加开销。我们的目的是将平均分片大小控制在几 GB 到几十 GB 之间。对于基于时间的数据的使用场景来说,通常将分片大小控制在 20GB 到 40GB 之间。

注2:由于每个分片的开销取决于分段的数量和大小,因此通过 forcemerge 操作强制将较小的分段合并为较大的分段,这样可以减少开销并提高查询性能。 理想情况下,一旦不再向索引写入数据,就应该这样做。 请注意,这是一项比较耗费性能和开销的操作,因此应该在非高峰时段执行。

注3:我们可以在节点上保留的分片数量与可用的堆内存成正比,但 Elasticsearch 没有强制的固定限制。 一个好的经验法则是确保每个节点的分片数量低于每GB堆内存配置20到25个分片。 因此,具有30GB堆内存的节点应该具有最多600-750个分片,但是低于该限制可以使其保持更好。 这通常有助于集群保持健康。

注4:如果担心数据的快速增长, 建议根据这条限制: ElasticSearch推荐的最大JVM堆空间是 30~32G, 把分片最大容量限制为 30GB, 然后再对分片数量做合理估算。例如, 如果的数据能达到 200GB, 则最多分配7到8个分片。

开源地址

https://github.com/qfjiaoyan/elasticsearch-examples

es的分片和副本_Elasticsearch 索引分片与副本设置技巧相关推荐

  1. 设置文件副本数_ElasticSearch平滑批量缩减索引分片数实践

    一.背景    Elasticsearch作为开源分布式检索分析引擎,具有近实时的检索能力.海量数据的分布式存储能力.海量数据的近实时分析能力,目前广泛应用于国内外互联网公司.站内检索.订单类数据的多 ...

  2. es的分片和副本_Elasticsearch 集群分配多少分片合理

    Elasticsearch 是一个非常通用的平台,支持各种用户实例,并为组织数据和复制策略提供了极大的灵活性.但是,这种灵活性有时会使我们很难在早期确定如何很好地将数据组织成索引和分片,尤其是不熟悉 ...

  3. es的分片和副本_Elasticsearch的分布式存储与分片内部原理

    1.文档如何存储 1.1 分片与路由 当索引一个文档的时候,文档会被存储到一个主分片中.Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存 ...

  4. es动态分配分片_解决ES索引分片均衡问题

    运行了两年的ES集群,今天索引节点突然不均衡,新建索引分片都集中到一个节点上了,如下图: 同时还有部分节点分片在恢复,如上图,有432个待恢复分片,而且只有两个分片在同时恢复,网络吞吐也很小,这要等到 ...

  5. Elasticsearch之如何合理分配索引分片

    大多数ElasticSearch用户在创建索引时通用会问的一个重要问题是:我需要创建多少个分片? 在本文中, 我将介绍在分片分配时的一些权衡以及不同设置带来的性能影响. 如果想搞清晰你的分片策略以及如 ...

  6. 【Elasticsearch】es 集群健康值 红色 red 分片 未分配

    1.概述 转载:https://zhuanlan.zhihu.com/p/101608973 转载这篇文章是因为根据我的文章 [Elasticsearch]elasticsearch 7.x 查看分片 ...

  7. 优化Elasticsearch之如何合理分配索引分片

    大多数ElasticSearch用户在创建索引时通用会问的一个重要问题是:我需要创建多少个分片? 在本文中, 我将介绍在分片分配时的一些权衡以及不同设置带来的性能影响. 如果想搞清晰你的分片策略以及如 ...

  8. 集群节点数和分片数关系_Elasticsearch最佳实践之分片使用优化

    一.遇到的问题 与大多数分布式系统一样,Elasticsearch按照一定的Hash规则把用户数据切分成多个分片,然后打散到不同机器进行存储,从而实现大规模数据的分布式存储. cluster.png ...

  9. mysql副本集_mongodb分片+副本集总览

    由于51cto的编辑不太好用,这是有道上的文档http://note.youdao.com/noteshare?id=aedd53c99b4a97aebbe9af136104113a 在 MongoD ...

最新文章

  1. 985 CV 找不到工作? 4 点诚恳建议
  2. vue openlayer单击地图事件循环多次执行_12道vue高频原理面试题,你能答出几道?
  3. docker-compose安装rabbitmq
  4. Spring Cloud微服务之子模块的创建(二)
  5. php 框架效率测试,2017 非标准 PHP 框架性能测试比较
  6. 并发编程3-线程调度
  7. 记录——《C Primer Plus (第五版)》第十章编程练习第十一题
  8. Laravel使用腾讯云COS服务
  9. (HDFS)搭建eclipse搭建hadoop开发平台以及hdfs api调用——大数据分析及其可视化4
  10. TensorFlow开发者证书 中文手册
  11. 在CentOS中安装MySql数据库教程
  12. 《逻辑思维训练》读书笔记
  13. wifi分析仪怎么看哪个信道好_一定得学的切换WiFi信道技巧,让你的网速如飞!...
  14. Google浏览器安装插件
  15. linuxeth0路径_linux 驱动 路径(最新更新)网卡驱动路径
  16. html 直线 斜线,css如何画斜线?
  17. BRL_CAD 教程
  18. linux及林纳斯-托沃兹
  19. 5G NSA 和SA 介绍
  20. 风雨人生,自己撑伞=

热门文章

  1. 汇编语言的C状态寄存器,汇编指令-状态寄存器、cmp、test、jz等指令详细说明
  2. 使用多线程往同一个文件写入数据的线程安全的例子(java实现)
  3. 工程经济—价值工程在工程建设中的应用
  4. 基于中文维基百科的词向量构建及可视化
  5. linux 硬连接和软连接
  6. Outlook-VBA-03-收件箱附件处理
  7. Windows XP启动脚本
  8. flink sql 连接kafka avro序列化异常 Failed to deserialize Avro record ArrayIndexOutOfBoundsException
  9. 2021影像上海艺术博览会即将回归,多维度呈现本土影像艺术活力
  10. wlmedia播放器集成(4)— 实现视频播放