重启节点会触发集群重新进行主分片选举
重启节点会触发集群重新进行主分片选举(master election)和分片分配(shard allocation),如果检测到某个主分片损坏,但副本分片完好,集群会自动将副本提升为新的主分片
1. 主分片损坏 ≠ 数据丢失
在 Elasticsearch 中:
-
每个索引被分成多个 主分片(primary shard),每个主分片可以有 零个或多个副本分片(replica shard)。
-
副本分片是主分片的 完整拷贝,并且是 实时同步的(近实时)。
所以,只要副本分片是 “in-sync”(同步的),即使主分片损坏,数据也不会丢失。
| 步骤 | 说明 |
|---|---|
| 1. 节点离开集群 | 如果是主分片所在的节点宕机,master 会立即检测到 |
| 2. 分片不可用 | master 发现某个主分片不可用(比如损坏或节点掉线) |
| 3. 检查副本状态 | master 会检查是否有 in-sync 的副本分片 |
| 4. 提升副本为主 | 如果有,master 会 将副本提升为新的主分片 |
| 5. 分配新副本 | 然后集群会尝试重新分配缺失的副本,保持冗余 |
普通 shard state(所有分片都会经历)
表格
| 状态 | 含义 |
|---|---|
UNASSIGNED |
分片尚未分配到任何节点 |
INITIALIZING |
正在分配、恢复或重建 |
STARTED |
正常在线,可接受读写 |
RELOCATING |
正在节点间搬迁( rebalance / 手动迁移) |
| in-sync allocation IDs | 记录哪些副本“追上”了主分片,可被提主 | GET /<index>/_stats?level=shards → shard[].commit.user_data.in_sync |
| tracking allocation IDs | 主分片正在“等待”哪些副本复制完成 | GET /_cluster/state?metric=routing_table → shard[].tracking_allocation_ids |
3. 小结一句话
-
in-sync 不是独立状态,而是 “allocation id 出现在 in-sync 列表” 的 布尔属性。
-
副本分片只有在
STARTED且 allocation id 在 in-sync 列表 里,才算 “in-sync 副本”,才有资格被 master 选为新主分片。
时来天地皆同力,运去英雄不自由
浙公网安备 33010602011771号