首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >Elasticsearch Service >ES集群写入拒绝或查询拒绝问题如何解决?

ES集群写入拒绝或查询拒绝问题如何解决?

词条归属:Elasticsearch Service

问题现象

ES集群在某些情况下会出现写入拒绝率(bulk reject)/查询拒绝率(search reject)增大的现象,具体表现为 bulk 写入/查询时,会有类似以下报错: 报错一:

代码语言:javascript
复制
[2019-03-01 10:09:58][ERROR]rspItemError: {"reason":"rejected execution of org.elasticsearch.transport.TransportService$7@5436e129 on EsThreadPoolExecutor[bulk, queue capacity = 1024, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@6bd77359[Running, pool size = 12, active threads = 12, queued tasks = 2390, completed tasks = 20018208656]]","type":"es_rejected_execution_exception"}

报错二:

代码语言:javascript
复制
[o.e.a.s.TransportSearchAction] [1590724712002574732] [31691361796] Failed to execute fetch phase
org.elasticsearch.transport.RemoteTransportException: [1585899116000088832][10.0.134.65:22624][indices:data/read/search[phase/fetch/id]]
Caused by: org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution of org.elasticsearch.common.util.concurrent.TimedRunnable@63779fac on QueueResizingEsThreadPoolExecutor[name = 1585899116000088832/search, queue capacity = 1000, min queue capacity = 1000, max queue capacity = 1000, frame size = 2000, targeted response rate = 1s, task execution EWMA = 2.8ms, adjustment amount = 50, org.elasticsearch.common.util.concurrent.QueueResizingEsThreadPoolExecutor@350da023[Running, pool size = 49, active threads = 49, queued tasks = 1000, completed tasks = 57087199564]]
  • 可在云监控中看到集群写入/查询拒绝率增大。
  • 也可在 kibana 控制台,通过命令查看正在拒绝或者历史拒绝的个数。 GET _cat/thread_pool/bulk?s=queue:desc&v GET _cat/thread_pool/search?s=queue:desc&v 一般默认队列是1024,如果 queue 下有1024,说明这个节点有 reject 的现象。

问题定位

  1. 检查 bulk 请求的 body 大小是否不合理。单个 bulk 请求的大小在10MB以内比较合适,如过大,则会导致单个 bulk 请求处理时间过长,导致队列排满;如过小,则会导致 bulk 请求数过多,导致队列排满。
  2. 检查写入 QPS 和集群配置是否匹配,经验值为在4C16G 3节点集群上分片分布均衡时可以承担约2W - 3W QPS 的写入,但如果还有较多的查询请求时 QPS 会更低,具体可以通过压测确定集群最高能承受的 QPS 写入量,选择合适的配置。
  3. 检查分片(shard)数据量是否过大。分片数据量过大,有可能引起 Bulk Reject,建议单个分片大小控制在20GB - 50GB左右。可在 kibana 控制台,通过命令查看索引各个分片的大小。 GET _cat/shards?index={index_name}&v

检查分片数是否分布不均匀 集群中的节点分片分布不均匀,有的节点分配的 shard 过多,有的分配的 shard 少。

  • ES 控制台 集群详情页的【集群监控】>【节点状态】查看,具体可参考 查看监控
  • 通过 ES API,查看集群各个节点的分片个数。 GET /_cat/shards?index={index_name}&s=node,store:desc

结果如下图(第一列为分片个数,第二列为节点 ID),有的节点分片为1,有的为8,分布极不均匀。

解决方案

  1. 设置分片大小 分片大小可以通过 index 模板下的 number_of_shards 参数进行配置(模板创建完成后,再次新创建索引时生效,老的索引不能调整)。
  2. 调整分片数据不均匀

临时解决方案 如果发现集群有分片分配不均的现象,可通过设置 routing.allocation.total_shards_per_node 参数,动态调整某个 index 解决,详情可参考 Total Shards Per Node

注意: total_shards_per_node 要留有一定的 buffer,防止机器故障导致分片无法分配(例如10台机器,索引有20个分片,则 total_shards_per_node 设置要大于2,可以取3)。 PUT {index_name}/_settings { "settings": { "index": { "routing": { "allocation": { "total_shards_per_node": "3" } } } } }

索引生产前设置:通过索引模板,设置其在每个节点上的分片个数。

代码语言:javascript
复制
PUT _template/{template_name}
{
    "order": 0,
    "template": "{index_prefix@}*",  //要调整的 index 前缀
    "settings": {
      "index": {
        "number_of_shards": "30",   //指定 index 分配的 shard 数,可以根据一个 shard 30GB左右的空间来分配
        "routing.allocation.total_shards_per_node":3  //指定一个节点最多容纳的 shards 数
      }
    },
    "aliases": {}
  }
相关文章
南方政务行业Flink写入大规模ES集群(100节点)故障问题定位解决
春节前期南方政务某现场搭建了大规模100节点ES集群。最近开始上线新业务流程:FlinkCDC将业务数据库日志写入Kafka,然后Flink消费Kafka数据写入ES集群。新业务流程上线以后不能长时间稳定运行,差不多每隔24H都会失败重启。本文从异常日志出发,虽然中间走了弯路,最终定位清楚解决故障现象。
用户9421738
2025-06-07
3200
腾讯云ES:日志轻接入和免运维最佳实践
日志的采集、检索和分析是每个业务在架构设计上都需要考虑的重要一环,同时也是痛点较多、人力成本较高的一环。本文将从日志的生命周期开始,分析业界最成熟的ELKB解决方案在接入时和接入后的痛点,并通过在腾讯云ES上接入日志和运维索引的体验,分享腾讯云ES是如何解决这些痛点,来降低日志接入和运维成本,让业务能专注于日志数据价值的挖掘。
yinanwu
2022-12-05
1.7K0
E往无前 | 腾讯云大数据ES日志轻接入和免运维最佳实践
日志的采集、检索和分析是每个业务在架构设计上都需要考虑的重要一环,同时也是痛点较多、人力成本较高的一环。如何降低日志接入和后续运维成本,腾讯云大数据ES告诉你答案。
腾讯QQ大数据
2023-07-27
8001
腾讯云 Elasticsearch 运维篇(十六)Elasticsearch 集群告警预警
上一章节,我们讲了Elasticsearch集群的监控,除了腾讯云自己平台提供了丰富的监控参数外,Kibana Monitor也提供了丰富的监控特性。作为信息管理人员我们有必要去结合两者的监控去管理我们的集群服务。那么,我们知道,监控其实是一种被动式的管理,而且需要维护者时时去管理调试。那么能不能在监控到系统有问题的时候提前告警通知呢??答案是肯定的。腾讯云 ES 提供一些关键指标的配置告警功能,配置告警可帮助您及时发现集群问题并进行处理。可以毫不夸张的说集群告警在信息管理中是非常重要的一部分,那么,本文为您介绍通过控制台配置告警的操作。
南非骆驼说大数据
2020-02-24
2.6K0
Elasticsearch 出现 “429 rejected” 报错,怎么办?
这是系列文章的第五篇,主要探讨:Elasticsearch 出现 “429 reject 报错",怎么办?
铭毅天下
2022-04-06
2.7K0
点击加载更多
词条知识树 17个知识点
更多
  • 产品相关问题(9个知识点)
  • 集群异常问题(8个知识点)
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券