本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
本文另有延续:Elasticsearch集群CPU使用率过高的问题
ES集群在某些情况下会出现CPU使用率高的现象,具体有两种表现:
1. 个别节点CPU使用率远高于其他节点;
2. 集群中所有节点CPU使用率都很高。
本篇文章我们着重讲解第一种情况。
集群在某些情况下会个别节点CPU使用率远高于其他节点的现象。
从监控中可以明显看到某些节点CPU使用率居高不下。
出现这种情况,由于表面上看集群读写都不高,导致很难快速从监控上找到根因。所以需要细心观察,从细节中找答案,下面我们介绍几种可能出现的场景以及排查思路。
1. 登录Kibana控制台,在开发工具中执行以下命令,查看索引的shard信息,确认索引的shard在负载高的节点上呈现的数量较多,说明shard分配不均;
GET _cat/shards?v
2. 登录Kibana控制台,在开发工具中执行以下命令,查看索引信息。结合集群配置,确认存在节点shard分配不均的现象;
GET _cat/indices?v
特别注意
这里的高水位是指cluster.routing.allocation.disk.watermark.high
,其默认值为90%。这个参数的作用为:当磁盘水位达到90%的节点,es会把该节点上的部分shard迁移到磁盘水位低的节点上去。在这种场景下,很容易出现个别节点被分配了较多的索引,直接造成请求的热点。
临时方案(不推荐):
1. 调整集群水位,临时调到一个比较大的值;
2. 清理旧数据,及时释放出磁盘空间,或者紧急扩容磁盘;
长期方案(推荐):
订阅磁盘使用率的告警,保持集群的磁盘水位在一个健康的状态。
GET _cat/segments/index?v&h=shard,segment,size,size.momery,ipGET _cat/shards?v
参考以下两种方法其中一种解决问题:
如果请求中添加了routing或查询频率较高的热点数据,则必然导致数据出现负载不均。
图中可以看到该条doc指定了routing。
优化分片,慎用routing,避免请求热点。
排查该类问题的关键点,还是在于善用集群的监控指标来快速判断问题的方向,再配合集群日志来定位问题的根因,才能快速地解决问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。