适用场景

ES 集群最常见的三类问题:分片数过多导致集群元数据压力、磁盘水位触发只读、查询与写入互相影响。治理核心是分片数量规划与生命周期管理(ILM),不是加机器就能解决。

配置步骤(集群健康与分片治理)

# 1) 集群健康
curl -s 'http://es1:9200/_cluster/health?pretty'
curl -s 'http://es1:9200/_cat/nodes?v&h=name,heap.percent,disk.used_percent,load_1m'

# 2) 分片分布
curl -s 'http://es1:9200/_cat/shards?v&s=store:desc' | head -30
curl -s 'http://es1:9200/_cat/indices?v&s=store:desc' | head -20

# 3) 未分配分片原因
curl -s 'http://es1:9200/_cluster/allocation/explain?pretty'

# 4) 慢查询与慢写入
curl -s 'http://es1:9200/_cat/thread_pool?v&h=node_name,search.queue,search.rejected,write.queue,write.rejected'

# 5) 磁盘水位与只读解除(确认磁盘已扩容后再做)
curl -X PUT 'http://es1:9200/_all/_settings' -H 'Content-Type: application/json' -d '{"index.blocks.read_only_allow_delete": null}'

关键参数与建议

  • 分片规划:单分片 10-50GB 为宜,避免小分片过多
  • 副本策略:日志类可 1 副本,重要数据 2 副本
  • 生命周期:热温冷分层 + 定期删除或归档,控制总量
  • 水位告警:磁盘 75% 预警、85% 关键(默认会触发只读保护)
  • 写入与查询隔离:批量写入与复杂查询错峰,必要时分离集群
  • 慢查询治理:关注慢日志,避免大范围聚合与深分页
  • 主节点稳定:主节点专用,避免混部导致选主异常

容易踩的坑

  • 分片过多,集群元数据压力大,主节点频繁 GC
  • 磁盘 85% 触发只读,日志写不进去才发现
  • 单分片过大(>100GB),恢复时长得离谱
  • 未做生命周期策略,索引无限增长
  • 主节点与数据节点混部,选主异常影响查询
  • 深分页查询(from+size 很大)打满 CPU

验证与巡检

# 健康复核
curl -s 'http://es1:9200/_cluster/health?pretty' | grep -E 'status|unassigned_shards|active_shards'
curl -s 'http://es1:9200/_cat/shards' | awk '{print $2}' | sort | uniq -c | head

# 拒绝与队列
curl -s 'http://es1:9200/_cat/thread_pool?v' | grep -v ' 0$' | head

# 磁盘水位
curl -s 'http://es1:9200/_cat/allocation?v'
  • 巡检:status 绿、无未分配分片、磁盘 < 75%、拒绝数为 0、分片大小在 10-50GB

小结

ES 治理验收:集群 status 绿、分片大小合理、磁盘水位可控、有生命周期策略自动滚动删除,且无大小分片长期不均衡。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。