Elasticsearch的分片平衡问题解决

2023年11月份在某电商系统生产中的Elasticsearch(以下简称ES)集群突然,出现了大量慢查询告警,导致请求堆积。经过几天的排查发现了ES节点主分片和副本分片分布存在不均匀的问题。当然了暂未有定论是由于分片不均衡导致了性能下降,但是主分片和副本分片分布不均匀确实是个问题。

1、概念说明

下面我们来介绍一些重要的概念。

  • 集群(cluster):代表一个集群,其中包含多个节点。集群中有一个主节点,这个主节点通过选举产生。主节点和从节点是集群内部的概念。Elasticsearch采用去中心化的设计,即在集群外部看来,没有中心节点,因为对外部来说,与任何一个节点通信和与整个Elasticsearch集群通信是等价的。

  • 主分片(Primary Shard):代表索引的主分片。Elasticsearch可以将一个完整的索引分成多个主分片,将其分布在不同的节点上,实现分布式搜索。主分片的数量只能在索引创建前指定,并且创建后不能更改。

  • 副本分片(Replica Shard):代表索引的副本分片。Elasticsearch可以为一个索引设置多个副本,副本的作用有两个方面:一是提高系统的容错性,当某个节点的分片损坏或丢失时,可以从副本中恢复数据;二是提高查询效率,Elasticsearch会自动对搜索请求进行负载均衡。

  • 数据恢复(recovery):或重新分布是指在节点加入或退出集群时,根据机器的负载情况重新分配索引分片的过程。当一个节点重新启动时,也会进行数据恢复。

那么,在什么情况下可能导致分片分布不均匀呢?

  • 索引的动态均衡 :包括集群内部节点数量调整、新增索引、删除索引副本、删除索引等情况;
  • 增加副本 :因有大量的数据集中写入到某个节点;
  • 节点宕机:通常在下线一个Elasticsearch节点后,该节点上的主分片会被判定为丢失,此时Elasticsearch集群会自动将其他节点上的副本分片设置为主分片。当该节点重新启动时,分片数据会被识别为副本分片。这些操作可能导致一些节点上的主分片较为集中,而另一些节点上的副本分片较为集中;
  • 大量集中数据写入:大量数据的集中写入可能导致主分片在短时间内不均匀的情况。当业务场景需要大量写入时,如果设置了较多的ingest节点进行写入,由于无法实时同步,可能会导致主分片在节点之间不均匀地分布。

上述两种情况经常发生,因此分片分布不均匀并不罕见。

2、分配与平衡策略

以下动态设置可用于控制集群中分片的重新平衡:
在这里插入图片描述

2.1、 shard分配策略

参数说明: cluster.routing.allocation.enable-(动态) 启用或禁用特定类型分片的分配:

  • all -(默认值)允许为所有类型的分片分配分片。
  • primaries - 仅允许为主分片分配分片。
  • new_primaries - 仅允许为新索引的主分片分配分片。
  • none - 不允许对任何索引进行任何类型的分片分配。
    重新启动节点时,此设置不会影响本地主分片的恢复。如果重新启动的节点具有未分配的主分片的副本,会立即恢复该主分片。
cluster.routing.allocation.node_concurrent_incoming_recovers
允许在一个节点上进行多少次并发的传入分片恢复。传入恢复是指在节点上分配目标分片(很可能是副本,除非分片正在重新定位)的恢复。默认值为2。
cluster.routing.allocation.node_concurrent_outgoing_recoveries
允许在一个节点上进行多少次并发传出分片恢复。传出恢复是指在节点上分配源分片(很可能是主分片,除非分片正在重新定位)的恢复。默认值为2。
cluster.routing.allocation.node_concurrent_recoveries
设置cluster.routing.allocation.node_concurrent_incoming_recoveries和cluster.routing_allocation.node _concurrent_outgoing_recoveries的快捷方式。
cluster.routing.allocation.node_initial_priparies_recoveries
虽然复制副本的恢复是通过网络进行的,但节点重新启动后未分配的主服务器的恢复使用本地磁盘中的数据。这些恢复应该很快,这样就可以在同一节点上并行进行更多的初始主恢复。默认值为4。
cluster.routing.allocation.same_shard.host
允许根据主机名和主机地址执行检查,以防止在单个主机上分配同一分片的多个实例。默认为false,表示默认情况下不执行任何检查。此设置仅适用于在同一台计算机上启动多个节点的情况。

2.2. rebalance平衡策略

参数说明:cluster.routing.allocation.allow_rebalance用来控制rebalance触发条件:

  • always - 始终允许重新平衡;
  • indices_primaries_active - 仅在所有主分片可用时;
  • indices_all_active - (默认)仅当所有分片都激活时;
    cluster.routing.allocation.cluster_concurrent_rebalance用来控制均衡力度,允许集群内并发分片的rebalance数量,默认为2。
    cluster.routing.allocation.node_concurrent_recoveries,每个node上允许rebalance的片数量。

3、解决方案

3.1、重启节点

在重启ES集群之前,我们先来看看集群分片分配设置(allocation和rebalance)默认参数。
在这里插入图片描述
默认设置情况下,经过多次重启,实践证明重启条件下ES集群不会触发自动均衡。

3.2 自动分片迁移

假如以idx_items商品索引为例,我们在进行重新(reblance)分片操作之前,一般要对索引数据进行备份,以防意外发生,备份操作如下:

  • 备份索引数据:
POST _reindex
{"source":{"index": "idx_items"},"dest": {"index": "idx_items_temp"}
}
  • 集群开启自动分片(shard allocation):
PUT _cluster/settings
{"persistent":{"cluster.routing.allocation.enable": "all","cluster.routing.rebalance.enable": "all",}
}
  • 降低副本数为0
PUT idx_items/_settings
{"number_of_replicas": 0
}

3.3 手动分片迁移

  • 集群开启分片平衡(shard rebalance):
PUT _cluster/settings
{"persistent":{"cluster.routing.allocation.enable": "all","cluster.routing.rebalance.enable": "none",}
}
  • 降低副本数为0
PUT idx_items/_settings
{"number_of_replicas": 0
}
  • 手动分片迁移

从节点名称为node-1迁移到节点名称node-2,迁移的分片为0.

POST /_cluster/reroute
{"commands": [{"move":{"index": "idx_items","shard": 0,"from_node": "node-1","to_node": "node-2"}}]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux卸载nomachine,NoMachine 安装与配置及使用

对Linux管理员们来说,远程办公不是什么新鲜事。如果管理员不在服务器跟前,远程办公更是家常便饭。一般而言,图形用户界面(GUI)默认情况下并不安装在Linux服务器上。但是可能有一些Linux管理员还是决定将GUI安装在Linux服务器上。如果你的服务…

linux yum 安装widget,CentOS 7安装Qt5.12.1过程

默认下载在Downloads目录下预安装sudo yum -y install mesa-libGL-devel mesa-libGLU-devel freeglut-devel给下载的文件赋予可执行的权限chmod x qt-opensource-linux-x64-5.12.1.run执行文件,进行安装./qt-opensource-linux-x64-5.12.1.run接下来会进行界面化的安…

usb otg vnc linux,20131126版本后,可以从PC通过USB-OTG VNC到pcDuino

为什么80%的码农都做不了架构师?>>>有些玩家购买pcDuino到手后发现自己没有显示器,没有鼠标键盘,有的只有手机的充电器和数据线。pcDuino开发者了解到粉丝们的郁闷之后,在软件上帮忙大家解决了这个问题。下面就给大家介绍…

linux 镜像错误,VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)

VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057):问题描述:UUID已经存在Cannot register the hard disk E:\system_iso\CentOS6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9}because a hard disk E:\system_iso\centos68_02\centos6.8.vdi…

c语言中123 234 345 456,如何在C中将数字从1123456789格式化为1,123,456,789?

宝慕林4294392您可以按以下方式递归执行此操作(请注意&#xff0c;INT_MIN如果使用二进制补码&#xff0c;则需要额外的代码来管理它)&#xff1a;void printfcomma2 (int n) { if (n < 1000) { printf ("%d", n); return; } printfcomma2…

dos c语言显示符号图案,在DOS命令行窗口中显示出用各种字符拼凑出来的各种图案的实现方法,如本人头像...

注&#xff1a;文中例子是本人刚学C编程语言的时候制作的&#xff0c;实现方法很简单&#xff0c;主要使用for循环语句&#xff0c;无需什么复杂烧脑的算法。由于经常看到各种符号拼成的图案&#xff0c;感觉很有意思&#xff0c;所以自己也弄了个&#xff0c;纯属好玩。(作品-…

android自定义圆圈动画,自定义view实现动画数字圆圈

我们要实现的是如下的效果&#xff0c;1.该view在设置属性之后时候会有数字和圆圈不断增长的效果2.该view在按下和放开状态下显示不同的样式。这种效果逻辑上并不复杂&#xff0c;底层灰色圆圈和蓝色扇形圆圈都是用canvas.drawArc()绘制出来的&#xff0c;中间的数字用drawtext…

android+水滴粘性动画,Android控件实现水滴效果

看到ios版上QQ刷新效果像水滴&#xff0c;然后自己也想着去实现这样的效果&#xff0c;这篇文章暂时没有介绍下拉刷新的效果&#xff0c;只是单独用一个控件来实现这样的水滴效果。效果图如下&#xff1a;一、总体思路1、画两个圆形&#xff0c;其中一个就是上面的大圆&#xf…

第一台鸿蒙手机是,第一台预装鸿蒙OS的手机终于登场。

原标题&#xff1a;第一台预装鸿蒙OS的手机终于登场。千呼万唤始出来&#xff0c;之前大家期待了很久的鸿蒙OS它终于真正到来了。据工业和信息化部公布的消息&#xff0c;搭载鸿蒙OS的新款华为手机正式入网了&#xff0c;这也将是华为第一台预装鸿蒙OS的新款手机。但令人完全没…

html跳转网页为什么网页无法访问,朋友的网站被网址跳转,导致官网无法正常访问...

原标题&#xff1a;朋友的网站被网址跳转&#xff0c;导致官网无法正常访问昨天中午接到客户的一个电话&#xff0c;告知其某个网站打开之后直接跳转到其他的网站。客户的这个网站&#xff0c;不是我们做的&#xff0c;但是关系一直保持的不错&#xff0c;所以就顺带给他解决一…

2021中卫一中高考成绩查询,2021年宁夏高中排名及分数线 高考本科升学率排行榜...

2019年宁夏高中排名及分数线 高考本科升学率排行榜如何判断一所高中学校的优劣好坏&#xff0c;人们往往从这几个方面来看&#xff1a;高考/竞赛成绩、生源质量、师资力量、软硬件设施、管理水平等。高考成绩因为最直接&#xff0c;最广为关注&#xff0c;但是很多时候未免有失…

微观经济学如何计算机会成本,【微观经济学】机会成本

概念&#xff1a;机会成本机会成本是指你做了某项选择&#xff0c;而不得不因此失去的其他利益。比如你选择了A&#xff0c;就必须放弃B&#xff0c;B就是A的机会成本。对企业来说&#xff0c;最优方案的机会成本&#xff0c;就是次优方案可能带来的收益。机会成本是听起来很简…

计算机网络技术俄罗斯方块,《The Tetris Effect》:这本新书讲述了俄罗斯方块的传奇故事...

原标题&#xff1a;《The Tetris Effect》:这本新书讲述了俄罗斯方块的传奇故事在游戏发展史上&#xff0c;俄罗斯方块是个传奇。没有一款游戏像它一样影响深远&#xff0c;受到全球不同人的喜爱。在即将出版的《The Tetris Effect》(俄罗斯方块效应)中&#xff0c;科技记者 Da…

计算机主机响是什么原因,电脑主机发出不同的响声及解决措施

电脑在使用一段时间后&#xff0c;难免都会遇到些小问题。如很多朋友使用的台式电脑&#xff0c;在开机的时候&#xff0c;主机就会发出很大的响声。其实当主机发出不同响声时&#xff0c;就代表着不同的故障&#xff0c;我们可以根据相应的响声来找出故障的所在。今天U大侠小编…

计算机上的键有什么功能吗,电脑功能键都有什么用,电脑上功能键的用法_系统圣地...

电脑大家都使用了不少年了&#xff0c;但是对于键盘最上方的F1到F12的功能都是什么&#xff0c;相信不少小伙伴都一知半解吧&#xff0c;毕竟平时使用的比较少&#xff0c;但是在某些情况下&#xff0c;这些功能键能够有效的提升你的做事效率&#xff0c;所以了解一下还是不错的…

云测试软件详解,软件测试之登录测试详解

一、功能测试–登录功能性测试用例包括&#xff1a;1.什么都不输入&#xff0c;点击提交按钮&#xff0c;看提示信息。(非空检查)2.输入已注册的用户名和正确的密码&#xff0c;验证是否登录成功&#xff1b;3.输入已注册的用户名和不正确的密码&#xff0c;验证是否登录失败&a…

计算机启用时间 查找方式,电脑实用知识技巧 篇六:不需要第三方软件,这种方法查看系统启动时间...

电脑实用知识技巧 篇六&#xff1a;不需要第三方软件&#xff0c;这种方法查看系统启动时间2019-04-04 09:19:210点赞0收藏0评论上次我们说到&#xff1a;开机小助手&#xff0c;要让我们看到开机时间&#xff0c;必须添加自启动项目&#xff0c;这将拖慢我们的开机速度。有没有…

迷你世界显示未连接服务器成功,迷你世界登录未成功是什么意思 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-08-29迷你世界两周年庆活动到来,那么两周年庆迷你世界有哪些活动呢?很多小伙伴都不了解吧,那么下面牛游戏小编就给大家仔细的介绍一下迷你世界两周年庆活动吧,希望能给大家带来帮助. 迷你世界两周年庆活动 世界守护计划--环保筑梦师 ...标签&#xf…

广播 消息 没有服务器,服务器节点消息广播

服务器节点消息广播 内容精选换一换添加节点时提示“添加节点失败&#xff0c;节点已存在”。待添加节点的服务器上已安装系统性能分析或者添加过节点。如果待添加节点的服务器上已安装系统性能分析&#xff0c;需要登录服务器卸载系统性能分析&#xff0c;详细步骤请参见卸载&…

微信收款音响s3服务器断开,微信收款音响s2和s3有什么区别

微信收款音响s2和s3的区别&#xff1a;1、S2是一款四角梯形形状的音箱&#xff0c;S3是一款圆角正方体形状的音箱。2、S2电池1200mAh&#xff0c;S3电池1800mAh。3、S3可以连接WiFi&#xff0c;S2都不可以。音响(Audio electronics)广义上是指一种利用电子回路设计进行音讯与电…