ES-primary shard 和 replica shard

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES-primary shard 和 replica shard相关的知识,希望对你有一定的参考价值。

参考技术A ES作为一个分布式系统,需要保证数据的安全性和容灾性.如果数据全部存在一个节点上(即一台服务器)上,如果服务器宕机或者硬盘坏了,那服务就不可用,数据就有可能丢失.为了保证系统的高可用和数据安全,ES通过shard机制来解决上述问题.

数据被写入时,可以会被写入到多个 primary shard 中的一个,而且只会是其中一个shard,不可能存在一条数据被写入到多个 primary shard .每个shard都是一个独立的 Lucene 实例,关于shard的个数,可以在创建索引时,手动设置.这个值在设置完成之后,无法修改.可以通过参数 number_of_shards 设置.

replica shard 就是 primary shard 的备份.如果一个 primary shard 损坏或者暂停服务,数据并不会丢失,可以在 primary shard 对应的 replica shard 中找到.同时 replica shard 和其对应的 primary shard 永远不会分配在同一台机器上(一台机器,多个节点情况除外).因为分配在同一个节点上,如果在同一个节点上,那就没有意义了. replica shard 的个数也是可以自己手动设置的.这个数是可以修改的.通过 number_of_replicas 设置该值.

如上图所示,primary shard为3,replica shard 为2,所有shard的总个数可以通过公式:
shard_number = primary_shard + replica_shard * primary_shard

elasticsearch shard 和 replica

(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
   }
}
















以上是关于ES-primary shard 和 replica shard的主要内容,如果未能解决你的问题,请参考以下文章

linux集群下 solr集群搭建

clickhouse之replication配置及使用

mongodb集群shard状态异常:RECOVERING

ClickHouse 相关博客

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

ES容错机制:master选举,replica容错,数据恢复