1. Primary Shard - 提升系统存储容量
分片是 ElasticSearch 分布式存储的基石
- 主分片 / 副分片
通过主分片,将数据分片在所有节点上
- Primary Shard,可以将一份索引的数据,分散在多个 Data Node 上,实现存储的水平扩展;
- 主分片(Primary Shard)数在索引创建时候指定,后续默认不能修改,如要修改,需重建索引(与 document 路由到 shard 机制有关);
2. Replica Shard - 提高数据可用性
数据可用性
- 通过引入副本分片提高数据可用性。一旦主分片丢失,副分片可以 Promote 成主分片。副本分片数可以动态调整。每个节点上都有完备的数据。如果不设置副本分片,一旦出现节点硬件故障,就有可能造成数据丢失;
提升系统的读取性能
- 副本分片由主分片同步,通过支持增加 Replica 个数,一定程度可以提高读取的吞吐量;
3. 分片数的设定
- 如何规划一个索引的主分片数和副本分片数
- 主分片数过小:例如创建了 1 个 Primary Shard 的 Index;
- 如果该索引增长很快,集群无法通过增加节点实现对这个索引的数据扩展;
- 主分片数设置过大:导致单个 Shard 容量很小,导致一个节点上有过多分片,影响性能;
- 副本分片数设置过多,会降低集群整体的写入性能;
- 主分片数过小:例如创建了 1 个 Primary Shard 的 Index;
4. 单节点集群
PUT testDB
{
"settings": {
"number_of_shards": 3,
"number_of_shards": 1
}
}
- 因为 Primary Shard 与 Replica Shard 不能放在同一个节点,所以副本无法生成分片,集群状态成黄色;
5. 增加一个数据节点
- 集群状态转为绿色
- 集群具备故障转移能力
6. 再增加一个数据节点
- 集群具备故障转移能力
- Master 节点会决定分片分配到哪个节点
- 通过增加节点,提高集群的计算能力
7. 故障转移
- 节点 1 是 Master 节点,节点意外出现故障,集群重新选举 Master 节点
- Node 3 上的 R0 提升成 P0,集群变黄
- R0 和 R1 重新分配,集群变绿
:::tips 需要集群具备故障转移的能力,必须将索引的副本分片数设置为 1,否则,一旦有节点发生故障,就会造成数据丢失。 :::