【ElasticSearch】分片分配策略详解(设计目标&执行策略)

这篇具有很好参考价值的文章主要介绍了【ElasticSearch】分片分配策略详解(设计目标&执行策略)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是分片

集群由多个节点组成,每个节点上有多个索引
Elasticsearch 索引实际上只是一个或多个物理分片的逻辑分组,其中每个分片实际上是一个独立的索引。分片上的段文件是实际存储的数据。分为主、副,索引中主分片的数量在创建索引时是固定的,但副本分片的数量可以随时更改,而不会中断索引或查询操作。一般通过滚动索引的方式加分片(例如ILM)

es索引分片策略,elasticsearch,大数据,搜索引擎,分布式

分片的作用是什么

  • 提供集群横向扩展能力。通过将索引中的文档分布在多个分片上,并将这些分片分布在多个节点上,当数据量增大时增加分片数量,再增加节点数量,从而提供集群横向扩展能力。

  • 提供高可用。Elasticsearch 可以确保冗余,这既可以防止硬件故障,又可以在将节点添加到集群时增加查询容量,因为主和副都可以被查询,分摊查询流量。

  • 提升查询容量。当数据量上涨时,可以通过增加分片数和机器数解决

分片分配的目标

集群所有节点负载一致。

每个分片都占用高 CPU、RAM、磁盘和网络使用率等资源,分片的分配也就决定了每个节点的负载,目标是集群所有节点负载一致

Elasticsearch 如何在节点上分配分片影响每一个节点的负载,也就影响集群的性能。如果所有流量都流向一两个节点,因为它们包含集群中的活动索引,那么这些节点将显示高 CPU、RAM、磁盘和网络使用率。而集群中其他数十或数百个节点处于空闲状态。分片接收读写流量,并消耗磁盘、内存、JVM 堆和网络等资源。数据节点上的总体资源消耗(工作负载)取决于它拥有的分片和它们接收的流量。分片的平衡分布对应于均匀的工作负载和高效的节点利用率。在 Elasticsearch 中,这个职责属于 ShardsAllocator 组件。

什么时候会分配分片

集群元数据更改且可能影响分片放置时触发分片分配

  • 创建索引
  • 节点加入或离开集群
  • 分片分配相关配置修改时
  • 索引副本数增加或减少
  • 等等…

控制分片分配的组件

ShardsAllocator

分片分配的入口点。对于分片分配和迁移做出决策。ShardsAllocator 是 Elasticsearch 中的一个接口,其实现负责分片放置。当分片因任何原因未分配时,ShardsAllocator 决定在集群中的哪些节点上放置它们。

作用

allocateUnassigned

根据权重算法和decider决定将未分配的分片分片分配到哪个节点,将分配信息更新到集群状态,由master广播下去。

流程:

  1. 当新索引创建时,其shard均处于未分配状态,该流程会遍历所有分片,根据是否为primary,shardid(小的优先),索引优先级进行排序,这可确保 Elasticsearch 为尽可能多的索引分配所有主索引,而不是创建多个部分分配的索引。一旦 Elasticsearch 分配了所有主索引,它就会移动到每个索引的第一个副本。索引优先级,看索引的priority配置,创建时间和名字。.security7配置了最高的优先级1000,确保优先可用。
  2. 遍历过程中会对每个分片进行分配决策,决策中遍历每个node,先根据权重函数计算权重,再遍历所有decider进行判断(can allocate),例如disk 90% , 已有same shard,total shard per node配置达到阈值
  3. 选择权重最小,decider均通过的节点进行分配分片,更改集群元数据
moveShards

对分片根据decider来判断是否需要迁移,若需要,也根据上述的方法选择节点

流程:

  1. 遍历所有已分配分片

  2. 使用所有decider的canRemain判断是否需要迁移

  3. 若需要迁移使用allocateUnassigned中的方法找到目标节点

  4. 迁移分片到该节点

balance

应对集群扩缩容等情况,根据权重算法平衡集群的节点,平衡过程就是将权重大节点上的分片迁移到权重小的节点,决策也会经过decider。随着集群的增长(或缩小),Elasticsearch 会自动迁移分片以重新平衡集群。当您达到工作负载限制时,您可能会决定添加更多节点来扩展集群。 Elasticsearch 应该自动检测这些节点并重新定位分片以实现更好的分布。使用权重函数进行打分。与具有较低权重值的节点相比,具有高权重值的节点不太适合放置分片。计算每个节点上每个索引的权重,以及索引的最小和最大可能权重之间的差异。优先对权重差最大的索引进行rebalance。避免中间状态影响过大,导致进一步的rebalance。对最大和最小节点上的shard进行relocate,直到差值小于阈值,会使用decider的can rebalance进行判断,直到遍历完所有索引。使得集群更加平衡,但分片迁移消耗资源,在这两点之间进行平衡的参数就是threhold参数。

流程:

  1. 根据权重函数计算每个索引在每个节点上的权重

  2. 根据索引节点间的权重差排序索引

  3. 遍历所有索引,优先对权重差大的索引rebalance

  4. 对该索引权重最大和最小的两个节点进行迁移分片,直到权重差小于阈值或者尝试迁移遍历完所有节点组

  5. 直到遍历完所有索引

Decider

决定分片是否可以在某个节点放置。Decider有多个,所有decider都通过才可以分配。例如ConcurrentRebalanceAllocationDecider,EnableAllocationDecider。可以很方便的实现根据配置和人工干预调整分片分配策略。

作用:

  • canAllocate 给定分片是否可以分配到节点,disk 85%,exclude,shard数量限制,sameshard
  • canRemain 给定分片是否可以保留在所在节点exclude,disk 90
  • canRebalance 给定分片是否可以rebalance 并发配置

权重函数

该函数确保所有节点拥有相同数量的分片,并且每个索引的分片分布在节点之间。如果一个节点持有太多分片,它与每节点平均分片的偏差很大,这会增加分片权重因子。如果一个索引的太多分片落在同一个节点上,它与每节点平均分片对索引的偏差就会增加,从而增加索引权重因子。这两者都增加了节点上分片的整体权重,分片将会被移动到权重较小的节点。对于大多数用例来说,这是一个合理的信号。与具有较少分片的节点相比,具有更多分片的节点获得更多流量,并且具有更多的磁盘、CPU 和内存消耗。分片计数是一个统一的信号。 JVM 堆、CPU 或内存消耗等指标波动非常频繁.文章来源地址https://www.toymoban.com/news/detail-859502.html

mean-shards-per-node = 
num-of-shards-in-cluster / num-nodes-in-cluster
mean-shards-per-node-for-index = 
num-shards-for-index / num-nodes-in-cluster
total-shard-weight = 
theta0 * (num-shards-on-node – mean-shards-per-node)
index-shard-weight = 
theta1 * (num-index-shards-on-node – mean-shards-per-node-for-index)
Weight (index, node) = total-shard-weight + index-shard-weight
# theta0和theta1是用户自定义的参数,默认0.450.55
# theta0 + theta1 = 1

到了这里,关于【ElasticSearch】分片分配策略详解(设计目标&执行策略)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch基础篇(七):分片大小修改和路由分配规则

    在Elasticsearch中,分片是对索引数据的水平划分和分布。索引被分成多个分片,每个分片可以在集群的不同节点上存储。这种分片的设计提供了一种水平扩展的能力,允许将大量数据分布到多个节点上,从而提高性能和可伸缩性。每个分片就是一个Lucene的实例,具有完整的功能

    2024年01月21日
    浏览(60)
  • 目标检测正负样本分配策略----ATSS

    一、ATSS 参考:https://blog.csdn.net/xuzz_498100208/article/details/110355048 https://zhuanlan.zhihu.com/p/411659547 作者提出了一种自适应的选取正样本的方法,具体方法如下: 1.对于每个输出的检测层,选计算每个anchor的中心点和目标的中心点的L2距离,选取K(mmdetection的topK是9)个anchor中心点离

    2024年02月02日
    浏览(48)
  • Elasticsearch 分片策略

    和数据库中的表空间类似,不过分片是为每个索引设置,一个索引可以有多个分片,分片分为主分片和副本分片,主分片和副本分片类似于数据库中的主库和备库。 主分片(shards):可以有一个或多个,但至少会有一个,默认为1。多个主分片类似于分表,可以提高大量数据

    2024年02月05日
    浏览(40)
  • Elasticsearch:如何使用集群级别的分片分配过滤(不包括节点)安全地停用节点

    当你想停用 Elasticsearch 中的节点时,通常的过程不是直接销毁节点。 如果你这样做,那么你就有数据丢失的风险,这不是你想要对应该是可靠的数据库做的事情。 这样做的问题是,节点很可能会通过 Elasticsearch 处理的恰当命名的分片分配分配给它们的分片。 Elasticsearch 中的

    2024年02月07日
    浏览(46)
  • ElasticSearch学习笔记-第四章 ES分片原理以及读写流程详解

    在学习ES分片原理以及读写流程之前,需要先学习一些ES的核心概念以及ES集群环境的相关知识 4.1 ES核心概念 4.1.1 索引 索引(Index)相当于MySQL中的数据库,一个索引就是一个拥有几分相似特征的文档的集合。 4.1.2 类型 类型(Type)相当于MySQL中的表,一个类型就是索引的一个逻辑上

    2024年02月06日
    浏览(62)
  • es索引分片重新分配cluster.routing.allocation

    Index-level shard allocation filtering | Elasticsearch Guide [master] | Elastic index.routing.allocation.include.{attribute} Assign the index to a node whose  {attribute}  has at least one of the comma-separated values. index.routing.allocation.require.{attribute} Assign the index to a node whose  {attribute}  has  all  of the comma-separated values. i

    2024年02月09日
    浏览(46)
  • 深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略

    倒排索引是一种用于快速检索的数据结构,常用于搜索引擎和数据库中。与传统的正排索引不同,倒排索引是根据来建立索引,而不是根据文档ID。 倒排索引的建立过程如下:首先,将每个文档拆分成一系列的或词项,然后建立一个词项到文档的映射。对每个关

    2024年02月12日
    浏览(55)
  • kafka分区分配策略

    现有主流消息中间件都是生产者-消费者模型,主要角色都是:Producer - Broker - Consumer,上手起来非常简单,但仍有需要知识点需要我们关注,才能避免一些错误的使用情况,或者使用起来更加高效,例如本篇要讲的kafka分区分配策略。 在开始前我们先简单回顾一下kafka消息存储

    2024年02月16日
    浏览(44)
  • Java设计模式之策略模式详解

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同踏入Java设计模式之策略模式的世界,探讨代码中的智慧抉择。 策略模式的核心思想 策略模式是一种行为型设计模式,它定义了算法家族

    2024年01月20日
    浏览(47)
  • JVM的故事—— 内存分配策略

    堆内存有新生代和老年代,新生代中有一个Eden区和一个Survivor区(from space或者to space)。当有新的对象分配时,会优先分配在Eden区。当Eden区空间不足分配给新对象时,会进行一次minor GC,回收完没有引用的对象后,先考虑把一些Eden区的对象放到Survivor区,如果放不下,就放到老

    2024年02月10日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包