官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html

本文是对官网页面的粗糙译文,哈哈,方便自己理解。

shard: 分片

replication: 副本

引言

  ES的索引被划分成多个分片,并且每个分片可以有多个拷贝,当对索引作出更新(如添加、删除文档)操作时,需要保持分片与其副本同步。保持分片及其拷贝信息同步和提供读服务我们称之为数据副本模型。

  数据副本模型基于主-备模型,需要从分片拷贝组中找出一个分片作为主分片,其他的作为副本分片。主分片承担索引操作主要的入口,负责校验操作并保证其正确性。若主分片接受索引操作,它也要负责将这些操作复制到它的副本分片上。

写模型

  ES的索引操作首先要确定涉及的索引分片组,确定之后,在内部这个操作会被转发到分片组的主分片上,主分片校验操作,并转发到组内的副本分片上。可能有一些副本分片处于离线状态,主分片没有必要把操作发送到所有的副本分片上。替代方案是,ES的主节点维护一个列表,记录可靠的副本分片,主分片只需要把操作发送到列表中的副本分片即可。

  主分片执行以下基本流程:

  1. 验证操作,如果有错误则拒绝;
  2. 在本地执行操作,若域数据有问题,则拒绝;
  3. 转发操作到队列中的其他副本分片,若有多个,则并发发送;
  4. 其他副本分片执行操作并响应主分片,主分片确认队列中所有副本分片成功执行,并响应客户端。

失败处理

  在执行的过程中,主分片可能出错。这时,集群主节点会从分片列表中选出新的主分片,这个操作被转发到主分片继续执行。错误的分片会被移除副本队列,主节点会重新拷贝一份分片,并更新集群状态信息。

读模型

  当一个节点收到读请求时,它会转发到所有包含相关分片的节点上,收集节点的响应并响应客户端。

  读索引基本流程如下:

  1. 解析读请求到相关索引分片上;
  2. 从每个相关的分片所在组中,选取一个可用的副本分片,一般情况下,会在副本列表中进行轮询;
  3. 把读请求发送到选定的副本分片上;
  4. 合并查询结果并响应。

失败处理

  当副本查询失败时,协调节点会选取所在组的其他副本节点来执行查询。

阅读参考:

[1] https://www.elastic.co/blog/tracking-in-sync-shard-copies

[2] https://codingexplained.com/coding/elasticsearch/understanding-replication-in-elasticsearch

[3] https://codingexplained.com/coding/elasticsearch/understanding-sharding-in-elasticsearch

[4] https://codingexplained.com/coding/elasticsearch/introduction-elasticsearch-architecture

[译]ES读写文档时shard-replication模型的更多相关文章

  1. Elasticsearch必知必会的干货知识一:ES索引文档的CRUD

    ​ 若在传统DBMS 关系型数据库中查询海量数据,特别是模糊查询,一般我们都是使用like %查询的值%,但这样会导致无法应用索引,从而形成全表扫描效率低下,即使是在有索引的字段精确值查找,面对海量数 ...

  2. javadoc 生成帮助文档时,注意以下几点

    参考:http://www.w3school.com.cn/tags/tag_pre.asp javadoc 生成帮助文档时,注意以下几点: 1.函数功能描述的结尾一定要有句号,英文句号或中文句号均可 ...

  3. 打开word文档时提示“Microsoft Office Word已停止工作”

    我的电脑(Win10)有Office 2003和2013两个版本,可能由于之前超长待机等原因导致word 2003的文件(.doc)不能正常打开,没次都会提示“Microsoft Office Wor ...

  4. es删除文档或者删除索引

    es删除文档或者删除索引 学习了:https://www.imooc.com/video/15771 删除文档: DELETE http://127.0.0.1:9200/people/man/1 删 ...

  5. notepad++新建文档时,会出现语法错误的红色下波浪线

    notepad++新建文档时,会出现语法错误的红色下波浪线: 原因:新建文档时默认设置语言为PHP. 解决方法:修改默认语言为java或JavaScript,如下: 小结:打开文档时,也可能出现下波浪 ...

  6. 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)

    在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...

  7. JSON方式提交文档时SOLR报:AtomicUpdateDocumentMerger Unknown operation for the an atomic update, operation ignored

    文档是数组转成的json 原数组: array( 0 =>3, 1 =>3, 2 =>4, 3 =>5, 4 =>5, 5 =>6) 用array_unique去掉 ...

  8. Mongoose在向集合中插入文档时的集合命名问题

    Mongoose使用结构化的模式应用到MongoDB集合,为MongoDB Node.js原生驱动程序提供了更多的功能和简化了数据库操作. 从创建连接到向数据库中写入一个条数据经历了以下步骤: 1.连 ...

  9. ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

随机推荐

  1. 【机器学习】k-近邻算法以及算法实例

    机器学习中常常要用到分类算法,在诸多的分类算法中有一种算法名为k-近邻算法,也称为kNN算法. 一.kNN算法的工作原理 二.适用情况 三.算法实例及讲解 ---1.收集数据 ---2.准备数据 -- ...

  2. CentOS 7.4 上如何安装 tomcat 9

    本文将详细讲解在 CentOS 7.4 系统上如何安装tomcat 9,tomcat是没有32位和64位之分的. 创建tomcat的安装路径 首先在/usr/local/下建立一个tomcat的文件夹 ...

  3. canvas时钟效果

    话不多说,直接上代码 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/x ...

  4. jdk的split 有多坑

    先看段 代码: String str = "4117|519951|长信利泰灵活配置混合型证券投资基金|长信利泰|3|3||||156|0||||||||||||||||||||{\&quo ...

  5. JavaScript 对象创建

    tips: JavaScript 除了null和undefined之外,其他变量都可以当做对象使用. JavaScript 的基本数据类型有:number boolean string null  u ...

  6. 【POJ 2154】 Color (置换、burnside引理)

    Color Description Beads of N colors are connected together into a circular necklace of N beads (N< ...

  7. 【HDU 5730】Shell Necklace

    http://acm.hdu.edu.cn/showproblem.php?pid=5730 分治FFT模板. DP:\(f(i)=\sum\limits_{j=0}^{i-1}f(j)\times ...

  8. 【DFS】Paintball(6-22)

    [UVA11853]Paintball 算法入门经典第6章6-22(P175) 题目大意:有一个1000*1000的正方形战场,西南角坐标(0,0),西北角坐标(0,1000),有n个敌人,每个敌人处 ...

  9. 【预处理】Codeforces Round #407 (Div. 2) C. Functions again

    考虑枚举每个子串开头的位置,然后答案转化成询问这个位置之后 哪个位置的前缀和 - 这位置的前缀和 最大(当然是已经把绝对值和正负的情况处理好了,可以发现按奇偶,这个序列只有两种情况),只需要预处理这两 ...

  10. 将HTML表格的每行每列转为数组,采集表格数据

    将HTML表格的每行每列转为数组,采集表格数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //将HTML ...