1. Primary Shard - 提升系统存储容量

  • 分片是 ElasticSearch 分布式存储的基石

    • 主分片 / 副分片
  • 通过主分片,将数据分片在所有节点上

    • Primary Shard,可以将一份索引的数据,分散在多个 Data Node 上,实现存储的水平扩展;
    • 主分片(Primary Shard)数在索引创建时候指定,后续默认不能修改,如要修改,需重建索引(与 document 路由到 shard 机制有关);

2. Replica Shard - 提高数据可用性

  • 数据可用性

    • 通过引入副本分片提高数据可用性。一旦主分片丢失,副分片可以 Promote 成主分片。副本分片数可以动态调整。每个节点上都有完备的数据。如果不设置副本分片,一旦出现节点硬件故障,就有可能造成数据丢失;
  • 提升系统的读取性能

    • 副本分片由主分片同步,通过支持增加 Replica 个数,一定程度可以提高读取的吞吐量;

3. 分片数的设定

  • 如何规划一个索引的主分片数和副本分片数
    • 主分片数过小:例如创建了 1 个 Primary Shard 的 Index;
      • 如果该索引增长很快,集群无法通过增加节点实现对这个索引的数据扩展;
    • 主分片数设置过大:导致单个 Shard 容量很小,导致一个节点上有过多分片,影响性能;
    • 副本分片数设置过多,会降低集群整体的写入性能;

4. 单节点集群

  1. PUT testDB
  2. {
  3. "settings": {
  4. "number_of_shards": 3,
  5. "number_of_shards": 1
  6. }
  7. }

image.png

  • 因为 Primary Shard 与 Replica Shard 不能放在同一个节点,所以副本无法生成分片,集群状态成黄色;

5. 增加一个数据节点

image.png

  • 集群状态转为绿色
  • 集群具备故障转移能力

6. 再增加一个数据节点

image.png

  • 集群具备故障转移能力
  • Master 节点会决定分片分配到哪个节点
  • 通过增加节点,提高集群的计算能力

7. 故障转移

image.png

  • 节点 1 是 Master 节点,节点意外出现故障,集群重新选举 Master 节点
  • Node 3 上的 R0 提升成 P0,集群变黄
  • R0 和 R1 重新分配,集群变绿

:::tips 需要集群具备故障转移的能力,必须将索引的副本分片数设置为 1,否则,一旦有节点发生故障,就会造成数据丢失。 :::