一个三个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