【elasticsearch】elasticsearch ES磁盘分配不均问题及解决方法
一、前言:
最近发现公司es集群磁盘分布的很不均匀,有个节点磁盘使用在36%,而另外两台的磁盘使用率在70%。
这样带来的后果,随着时间的推移,如果另外两台的磁盘达到一定的阈值后,新创建的索引无法在这两台机器上被正确分配,导致集群出现有索引shard未分配的情况。
并且集群状态为yellow。
二、问题原因:
查询es文档才发现,es自动均衡是按照分片数来分配的,并不是按照磁盘空间使用率来分配的。
造成这种问题的原因:
-
个别索引太大,并且设置的shard个数不合理。
如上图一个单副本70G的索引,只有1个shard,es集群为了保证分片数的均衡,可能都分配在了另外两台机器上,导致出现了这个问题。 -
本身磁盘就相对别的机器磁盘就少。
三、解决方案:
至于如何解决这种问题?
对于第一种情况,可以将索引的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
实际使用的命令:
__EOF__

本文链接:https://www.cnblogs.com/erlou96/p/16878221.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构