集群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或对其进行限流,以减少异常流量对集群的影响。
- 方案2:当无法禁用业务IP时,可以临时关闭问题索引。
关闭索引会导致索引不可读写,请谨慎操作。
- 查找异常占用资源的索引。
执行如下命令,在返回结果中查找“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}}}] - 临时关闭异常索引。
POST /index_20251210/_close
- 查找异常占用资源的索引。
- 方案3:扩容Client节点数量或升级Client节点规格。如有使用ELB服务,扩容后需重启ELB服务使节点配置生效。
场景三:JVM资源耗尽(JVM过载)
- 重启无响应的Client节点。
- 等待5分钟,观察JVM回收情况。
- 重启后负载仍高,则按CPU过载方案处理(如禁用异常业务IP、限流、扩容)。