ES中shard和replica
- index包含多个shard
- 每个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的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard
- primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上
当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
让我们在集群中唯一一个空节点上创建一个叫做blogs的索引。默认情况下,一个索引被分配5个主分片,但是为了演示的目的,我们只分配3个主分片和一个复制分片(每个主分片都有一个复制分片):
当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。
让我们在集群中唯一一个空节点上创建一个叫做blogs的索引。默认情况下,一个索引被分配5个主分片,但是为了演示的目的,我们只分配3个主分片和一个复制分片(每个主分片都有一个复制分片):
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
附带索引的单一节点集群: 有一个索引的单一节点集群
我们的集群现在看起来就像上图——三个主分片都被分配到Node 1。
在同一个节点上保存相同的数据副本是没有必要的,如果这个节点故障了,
那所有的数据副本也会丢失。
如果我们启动了第二个节点,这个集群看起来就像下图。
双节点集群——所有的主分片和复制分片都已分配:
第二个节点已经加入集群,三个复制分片(replica shards)也已经被分配了
——分别对应三个主分片,这意味着在丢失任意一个节点的情况下依旧可以保证数据的完整性。
文档的索引将首先被存储在主分片中,然后并发复制到对应的复制节点上。
这可以确保我们的数据在主节点和复制节点上都可以被检索。
随着应用需求的增长,我们该如何扩展?
如果我们启动第三个节点,集群会重新组织自己
参考来源:https://blog.csdn.net/jiaojiao521765146514/article/details/82761645
https://es.xiaoleilu.com/010_Intro/00_README.html