ES的分布式架构原理?

2021-12-24 08:56:25 浏览数 (1)

一个三个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个分片是最合适的;

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

分片数过多会导致:

  • 1、 会导致打开比较多的文件
  • 2、 分片是存储在不同机器上的,分片数越多,机器之间的交互也就越多;

分片数太少导致:

  • 单个分片索引过大,降低整体的检索速率

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

es

0 人点赞