复盘:某客户ES上云问题案例总结

简介: 客户自建近100个ES集群,服务于多个核心重要业务。

客户自建近100个ES集群,服务于多个核心重要业务。

背景

客户自建近100个ES集群,服务于多个核心重要业务。随着业务日益增长、需求各有所异、集群容量利用率参差较大、部分混布集群资源成本难以继续细分,出于人员不足,运维压力、增强稳定性保障、优化利用率和成本等角度考虑,计划将全部自建ES集群基于业务属性、重要等级等方向按批次迁移至 Elasticsearch。

问题

问题一:Shard Lock

集群缩容时,有部分分片无法搬迁,恢复进度到一定百分比后,不再继续执行

直到shard recovery任务超时(30min)

期间有待恢复的分片出现 failed to obtain shard lock 报错

原因分析

Recovery 的带宽限流改成过1b,这将导致 recovery 线程长期流控,sleep 时间有累积效应,很久无法退出。

由于 recovery 的流控机制,是节点级别的,当有一个线程长期 sleep 时,将导致其他分片的恢复任务阻塞。

最终导致部分节点 generic 线程被长期占用,无法释放。

解决方案

短期方案

重启generic 线程被长期占用的节点,释放 recovery 资源,集群恢复 green

长期方案

内核级别干预 indices.recovery.max_bytes_per_sec

  1. ES 内核添加限制,避免 max_bytes_per_sec 设置过小(1MB)
  2. ES 智能诊断系统,发现 max_bytes_per_sec 设置过小时,自动纠正

问题二:RT上涨

集群偶现部分节点长时间gc,无法恢复,导致查询时延上涨

原因分析

  • fielddata cache 使用过量内存

故障节点有大量 fielddata cache 在等待 lock 的线程,导致查询线程的阻塞

从保存现场的dump 内存分析看,也是 fielddata 占据大量内存

结合当时节点的慢日志分析,原因是类似下面的查询语句,对 _id 字段做排序,使用了大量的 field data,占用 jvm 堆内存

由于 _id 字段底层存储时只存储store field(行存),不存储 doc value(列存)。

而对其做排序、聚合时,需要使用列存,因此es会在heap内存中构建列存,使用大量的 fielddata。从而导致了field data线程卡住和使用过量内存。

  • 节点间负载不均

还有一个原因是,节点直接负载不均衡,不同节点查询速率差异有2倍多

查询负载的不均,也导致了节点之间 fielddata 内存使用量不均,加重了问题的产生

以一个出问题的节点为例,是在fielddata内存打满后,出现的问题:

优化方案

  • 优化查询,使用其他字段代替 _id 来排序

7.6 之后版本的es,可以通过参数设置,不允许对 _id 字段做排序和聚合,避免此类问题。

相关issue:Remove on-heap fielddata. · Issue #64612 · elastic/elasticsearch · GitHub

长期方案

替换sort字段。

  • 负载不均

集群的节点之间,分片数不均,导致负载不均

原因是集群中存在一些较大的分片(250GB+),使得某些节点的磁盘使用率超过水位线,导致节点间分片数不均匀

  • 解决方案

扩容磁盘后,集群开始均衡,节点之间的查询量、fielddata趋于均衡

最终效果

未再出现长时间GC的情况

同时间段P90查询时延几秒级毛刺出现频率也大幅降低

问题三:磁盘IO过高

当前集群中的节点,IO util 普遍偏高,高峰期普遍在 60%以上,最大的节点达到91%,节点之间IO也不是很均衡

原因

原因是集群中分片容量大小差异较大,大的260GB+,小的1GB

导致节点间磁盘使用率不均匀、IO不均匀

主要是读IO比较高,跟查询压力较大有关,且数据也是带id写入的,每次写入也会产生一次查询

优化方案

长期方案

  • 扩容磁盘数,分摊IO压力

当前集群各个节点容量较大(1.5T),且只使用了一块盘

建议扩充每个节点的磁盘数(500 GB * 3块盘)

  • 调整分片数,拆分容量较大的index

这一步需要在扩充完磁盘数,降低IO压力后才能做

对于当前单分片容量较大的index,增大分片数,使单个分片在20GB~50GB左右

同时考虑分片数为节点数的整数倍(40、80)

目录
相关文章
|
云安全 安全 网络安全
|
3天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
|
17天前
|
JSON 程序员 数据格式
最新版Notepad++下载、安装、配置保姆级教程(附官网安装包)
Notepad++ 是一款免费开源、轻量快速的 Windows 文本编辑器,支持多标签、语法高亮、代码折叠与宏录制,体积小、启动快、资源占用低,兼容 x64/x32/ARM 架构,是程序员和文字工作者的高效利器。
4020 1
|
10天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
2064 2
|
16天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
2668 47
|
3天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
565 1
|
13天前
|
Web App开发 人工智能 前端开发
2026 年 AI 浏览器怎么选?Ego Lite、Tabbit、Chrome DevTools MCP 深度对比,开发者到底该用哪个?
2026年AI浏览器选型指南:Ego Lite专注多Agent协同(Mac优先),Tabbit国产首选,原生支持Windows与Codex控制;Chrome DevTools MCP非浏览器而是开发者利器,深度集成Console/Network/Performance调试能力,让AI真正“看懂并验证”前端代码。
1520 3
|
10天前
|
开发者 索引
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
Open Plugin Market 是一个开放插件索引平台,收录800+优质DSH插件,支持分类浏览、智能推荐与随机发现。无需安装市场,粘贴索引地址即可一键接入,网页版直访 dshopen.org,助力小开发者被看见。(239字)
2112 1
DeepSeekHarness大肥鱼自带插件市场了?加个地址就能用
|
8天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!