【HBZ分享】ElasticSearch读写数据的原理 以及 路由策略原理

编程入门 行业动态 更新时间:2024-10-08 18:31:41

【HBZ分享】ElasticSearch读写数据的<a href=https://www.elefans.com/category/jswz/34/1770123.html style=原理 以及 路由策略原理"/>

【HBZ分享】ElasticSearch读写数据的原理 以及 路由策略原理

ElasticSearch分布式工作原理,是如何进行读写数据的

1. 简单介绍ES
首先es是分布式的,只要我们启动相应数量的节点,并且这些节点分配相同的cluster.name,那他们就对属于同一个集群了,创建索引的时候,只需要指定对应的主分片数 和 副分片数量即可,剩下的交给es自己去做就可以了。但我们也需要知道es的原理

2. 节点交互原理:

请先注意:master节点并不是负责写操作的,而负责写操作的是【主分片】,即P0 或 P1。这一点和MYSQL是有区别的,MYSQL的master是负责写操作的。也就是说在ES中路由策略选中的主分片落在哪个节点上,那么该文档就会在该节点写入,并同步到对应的副分片。路由策略原理请看后面的ES路由原理

从上图来看,主分片P0,P1分别落在NODE1 和 NODE3上,这也就说明文档的写入一定是从NODE1 或 NODE3开始写入的,绝对不会从NODE2写入,因为NODE2这个节点并不存在主分片。那么究竟是从P0 还是 P1写入,这个要看路由策略最终会选择哪个主分片。

我们举一个实际例子:现在我们向NODE1 发送了新增文档请求,而路由策略最终选择了主分片-P0,那么在这整个过程ES都做了哪些操作呢?请看下图

1. 发送请求到NODE1上
2. 节点通过文档的路由算法确定该文档应属于【主分片-P0】, 而P0在NODE3节点上,因此该请求会转发到NODE3上面
3. 当P0主分片写入成功后,请求会转发到NODE1, NODE2节点中的R0-副分片上,因为R0是P0的副分片。一旦副分片也添加完毕并报告成功,此时NODE3会向NODE1报告成功,最终NODE1会向客户端报告成功,此次文档添加彻底完毕。

3. 读取文档
(1). 客户端向NODE1发送读取文档请求
(2). 在读取请求时,NODE1会通过轮询所有副本分片的方式来达到负载均衡,因为读是可以从副分片读的,所以当读取压力很大时,就可以增多副分片来实现优化减压。


ES文档的路由原理(就是一个公式)

1. 前言
当我们添加一个文档时,该文档应该存储到哪个主分片中,这时ES文档的路由就派上用场了。

2. 路由算法
首先存储到哪个主分片,这肯定不是随机的,是根据下面的公式

  • shard = hash(routing) % 主分片个数*

routing: 是个可变值,默认是文档的id,当然你也可以设置自定义值。routing通过hash函数,生成一个数字,然后和主分片个数取模,最终得到该文档应该存储到哪个主分片

至此我们应该知道了为什么创建索引的时候,确定了主分片数量后就永远不能改变主分片的数量了。就是因为路由算法。如果可以任意改变主分片的个数,那么同一个id对不同个数的主分片hash取模,获取的结果必然不同,造成的后果就是旧的数据就会出现存在但是查不到的情况。所以主分片个数一旦设定完就不能更改。

更多推荐

【HBZ分享】ElasticSearch读写数据的原理 以及 路由策略原理

本文发布于:2024-02-07 01:27:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752514.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:原理   路由   策略   数据   HBZ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!