跳到正文

Elasticsearch 生产检查清单 ​

适用 Elasticsearch 8.x/9.x。每条都可勾选,括号内是默认值或判断依据;版本差异以官方文档为准。 这份清单只列「不做会出事」的动作,机制解释见各篇正文。

上线前 ​

  • [ ] 主分片数一次定死:主分片不可改,单分片按 10–50GB 规划;每节点 shard 数 ≤20×堆内存 GB;按未来 12 个月数据量估,不按当前量估。
  • [ ] Master 候选合规:3 个奇数候选节点,跨机架/可用区;7.x 起选主 quorum 自动,不要手工配 minimum_master_nodes;master 与 data 角色分离。
  • [ ] 堆与磁盘:堆 ≤32GB 且 ≤物理内存 50%,其余留给 PageCache;磁盘用 SSD;使用率 75% 告警(85% 起不分配分片、95% 索引只读)。
  • [ ] Mapping 显式定义:关闭动态 mapping 或限制 index.mapping.total_fields.limit(默认 1000,以官方文档为准);需要排序/聚合的字符串加 keyword 子字段。
  • [ ] 写入语义写清楚:refresh_interval=1s(默认)意味着最多 1 秒可见;index.translog.durability=request(默认)每次写入 fsync,改 async 接受最多 5 秒丢失,只用于可重灌的导入。
  • [ ] 深分页换方案:index.max_result_window=10000(默认);列表页用 search_after,全量导出用 scroll/PIT,不用 from+size 翻深页。
  • [ ] 批量与段可控:bulk 按 5–15MB 控制而不是按条数,写入线程 ≤CPU;导入期设 refresh_interval=-1、number_of_replicas=0,结束后恢复并只对只读索引 forcemerge。
  • [ ] AI 检索可回退:dense_vector 必须 index:true 才建 HNSW;num_candidates 取 10–20×k 并用评测集验召回;semantic_text 的 inference endpoint 要有降级到纯 BM25 的开关;换 embedding 模型 = 新字段 + 全量重灌。

运行中 ​

  • [ ] 集群健康:_cluster/health 的 status、unassigned_shards、relocating_shards;_cluster/state 变更频率 >1 次/分钟视为异常。
  • [ ] 节点资源:Heap Used >75% 关注、>90% 高危;Old GC >1 次/分钟;磁盘按 75/85/90/95 四档;_nodes/stats 的 bulk/search 线程池队列持续增长要处置。
  • [ ] 查询与索引趋势:搜索/索引 P99 增长超过 2 倍告警;每个索引的字段数、segment 数、mapping 增量按周审视;慢日志同时开 query 和 fetch 两段。

故障时 ​

  • [ ] 写入报 FORBIDDEN/12/index read-only → _cluster/allocation/explain + 磁盘使用率 → 触到 95% 只读水位 → 删/关闭旧索引或扩盘,再恢复写入。
  • [ ] unassigned_shards 长期不降 → _cluster/allocation/explain → 磁盘水位、节点离线或单分片过大 → 扩节点、调副本或重建索引。
  • [ ] 查询把 Coordinating Node 打 OOM → 检查 from+size → 每个 shard 都要取 from+size 条再归并 → 改 search_after/scroll,并限制 max_result_window。
  • [ ] 写入延迟暴涨、bulk 超时 → _nodes/stats 的 bulk 队列与拒绝数 → 批量 >15MB 或并发过高 → 降批量与线程数,先保集群稳定。

把一门技术讲透到既懂也会用