
一. 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










