主题
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 或并发过高 → 降批量与线程数,先保集群稳定。