Elasticsearch 分片机制与集群维护
Elasticsearch (ES) 是一款基于 Lucene 的开源、分布式、RESTful 搜索引擎。本文记录了 ES 的分片设计规范、日常集群健康状态诊断以及常用 API 操作。
1. 核心概念与分片设计规范
在生产环境部署 ES 前,合理的分片(Shards)设计决定了集群的寿命:
- 主分片 (Primary Shards):决定了索引能够容纳的数据量上限。在索引创建后不可更改,除非重建索引(Reindex)。
- 副本分片 (Replica Shards):提供高可用和高并发检索支持,可以动态调整数量。
运维最佳实践经验
- 控制分片大小:单个分片的物理存储大小控制在 20GB ~ 50GB 之间。如果是纯日志存储(如 ELK 架构),不超过 50GB 即可。
- 节点分片上限:建议一个节点上所有索引的分片总数,不超过该节点内存(GB)的 20 倍。例如 32G 内存的节点,分片数量控制在 640 个以内。
- 主分片公式:
主分片数量 ≈ 预估数据总量 / 30GB。
2. 集群健康状态诊断(REST APIs)
运维人员需要极其敏感地关注集群的健康度。ES 提供了清晰的 HTTP REST 接口供监控和排查:
# 1. 检查集群整体健康状态(Green/Yellow/Red)
curl -X GET "http://localhost:9200/_cluster/health?pretty"
# 2. 查看集群内所有物理节点的资源占用
curl -X GET "http://localhost:9200/_cat/nodes?v&h=ip,port,heap.percent,ram.percent,cpu,node.role,master,name"
# 3. 找出状态不是 GREEN 的索引以及未分配分片(Unassigned Shards)原因
curl -X GET "http://localhost:9200/_cat/indices?v&health=yellow,red"
curl -X GET "http://localhost:9200/_cluster/allocation/explain?pretty"
集群健康状态说明:
- GREEN:所有主分片和副本分片分配完好,集群运行完美。
- YELLOW:所有主分片均已就绪并正常工作,但存在部分副本分片未成功分配(通常是因为单节点集群无法分配副本,或者其他节点磁盘空间不足)。
- RED:存在至少一个主分片损坏或缺失。此时搜索结果会不完整,属于严重故障,必须立即处理。