【最佳实践】巡检项:Elasticsearch Service(ES)集群热点现象

2023-03-28 11:46:19 浏览数 (1)

报错现象

集群中的某些节点的资源使用率远高于其他节点。

通过监控观察:

1分钟负载的最大值和和平均值相差较大

通过 cerebro 观察:

部分节点负载情况明显高于其他节点

报错分析

热点主要是以下几种原因造成:

1、分片在节点之间分布不均匀,导致业务请求 ES 集群时负载不均;

2、用户侧业务存在热点,频繁请求某些数据分片造成热点;

3、索引未配置副本,导致查询请求聚集于分片所处的节点。

注:在分片分布均匀的情况下,如果查询请求中指定了routing参数,也会导致查询请求聚集于某一部分分片,造成请求不均匀。

解决方案

临时解决方案(以下操作均建议在有副本的情况下使用):

1、节点监控中找到负载最高的节点,重启高负载节点;

2、登录 cerebro 将高负载节点上的副本分片迁移至低负载节点。

选中分片选中分片
根据需求迁移分片根据需求迁移分片

长期优化建议:

1、单个索引的主分片与副本分片数之和是集群数据节点的整数倍;

2、分片容量,主要分为写入和查询两个场景

【写多读少场景】索引单分片10g~20g,多分片有利于写入。同时若对数据高可用性要求不高,可以不设置副本;

【读多写少场景】索引单分片20g~40g,尽量减少分片数,可以降低热点。当分片数过多时,就容易出现长尾子请求,即有可能部分子请求因节点异常或 Old GC、网络抖动等延迟响应,导致整个请求响应缓慢。另一方面,拆分过多的子请求无法提升数据节点请求吞吐,不能充分利用 CPU。在尽量减少主分片数的情况下,同时也可以适当增加副本数,从而提升查询吞吐;

3、在遵循单分片设计原则的前提下,预测出索引最终大小,并根据集群节点数设计索引分片数量,使分片尽量平均分布在各个节点。

0 人点赞