shared和replica梳理

shared和replica梳理

一个 index 包含多个 shard。(一个 index 包含 3T 的数据,在三台机器上分别部署了一个 shared,则一共是三个 shared,每个 shared 会均衡的负载 1T 的数据。)

每个 shard 都是一个最小工作单元,承载部分数据,lucene 实例,完整的建立索引和处理请求的能力。增减节点时,shard 会自动在 nodes 中负载均衡。

primary shard 和 replica shard,每个 document 肯定只存在于某一个 primary shard 以及其对应的 replica shard 中,不可能存在于多个 primary shard。

replica shard 是 primary shard 的副本,负责容错,以及承担读请求负载。(如果 primary shard 宕机了,此时 replica shard 会自动替代 primary shard 进行工作。)

primary shard 的数量在创建索引的时候就固定了,replica shard 的数量可以随时修改。primary shard 的默认数量是 5,replica 默认是 1,默认有 10 个shard,5 个 primary shard,5 个 replica shard。

primary shard 不能和自己的 replicac shard 放在同一个节点上(否则节点宕机,primary shard 和副本都丢失,起不到容错的作用),但是可以和其他 primary shard 的 replica shard 放在同一个节点上。

单node创建index

单 node 环境下,创建一个 index,有 3 个 primary shard,3 个 replica shard。集群 status 是 yellow。

这个时候,只会将 3 个 primary shard 分配到仅有的一个 node 上去,另外 3 个 replica shard 是无法分配的。因为 primary shard 和 replica shard 是不能分配在一个节点上的,分配在一个节点上没有任何意义。

集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求:

PUT /haicoder.net { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }

两个node replica shard分配

  1. 在 node1 上分配了三个 primary shard,分别为 P0,P1,P2。
  2. 在 node2 上分配了三个 primary shard 对应的 replica shared,分别为 R0,R1,R2。
  3. 同时会将三个 primary shard 的数据同步到三个 replica shared。
  4. primary shard 和 replica shared 都会承载数据的读。