Elasticsearch核心技术与实战学习笔记 38 | 分片与集群的故障转移

一 序

  本文属于极客时间Elasticsearch核心技术与实战学习笔记系列。

二 Primary Shard - 提升系统存储容量

分片是 ES 分布式储存的基石

  • 主分片 / 副本分片

通过主分片,将数据分布在所有节点上

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

2.1  Replica Shard - 提高数据可用性

数据可用性

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

提高系统的读取性能

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

2.2 分片数的设置

  如何规划一个索引的主分片数和副本分片数

  • 主分片数过小:例如创建一个 1 个 Primary Shard 的 index

         如果该索引增长很快,集群无法通过增加节点实现对这个索引的数据扩展

  • 主分片数设置过大:导致单个 Shard 容量很小,引发一个节点上有过多分片,影响性能
  • 副本分片设置过多,会降低集群整体的写入性能

3 demo 单节点集群

因为副本分片必须和主分片分布在不同的节点上,这样才能保证单台机器故障的时候数据不会真正的丢失。

3.1 增加一个数据节点

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

3.2 再增加一个节点

  •   Master 节点会决定分片分配到哪个节点
  • 通过增加节点数,提高集群的计算能力

 

四 故障转移

  •  3 个节点共同组成。包含 1 个索引,索引设置了 3 个 Primary Shard 和 1 个 Replica
  • 节点 1 是 Master 节点,节点意外出现故障(主分片0也丢失)。集群重新选举 Master 节点(图上是node2)
  • Node3 上的 R0 (之前主分片P0的副本)提升成 P0 ,集群变黄
  • node2把r0 r1分别分配到node2,node3上(这快没理解)R0 R1 分配,集群变绿

4.1集群健康状态

  • Green : 健康状态,所有的主分片和副本分片都可用
  • Yellow: 亚健康,所有的主分片可用,部分副本分片不可用
  • Red:不健康状态,部分主分片不可用

 补充下知识点:

分片是Elasticsearch中的最小工作单元,本质上是一个Lucene Index。在Lucene中,单个倒排索引文件被称为Segment,Segment是自包含且不可变更的,多个Segment汇总在一起称为Lucene Index

当有新文档生成时,会生成新的Segment,查询时会同时查询所有Segment,并且对结果汇总,Lucene中有一个文件用来记录所有Segments信息,叫做Commit Point,删除的文档信息,保存在.del文件中。
1:选主的过程中可能存在问题的场景?
选主的过程应该很短,这个期间,如果有创建index或者分片reallocation有可能会出错。
2:故障转移期间可能会出现问题的场景?
故障转移期间,如果只是黄色变绿,应该不影响读写,因为副本会提升为主分片。集群变红,代表有主分片丢失,这个时候会影响读写。
3: 故障转移,数据重新分配,消耗性能的避免方式?
例如一个主分片不可用了。只要设置了副本分片,其中一个副本分片立即会将自己提升为主分片。同时会将自己的数据分配到一个新的replica上,有时候,我们只是重启一台机器,可以让这个reallocation的动作延迟一段时间再做,从而避免无谓的数据拷贝。

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/106958348
38