## 一、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放在同一个节点上 复制代码 ~~~ ## 二、图解 shard & replica ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/82954f51e50048a28c92b70e6345ed4e~tplv-k3u1fbpfcp-watermark.image) ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9c4bf09b0e324042b0a5d2c20333e1b2~tplv-k3u1fbpfcp-watermark.image) 3.多个node环境下 replica shard 是如何分配的呢? ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/610782b2b46a40da8f3f70ad27c47d3b~tplv-k3u1fbpfcp-watermark.image) ## 三、扩容的过程、如何超出扩容的极限、以及如何提升容错性 (1)primary&replica自动负载均衡,6个shard,3 primary,3 replica (2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好 ![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3babc7b95b524c58974330c4e24ba0e0~tplv-k3u1fbpfcp-watermark.image) (3)扩容的极限,6个shard(3 primary,3 replica),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好 (4)超出扩容极限,动态修改replica数量,9个shard(3primary,6 replica),扩容到9台机器,比3台机器时,拥有3倍的读吞吐量 ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/85a3f07b94454090960dea6fc4ee4c38~tplv-k3u1fbpfcp-watermark.image) (5)3台机器下,9个shard(3 primary,6 replica),资源更少,但是容错性更好,最多容纳2台机器宕机,6个shard只能容纳0台机器宕机 ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9d05498bf9a748e89ee1ed0f480ec23d~tplv-k3u1fbpfcp-watermark.image) (6)ES 的容错机制: master 选举,replica 容错 ,数据恢复 1. master node 宕机,自动选举另一个node成为新的master 2. 新的master 将丢失掉的 primary shard 的某个 replica shard 提升为 primary shard 3. 重启故障的node,新的master节点会将缺失的副本都copy一份到该node上去。 作者:Leo\_CX330 链接:https://juejin.cn/post/6918745075761545223 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。