(1)index包含多个shard
(2)每个shard都是一个最小工作单元,承载部分数据,lucene实例,完整的建立索引和处理请求的能力
(3)增减节点时,shard会自动在nodes中负载均衡
(4)primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard
(5)replica shard是primary shard的副本,负责容错,以及承担读请求负载
(6)primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改
(7)primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard
(8)primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上
通过以下方式可以在创建索引时指定 primary shard 和 replica 的数量。
PUT /test_index
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
集群状态变化:
假设有3个节点,9个shard (3个primary shard,每个 primary shard 有 2 个 replica shard),具体分配如下表,假设 Node1 为 master
Node1 | Node2 | Node3 |
P0, R1-1, R2-1 | P1, R0-1, R2-2 | P2, R1-2, R0-2 |
1. 如果 Node1 宕机,此时集群状态为 red, 集群会自动选举一个节点为新的 master (假设为 Node2)
2. 新的 master 将 P0-1 这个 replica shard 升级成 primary shard, 此时 集群状态为 yellow
3. 重新启动 Node1 节点, 会自动更新数据,此时集群状态为 green。