ES 笔记三十一:分片与集群的故障转移

Primary Shard - 提升系统存储容量

  • 分片是ES 分布式储存的基石
    • 主分片/副本分片
  • 通过主分片,将数据分布在所有节点上
    • Primary Shard ,可以将一份索引的数据,分散在多个Data Node 上,实现储存的水平扩展
    • 主分片(Primary Shard)数在索引创建时候指定,后续默认不能修改,如要修改,需重建索引

Replica Shard - 提高数据可用性

  • 数据可用性
    • 通过引入副本分片(Replica Shard)提高数据的可用性。一旦主分片丢失,副本分片可以在Promote成主分片。副本分片数可以动态调整的。每个节点上都有完备的数据。如果不设置副本分片,一旦出现节点硬件故障,就有可能造成数据丢失。
  • 提高系统的读取性能
    • 副本分片由主分片(Primary Shard)同步。通过支持增加Replica个数,一定程度可以提高读取的吞吐量

分片数的设置

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

单节点集群

  • 副本无法分片,集群状态为黄色

ES笔记三十一:分片与集群的故障转移

增加一个数据节点

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

ES笔记三十一:分片与集群的故障转移

在增加一个节点

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

ES笔记三十一:分片与集群的故障转移

故障转移

  • 3个节点共同组成。包含1个索引,索引设置了3个Primary Shard 和1个Replica
  • 节点1是Master节点,节点意外出现故障。集群重新选举Master节点
  • Node3 上的R0 提升成P0 ,集群变黄
  • R0 R1分配,集群变绿
  • 需要集群具备能力,必须将索引的副本分片设置为1,否则一丢失节点,就会造成数据丢失

ES笔记三十一:分片与集群的故障转移

集群健康状态

  • Green :健康状态,所有的主分片和副本分片都可用
  • Yellow:亚健康,所有的主分片可用,部分副本分片不可用
  • Red:不健康状态,部分主分片不可用
    GET /_cluster/health
    {
    "cluster_name" : "lsk",
    "status" : "yellow",
    "timed_out" : false,
    "number_of_nodes" : 2,
    "number_of_data_nodes" : 2,
    "active_primary_shards" : 16,
    "active_shards" : 32,
    "relocating_shards" : 0,
    "initializing_shards" : 0,
    "unassigned_shards" : 6,
    "delayed_unassigned_shards" : 0,
    "number_of_pending_tasks" : 0,
    "number_of_in_flight_fetch" : 0,
    "task_max_waiting_in_queue_millis" : 0,
    "active_shards_percent_as_number" : 84.21052631578947
    }

Demo

  • 启动一个节点,3个Primary shard,1个Replica,集群黄色,因为无法分片Replica
  • 启动3个节点,1个索引上包含3个Primary Shard,一个Replica
  • 关闭Node 1(Master)
  • 查看Master Node 重新选举
  • 集群变黄,然后重新分配
es
本作品采用《CC 协议》,转载必须注明作者和本文链接

快乐就是解决一个又一个的问题!

CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!