Primary Shard - 提升系统存储容量
-
分⽚是 Elasticsearch 分布式存储的基⽯
- 主分⽚ / 副本分⽚
-
通过主分⽚,将数据分布在所有节点上
-
Primary Shard,可以将⼀份索引的数据,分散在多个 Data Node 上,实现存储的⽔平扩展
-
主分⽚(Primary Shard)数在索引创建时候指定,后续默认不能修改,如要修改,需重建索引
-
Replica Shard - 提⾼数据可⽤性
-
数据可⽤性
- 通过引⼊副本分⽚ (Replica Shard) 提⾼数据的可⽤性。⼀旦主分⽚丢失,副本分⽚可以 Promote 成主分 ⽚。副本分⽚数可以动态调整。每个节点上都有完备的数据。如果不设置副本分⽚,⼀旦出现节点硬件故 障,就有可能造成数据丢失
-
提升系统的读取性能
- 副本分⽚由主分⽚(Primary Shard)同步。通过⽀持增加 Replica 个数,⼀定程度可以提⾼读取的吞吐量
分⽚数的设定
-
如何规划⼀个索引的主分⽚数和副本分⽚数
-
主分⽚数过⼩:例如创建了 1 个 Primary Shard 的 Index
- 如果该索引增⻓很快,集群⽆法通过增加节点实现对这个索引的数据扩展
-
主分⽚数设置过⼤:导致单个 Shard 容量很⼩,引发⼀个节点上有过多分⽚,影响性能
-
副本分⽚数设置过多,会降低集群整体的写⼊性能
-
单节点集群
- 副本⽆法分⽚,集群状态⻩⾊
PUT tmdb
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
image.png
增加⼀个数据节点
image.png-
集群状态转为绿⾊
-
集群具备故障转移能⼒
-
尝试着将 Replica 设置成 2 和 3, 查看集群的状况
再增加⼀个数据节点
image.png-
集群具备故障转移能⼒
-
Master 节点会决定分⽚分 配到哪个节点
-
通过增加节点,提⾼集群 的计算能⼒
故障转移
image.png-
3 个节点共同组成。包含了 1 个索引,索引设 置了 3 个 Primary Shard 和 1 个 Replica
-
节点 1 是 Master 节点,节点意外出现故障。集 群重新选举 Master 节点
-
Node 3 上的 R0 提升成 P0,集群变⻩
-
R0 和 R1 分配,集群变绿
集群健康状态
GET _cluster/health
res:
{
"cluster_name" : "geektime",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 7,
"active_shards" : 14,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"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" : 100.0
}
-
Green:健康状态,所有的主分⽚和副本分⽚都可⽤
-
Yellow:亚健康,所有的主分⽚可⽤,部分副本分⽚不可⽤
-
Red:不健康状态,部分主分⽚不可⽤
Demo
-
启动⼀个节点,3 个 Primary shard,⼀个 Replica,集群⻩⾊,因为⽆法分配 Replica
-
启动三个节点,1 个索引上包含 3 个 Primary Shard,⼀个 Replica
-
关闭 Node 1(Master)
-
查看 Master Node 重新选举
-
集群变⻩,然后重新分配
本节知识点回顾
-
主分⽚,副本分⽚的作⽤
-
主分⽚的分⽚数,设置后不能修改,除⾮重新索引数据
-
副本分⽚可以随时修改
-
-
集群的故障转移
- 需要集群具备故障转移的能⼒,必须将索引的副本分⽚数设置为 1,否则,⼀点有节点就是,就会造成数据 丢失
网友评论