路由

当你索引一个文档,它被存储在单独一个主分片上。Elasticsearch 是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片 1 还是分片 2 上的呢?
  进程不能是随机的,因为我们将来要检索文档。
 
算法决定:
  shard = hash(routing) % number_of_primary_shards
  routing 值是一个任意字符串,它默认是_id 但也可以自定义。
 
为什么主分片的数量只能在创建索引时定义且不能修改?
  如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档也就永远找不到了。
所有的文档 API(get、index、delete、bulk、update、mget)都接收一个 routing参数,它用来自定义文档到分片的映射。自定义路由值可以确保所有相关文档——例如属于同一个人的文档——被保存在同一分片上。
 
操作数据节点工作流程
每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点,所以也可以将请求转发到需要的节点。
新建、索引和删除请求都是写(write)操作,它们必须在主分片上成功完成才能复制到相关的复制分片上。

  1. 客户端给 Node 1 发送新建、索引或删除请求。
  2. Node1 节点使用文档的_id 确定文档属于分片 0。它转发请求到 Node 3,分片0 主分片位于这个节点上。
  3. Node 3 在主分片上执行请求,如果成功,它转发请求到相应的位于 Node 1 和Node 2 的复制节点上。当所有的复制节点报告成功,Node 3 报告成功到请求的节点,请求的节点再报告给客户端。
 
replication
  复制默认的值是 sync。这将导致主分片得到复制分片的成功响应后才返回。
  如果你设置 replication 为 async,请求在主分片上被执行后就会返回给客户端。它依旧会转发请求给复制节点,但你将不知道复制节点成功与否。
  上面的这个选项不建议使用。默认的 sync 复制允许 Elasticsearch 强制反馈传输。async 复制可能会因为在不等待其它分片就绪的情况下发送过多的请求而使Elasticsearch 过载。
 
检索流程
文档能够从主分片或任意一个复制分片被检索。

1. 客户端给 Node 1 发送 get 请求。
2. Node 1 节点使用文档的_id 确定文档属于分片 0。分片 0 对应的复制分片在三个节点上都有。此时,它转发请求到 Node 2。
3. Node 2 返回文档(document)给 Node 1 然后返回给客户端。
   对于读请求,为了平衡负载,请求节点会为每个请求选择不同的分片——它会循环所有分片副本。
   可能的情况是,一个被索引的文档已经存在于主分片上却还没来得及同步到复制分片上。这时复制分片会报告文档未找到,主分片会成功返回文档。一旦索引请求成功返回给用户,文档则在主分片和复制分片都是可用的。
 
 

ES集群操作原理的更多相关文章

  1. ES集群

    1. ElasticSerach集群安装  修改配置文件elasticserach.yml [elk@localhost config]$ vi elasticsearch.yml # ------- ...

  2. ES 集群调整、升级 最佳实践

    日常应用中我们会经常对es 集群做一些参数调整或者升级版本,但是每次关闭节点再打开 其中的数据同步的痛苦估计有很多人领悟过(有可能出现IO或者网络拥堵导致恶性循环)官网有套方案可以尝试一下: 1.关掉 ...

  3. windows单节点下安装es集群

    linux下的es的tar包,拖到windows下,配置后,启动bin目录下的bat文件,也是可以正常运行的. 从linux下拷的tar包,需要修改虚拟机的内存elasticsearch.in.bat ...

  4. ES 集群上,业务单点如何优化升级?

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! ES 基础 ES 集群 ES 集群上业务优化 一.ES 基础 ...

  5. es集群数据库~运维相关

    一 数据同步方案  1 ES-JDBC  不能实现删除同步操作.MYSQL如果删除,ES不会删除  2 logstash-input-jdbc  能实现insert update,但是仍然不能实现删除 ...

  6. elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)

    一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...

  7. elasticsearch(es) 集群恢复触发配置(Local Gateway参数)

    elasticsearch(es) 集群恢复触发配置(Local Gateway) 当你集群重启时,几个配置项影响你的分片恢复的表现. 首先,我们需要明白如果什么也没配置将会发生什么. 想象一下假设你 ...

  8. docker 快速部署ES集群 spark集群

    1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库. 2)弄清楚怎么样打包 linux镜像(或者说制作). 3)试着改一下,让它们跑在集群里面. 4) ...

  9. Elasticsearch-6.7.0系列(二)ES集群安装与验证

    准备3台centos7机器/虚拟机,每台都安装上elasticsearch6.7.0 ,安装过程参考我的另一篇博客<Elasticsearch-6.7.0系列(一)9200端口 .tar.gz版 ...

随机推荐

  1. 本地客户端(自己的电脑)连接远程Oracle数据库(服务器端),客户端安装步骤

    如果本地自己的电脑没有安装Oracle(服务器端数据库),那就要单独安装HA-Instant Client-v11.2.0.3.0.exe(oracle_client客户端) 如果本地安装了Oracl ...

  2. 关于Map集合注意事项

    今日代码中循环Map时,采用循环主键 Map<Integer,Map<Integer,String>> status =  new HashMap<>(); Set ...

  3. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  4. DOS打印目录树到文件

    tree /f >>tree.txt 卷 数据 的文件夹 PATH 列表 卷序列号为 -FBAE E:. └─mysite │ manage.py │ └─mysite settings. ...

  5. CSPS模拟 89

  6. Linux下安装nexus

    下载地址:https://help.sonatype.com/repomanager3/download tar xf nexus-linux-3.19.1-01.tar.gz cd nexus-li ...

  7. Http帮助类(史上最详细帮助类)

    分享一波干活,HttpHelper(支持设置获取Cookie和设置SSL证书) 代码 /// <summary>    /// Http连接操作帮助类    /// </summar ...

  8. 如何提高web应用的吞吐量

    这篇博文所列举的优化手段是针对比较传统项目,但是想提高系统的吞吐量现在时髦的技术还是那些前后端未分离, 使用nginx当成静态资源服务器去代理我们的静态资源 是谁限制了Throughput? 当我们对 ...

  9. 数据仓库ETL案例学习(一)

    来自课程案例学习   某跨国食品超市的信息管理系统,每天都会记录成千上万条各地连锁超市的销售数据.基于大数据的背景,该公司的管理层决定建立FoodMart数据仓库,期望能从庞大的数据中挖掘出有商业价值 ...

  10. Unity 简记(2)--2D移动

    目录 1.输入 1.1直接检测按下哪个按键 1.2.检测水平输入和垂直输入 2.移动 2.1.Transform组件 2.2.RigidBody组件 2.3.NavMeshAgent组件 2.4.Ch ...