ES索引中主副分片的分布:
1:当新建一个索引库时,可以预先设置其会被分为N个分片(主分片),同时可以为每个主分片产生N个备份分片(副分片)。
2:N个主分片随机分布在集群的多个节点中;N个副分片也是随机的分布在集群的多个节点中,但是副分片和其主分片不会在一个节点上。
ES索引中主副分片的作用:
1:当在该索引库中新增一个文档时,会通过计算该文档ID的哈希值来决定将该文档存储到哪个主分片上;随后会将该操作同步到该主分片的所有副本分片上,做到主副数据的一致。(主从复制的过程由ES自身完成)
2:当在该索引库中修改或者删除一个文档时,根据文档ID找到文档所在的主分片,并进行操作;随后会将该操作同步到该主分片的所有副本分片上,做到主副数据的一致。(主从复制的过程由ES自身完成)
3:当搜索索引中的文档时,每次都会从主分片和副分片中选择一套完整的分片来组合成一个索引,以供搜索,而且每次搜索请求主副的组合可能不一样;这样当并发搜索很多时,就可以把压力分散在多个节点上,做到负载均衡。(提高了搜索性能/并发吞吐量)(综合1、2、3发现,读写请求的分发也是由ES自身完成的)
4:当集群中某个节点宕机,该节点上所有分片中的数据全部丢失(既有主分片,又有副分片);丢失的副分片对数据的完整性没有影响,丢失的主分片在其他节点上的副分片就会自动变成主分片;所以整个索引的数据完整性没有被破坏。(提高了容错性/容灾性)
副分片的优点和缺点
优点:
1:副分片可以提高搜索性能,提高并发吞吐量。
2:副分片可以提高容错性/容灾性。
缺点:
1:当副分片过多时,ES做主分片和副分片之间的数据同步时,消耗的资源和性能也不容小觑。
ES的主副分片和mysql的读写分离的对比
1:ES的主从复制由ES自身完成,mysql的主从复制需由开发者来完成。
2:ES的读写请求的分发也由ES自身完成,mysql的则需要由开发者自身来完成。
mysql读写分离参考:https://blog.csdn.net/ITWANGBOIT/article/details/102933213