Elasticsearch之线上问题合集——下
ES 的哲学: 它不会阻止你犯错,每个男人女人(放心女人也不会拉下)都会犯错,但会让你为每个错误付出“集群挂掉”的代价。 所以,敬畏配置,尊重原理,监控先行。嗯…… 接下来你们说吧,舞台交给大家~
·
8. Bulk 写入吞吐上不去
- 现象:每秒只能写几千条,CPU 也没打满
- 根因:
- Bulk 包太小(如 1MB),咱可不能小气
- refresh_interval=1s 太频繁
- 线程池队列满(
thread_pool.bulk.rejected)
- 解决:
- Bulk 大小调至 5–15MB
- 日志场景设
refresh_interval=30s - 监控线程池拒绝数
- “你拿勺子往水库里倒水,还怪水库装得慢。”
9. 深分页(from > 10000)被拒绝
- 现象:日志中
"Result window is too large, from + size must be less than or equal to: [10000]" - 根因:ES 默认限制
index.max_result_window=10000,防内存爆炸 - 解决:
- 用
search_after替代from/size - 或滚动索引 + 时间范围过滤
- 用
- “你想翻到第 10 万页?ES 说:‘先想想你的内存答不答应。’”数据库在这方面也需要考虑哈
10. 升级后插件不兼容,集群起不来
- 现象:升级 ES 7.17 → 8.0 后,IK 插件报错,节点无法加入
- 根因:ES 插件强绑定版本,必须用对应版本的 IK
- 解决:
- 升级前查插件兼容矩阵
- 用 Docker 镜像预测试
- “你升了 ES,忘了插件还在用‘上古版本’——这叫‘带着 Windows 98 上高铁’。”
终极防御
| 风险 | 防御措施 |
|---|---|
| OOM | 堆 ≤ 30GB + 熔断器 + 监控 fielddata |
| 慢查询 | 超时 + 聚合限桶 + 禁用深分页 |
| 磁盘爆 | 水位告警 + ILM 自动删除 |
| 脑裂 | 7.x+ 或 6.x 设 minimum_master_nodes |
| 数据丢失 | translog.durability: request |
| 写入慢 | Bulk 调大 + refresh_interval=30s |
| 分词失效 | 记得 _reload_search_analyzers |
ES 的哲学:
它不会阻止你犯错,每个男人女人(放心女人也不会拉下)都会犯错,但会让你为每个错误付出“集群挂掉”的代价。所以,敬畏配置,尊重原理,监控先行。嗯…… 接下来你们说吧,舞台交给大家~
更多推荐
所有评论(0)