SparkDataAn面试精选

ES的分布式架构原理?

2021-08-16  本文已影响0人  名字是乱打的
一个三个es进程组成的es集群,约定了该index有三个primary shard,三个replicat shard 分布式es的框架图demo

一. es的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放在同一个节点上
(9 )es里写只会往primary里写,读的话随便primary或者replicat都可以

二. master结点:

es集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理的工作的,比如维护索引元数据,负责切换primary shard和replica shard身份之类的。

要是master节点宕机了,那么会重新选举一个节点为master节点。

如果是非master节点宕机了,那么会由master节点,让那个宕机节点上的primary shard的身份转移到其他机器上的replica shard。

等到我们修复了那个宕机机器,重启了之后,master节点会控制将缺失的replica shard 身份分配过去,同步后续修改的数据之类,让集群恢复正常。

三.关于shard的个数问题

适当的提升分片数量可以提升建立索引的速度;
一般情况下:一个索引库建立5-20个分片是最合适的;

注意:如果分片过少或者过多,都会降低检索的速度

分片数过多会导致:

分片数太少导致:

建议:
是将单个分片存储存储索引数据的大小控制在20G左右;绝对不要超过50G , 否则性能很差
最终分片数量 = 数据总量/20G

上一篇下一篇

猜你喜欢

热点阅读