分片与扩容
主分片数、副本、reindex 直觉。
30 分钟
分片与扩容
Elasticsearch 通过 主分片 水平扩展数据,副本 扩展读与容错。主分片数在创建 index 时确定,后续只能 reindex 调整——规划比 MySQL 分表更早。
学习目标
- 理解主分片数、副本数对容量与性能的影响
- 掌握 reindex 与 alias 切换的基本流程
- 建立单节点实验 vs 生产集群的预期差异
核心内容
分片参数
curl -X PUT "localhost:9200/tracks_v1" -H "Content-Type: application/json" -d '
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}'
| 参数 | 含义 | 调整方式 |
|---|---|---|
number_of_shards | 主分片数,数据哈希路由 | 创建后不可改(除 shrink/split 特殊 API) |
number_of_replicas | 每主分片的副本数 | _settings 可动态改 |
单节点实验:shards: 1, replicas: 0(es-install)。三节点集群:replicas: 1 可达 green。
路由直觉
_id / routing → hash → shard_id ∈ [0, number_of_shards)
同 slug 作 _id 保证同一 track 始终在同一分片,更新局部性好。
扩容路径
垂直:加 CPU/内存/SSD——先榨单节点(注意 ES_JAVA_OPTS 不超过物理内存一半)。
水平:加 Node 进 Cluster → 自动 rebalance 分片 → 提高吞吐。
数据量小(本站 track 数百条)无需 多分片;学 reindex 流程即可。
Reindex 流程
主分片数定错或 Mapping 变更(es-mapping):
流程:建 tracks_v2 → _reindex 从 v1 复制 → _aliases 原子切换。应用只认 alias tracks(es-spring)。权威数据扩容仍以 MySQL 为主(spring-boot-essentials);ES 随搜索 QPS 扩展。
练习
- 查看
tracks的_settings与_cat/shards/tracks?v - 解释 3 主分片 + 2 节点时为何可能 yellow
- 列出何时本站 track 索引 多分片