【elasticsearch】elasticsearch ES磁盘分配不均问题及解决方法

 


一、前言:

最近发现公司es集群磁盘分布的很不均匀,有个节点磁盘使用在36%,而另外两台的磁盘使用率在70%。

这样带来的后果,随着时间的推移,如果另外两台的磁盘达到一定的阈值后,新创建的索引无法在这两台机器上被正确分配,导致集群出现有索引shard未分配的情况。

并且集群状态为yellow。

在这里插入图片描述

二、问题原因:

查询es文档才发现,es自动均衡是按照分片数来分配的,并不是按照磁盘空间使用率来分配的。

造成这种问题的原因:

  1. 个别索引太大,并且设置的shard个数不合理。
    在这里插入图片描述
    如上图一个单副本70G的索引,只有1个shard,es集群为了保证分片数的均衡,可能都分配在了另外两台机器上,导致出现了这个问题。

  2. 本身磁盘就相对别的机器磁盘就少。

三、解决方案:

至于如何解决这种问题?

对于第一种情况,可以将索引的shard个数尽可能做到合理,如shard个数等于节点数。

对于第二种情况,es可以根据磁盘使用情况来决定是否继续分配shard

注意: es根据磁盘使用情况来分配shard,默认设置是开启的,也可以通过api关闭:cluster.routing.allocation.disk.threshold_enabled: false

在开启的情况下,有两个重要的设置

  • cluster.routing.allocation.disk.watermark.low:控制磁盘最小使用率。默认85%.说明es在磁盘使用率达到85%的时候将会停止分配新的shard。也可以设置为一个绝对数值,比如500M.

  • cluster.routing.allocation.disk.watermark.high:控制磁盘的最大使用率。默认90%.说明在磁盘使用率达到90%的时候es将会relocate shard去其他的节点。同样也可以设置为一个绝对值。

注意: watermark setting可以通过update-api动态修改,默认es每隔30s会收集各个节点磁盘的使用情况,可以cluster.info.update.interval来设置时间间隔。

调整磁盘水位线:

API

put _cluster/settings { "transient":{ "cluster":{ "routing":{ "allocation.disk.watermark.high":"95%", "allocation.disk.watermark.low":"90%", } } } }

实际使用的命令:

curl -s -u admin:admin -XPUT 10.11.36.1:29200/_cluster/settings -d ' { "persistent": { "cluster": { "routing": { "allocation.disk.watermark.high": "90%", "allocation.disk.watermark.low": "85%" } } } }'

__EOF__

本文作者彬在俊
本文链接https://www.cnblogs.com/erlou96/p/16878221.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   彬在俊  阅读(609)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示