ElasticSearch入门系列(六)分布式操作

一、路由文档到分片

当你索引一个文档的时候,他被存储在单独一个主分片上。Elasticsearch根据一个算法来找到所在分片上。

shard=hash(routing)%number_of_primary_shards

routing值是一个任意字符串,默认是_id但也可以自定义。这个routing通过哈希函数生成一个数字,然后除以主切片的数量得到一个榆树。这也就是为什么主分片的数量只能在创建索引时定义且不能修改:如果主分片的数量在未来改变了,所有先前的路由值就失效了,文档就永远找不到了。

所有的文档API都接受一个routing参数,用来定义文档到分片的映射。

二、分片交互

这里有三个节点的集群,他包含一个叫做bblogs的索引并拥有两个主分片。每个主分片有两个复制分片。相同的分片不会再同一个节点上。

我们可以发送请求给集群中任意一个节点,每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点。所以也可以请求转发到需要的节点。

在我们发送请求时,最好的做法是循环通过所有节点请求,这样可以平衡负载。

三、新建索引和删除文档

新建索引和删除文档都是写操作,他们必须在主分片上成功完成才能复制到相关的复制分片上

以下为在主分片和复制分片上成功新建索引和删除文档的步骤:

①:客户端给Node1发送新建索引或删除请求

②:节点使用文档的_id确定文档属于分片0.他转发请求到Node3,分片0位于这个节点上

③:Node3在主分片上执行请求,如果成。他组案发请求到相应的位于Node1和Node2的复制节点上,当所有的复制节点报告成功,Node3报告成功到请求的节点,请求的节点再报告给客户端。

客户端接收到成功响应的时候,文档的修改已经被应用于主分片和所有的复制分片,你的修改就生效了。

replication:

复制的默认值是sync.这将导致主分片得到复制分片的成功响应后才返回。

如果你设置replication为async,请求在主分片上被执行后就会返回客户端,他依旧会转发请求给复制节点,但是你将不知道复制节点成功与否。

consistency:

默认主分片在尝试写入时需要规定数量(quorum)或过半的分片可用。为了防止数据被写入到错的网络分区。

int((primary+number_of_replicas)/2)+1

consistency允许值为一个 全部过过半分区、

timeout:

当分片副本不足时,Elasticsearch会等待更多的分片出现,默认等待一分钟还可以自己设置。

四、检索文档

文档能够从主分片或任意一个复制分片被检索

以下为从主分片或复制分片上检索一个文档的步骤:

①:客户端给Node1发送请求

②:节点使用文档的_id确定文档属于分片0、分片0对应的复制分片在三个节点上都有。此时。他转发请求到Node2

③:Node2返回endangered给Node1然后返回给客户端

五、局部更新文档

以下为局部更新的步骤:

①:客户端给Node1发送更新请求

②:他转发请求到主分片所在节点Node3

③:Node3从主分片检索出文档,修改_source字段的JSON。然后在主分片上重建索引。如果有其他进程修改了文档,他以retry_on_confluct设置的次数重复步骤3,都未成功则放弃

④:如果Node3成功更新文档,他同时转发文档的新版本到Node1和Node2上的复制节点以重建索引,当所有复制节点报告成功,Node3返回成功给请求节点,然后返回给客户端

六、批量请求

mgetbulk API与单独的文档类似。差别是请求节点知道每个文档所在的分片。它把多文档请求拆成每个分片的对文档请求,然后转发每个参与的节点。

一旦接收到每个节点的应答,然后整理这些响应组合为一个单独的响应,最后返回给客户端。

以下为请求步骤:

1.客户点向Node1发送mget请求

2.Node1为每个分片构建一个多条数据检索请求,然后转发到这些请求所需的主分片或复制分片上。当所有回复被接受,Node1构建响应并返回给客户端

routing参数可以被docs中的每个文档设置

下面我们将罗列使用一个bulk执行多个createindexdeleteupdate请求的顺序步骤:

  1. 客户端向Node 1发送bulk请求。
  2. Node 1为每个分片构建批量请求,然后转发到这些请求所需的主分片上。
  3. 主分片一个接一个的按序执行操作。当一个操作执行完,主分片转发新文档(或者删除部分)给对应的复制节点,然后执行下一个操作。复制节点为报告所有操作完成,节点报告给请求节点,请求节点整理响应并返回给客户端。

bulk API还可以在最上层使用replicationconsistency参数,routing参数则在每个请求的元数据中使用。

时间: 2024-08-28 20:20:53

ElasticSearch入门系列(六)分布式操作的相关文章

ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 在ElasticSearch中,使用JSON结构来存储数据,

Elasticsearch入门教程(六):Elasticsearch查询(二)

原文:Elasticsearch入门教程(六):Elasticsearch查询(二) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79237950 地理坐标点geo-point 地理坐标点:是指地球表面可以用经纬度描述的一个点. 地理坐标点可以用来计算两个坐标间的距离,还可以判断一个坐标是否在一个区域中,或在聚合中. 地理坐标点不能被

C语言快速入门系列(六)

C语言快速入门系列(五) C语言指针加强 本节引言: 上一节我们对C语言中的指针进行了初步的了解,学习了指针的定义,与普通变量 一维数组,二维数组,字符串之间的使用!在本节中我们将会学习一些新的知识点, 函数,结构体与共用体,枚举类型以及类型定义符typedef! 本节学习路线图: 本节正文 函数 ps:空函数就是什么都不做的函数,开发过程中不需要马上实现的,先写空函数!简单的空函数:void abc(){   } 结构体 共用体: 代码示例2: 建立一个共用体类型,当输入的时学生类型时,要求输

ElasticSearch入门系列(四)分布式初探

序言:ElasticSearch致力于隐藏分布式系统的复杂性,以下的操作都是在底层自动完成的: 将你的文档分区到不同的容器或者分片(shards),他们可以存在于一个或多个节点中 将分片均匀的分配到各个节点,对索引的搜索做负载均衡 冗余每一个分片,防止硬件故障造成的数据丢失 将集群中任意一个节点上的请求路由到相应数据所在的节点 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移 一.集群内部工作方式 Elasticsearch用于构建高可用结可扩展的系统.扩展的方式可以是购买更好的服务

ElasticSearch入门系列(一)是什么以及安装和运行

一.是什么 ElasticSearch是一个基于Apache Lucene的开源搜索引擎. Elasticsearch: 分布式的实时文件存储,每个字段都被所用并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理PB级结构化或非架构化数据 二.安装 window环境下下载安装包解压并执行bin目录下的elasticsearch.bat即可 Linux下:       curl -L -O http://download.elasticsearch.org/PATH/TO/VERSI

python入门系列:文件操作

操作模式 r """以只读方式打开文件(默认),文件的指针会放在文件的开头若文件不存在,会报错"""f = open("a.txt", "r") # 在同级目录下打开文件content = f.read()print(content)w """以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入)若文件不存在,会创建一个新的文件""&quo

ElasticSearch入门系列(二)交互API

一.基于HTTP协议,以JSON为数据交互格式的RESTful API 向ElasticSearch发出请求的组成部分与其他的普通的HTTP请求是一样的: curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>' VERD  HTTP方法:GET  POST  PUT   HEAD  DELETE PROTOCOL http或者

Spring Boot入门系列六( SpringBoot 整合thymeleaf)

SpringBoot 整合thymeleaf 一.什么是Thymeleaf模板 Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎.与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用.它的功能特性如下: @Controller中的方法可以直接返回模板名称,接下来Thyme

Elasticsearch入门系列(一)

1.安装 http://note.youdao.com/noteshare?id=83cbd486d6ec7ae941420047b24e62a8 2.基本概念 http://note.youdao.com/noteshare?id=542df719d3118f2848861d3435967e4e 原文地址:https://www.cnblogs.com/BOSET/p/12639934.html