更新时间:2026-01-09 GMT+08:00
分享

集群Client节点过载

问题描述

当Elasticsearch/OpenSearch集群的Client节点出现过载时,会导致以下问题:

  • Kibana(或Dashboards)、Cerebro管理界面无法访问。
  • 集群写入/查询操作时延显著增加。
  • 监控显示Client节点出现CPU、内存或JVM使用率过高,部分节点脱离集群。

问题原因

  • 负载不均衡:请求未均匀分发到所有Client节点。
  • 异常流量冲击:恶意IP或异常业务突发大量请求(如爬虫、未限流的写入程序)。
  • 任务压力过大:复杂查询需合并大量分片结果,导致CPU瓶颈(常见于未优化的聚合查询)。或者高并发写入导致Client节点处理能力不足。
  • JVM资源耗尽:JVM内存持续增长导致GC频繁。

解决方法

场景一:负载不均衡(部分节点过载)
  • 方案1:修改业务侧连接配置,添加全部Client节点IP,实现负载均衡,避免单一节点过载。
  • 方案2:使用ELB接入CSS集群,通过负载均衡提高集群的可用性和性能。

场景二:异常流量冲击或任务压力过大(CPU过载)

  • 方案1:禁用异常业务IP或对其进行限流,以减少异常流量对集群的影响。
    1. 定位异常业务IP。

      在集群智能运维页面,通过智能诊断,在诊断项“客户端连接检测(来源IP分析)”中查看是否存在异常业务IP。

    2. 禁止异常IP访问集群或在业务方对异常IP进行限流。

      禁用IP的命令参考(仅Elasticsearch 7.6.2、Elasticsearch 7.10.2和OpenSearch 2.19.0支持该命令):

      PUT /_cluster/settings  
      {  
        "persistent": {  
          "flowcontrol.http.enabled": true,  
          "flowcontrol.http.deny": "192.168.1.100,192.168.1.101" // 替换为实际异常业务IP  
        }  
      }  
  • 方案2:当无法禁用业务IP时,可以临时关闭问题索引。

    关闭索引会导致索引不可读写,请谨慎操作。

    1. 查找异常占用资源的索引。

      执行如下命令,在返回结果中查找“action”“indices:data/read/search”的记录,确认“running_time”异常的索引。

      GET _cat/tasks?v&detailed=true

      返回结果如下所示,索引index_20251210即为异常占用资源的索引。

      action                         task_id                        parent_task_id                 type      start_time    timestamp running_time ip             node                 description
      cluster:monitor/tasks/lists    16oEhzTLSxOmpOAKcDWiRA:4405923 -                              transport 1765329559256 01:37:39  84micros    192.168.77.164  css-test-ess-esn-3-1 
      indices:data/read/search       GbveasILSxOutqupHepB4Q:1511246 -                              transport 1765329590043 01:19:50  1.7h        192.168.127.133 css-test-ess-client-esn-1-1 indices[index_20251210], types[], search_type[QUERY_THEN_FETCH], source[{"size":10000,"query":{"ids":{"values":["99998-786522498053054743"],"boost":1.0}}}]
    2. 临时关闭异常索引。
      POST /index_20251210/_close  
  • 方案3:扩容Client节点数量或升级Client节点规格。如有使用ELB服务,扩容后需重启ELB服务使节点配置生效。

场景三:JVM资源耗尽(JVM过载)

  1. 重启无响应的Client节点。
  2. 等待5分钟,观察JVM回收情况。
  3. 重启后负载仍高,则按CPU过载方案处理(如禁用异常业务IP、限流、扩容)。

相关文档