[译]ES读写文档时shard-replication模型

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

 

本文是对官网页面的粗糙译文,哈哈,方便本身理解。并发

shard: 分片elasticsearch

replication: 副本ide

 

引言

  ES的索引被划分红多个分片,而且每一个分片能够有多个拷贝,当对索引做出更新(如添加、删除文档)操做时,须要保持分片与其副本同步。保持分片及其拷贝信息同步和提供读服务咱们称之为数据副本模型。ui

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

写模型

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

  主分片执行如下基本流程:索引

  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

相关文章
相关标签/搜索