elastic search 7.9.0 中的写入模型

官方解释

1、概述

es中的索引是被分成了分片,分片就是shard。文档是放在分片上的。每个分片有多个副本。这些副本也可以被理解为replication group。当文档新增和删除的时候,他们要保持和主shard的同步。这样读取数据的时候才能准确。

上面这个过程叫做数据副本模型,即 data replication model

es中的数据副本模型具体是基于primary-backup model。这种模型描述的是在replication group中,从一个索引的角度看,有一个分片是承担主分片的责任,其他的分片被叫做副本分片。主分片作为所有索引操作的主入口,负责校验和操作是正确的。一个操作在主分片上做完后,主分片在将该操作复制到其他副本分片上操作。

2、基本的写入模型

第1步 coordinating stage

指的是,每一个索引操作第一步都是先被replication group解析,一旦被group认可后,这个操作就到了该group的主分片上。这个阶段叫做coordinating stage

第2步 primary stage

指的是 操作主要在主分片上执行,主分片负责校验和进一步在副本分片上执行。但是并不强制要求所有的副本分片都执行完。相反,es管理了一个列表,可以理解为,主分片执行完成后,列表内的分片都执行完就可以了。这个列表是被master节点管理的,有自己的名字,叫做in-sync copies,我们叫它同步集合。

第3步 replica stage

指的是 列表中的每一个副本分片在本地执行对应的操作

这3步是有顺序的,可以这样理解,第3步中的副本分片没有对主分片返回,第2步不算完成,第2步没有完成,第1步就不算完成。因为一个索引的主分片也有多个的情况,比如5个主分片共同组成1个索引,这个时候第1步要等第2步的5个主分片都成功完成才算完成。

所以,我们总结一下写入主要做的事。

1、主分片校验来的请求,拒绝不合理的请求

2、在主分片执行,比如新增文档或者删除文档

3、将该操作在in-sync copies中的副本分片执行一遍。如果是多个副本,会采用并行的方式

4、同步集合中所有的副本分片执行完毕后,返回主分片

5、主分片向客户端提交ack确认

3、一些异常情况的处理

1、主分片失败,主分片所在node会把情况告知master节点,新增文档的操作会一直等,等1分钟后,master节点会从副本分片推荐一个副本分片当主分片,然后新增操作会转向新的主分片继续进行。这种情况一般是整个node失联,失联node上的分片是主分片

2、同步集合中的副本分片失败。也就是同步集合中的分片丢失了操作。这个情况下要怎么办呢?解决办法是主分片会发送请求到master节点,请求让有问题的副本分片移除同步集合,当master节点回复已移除,主分片会提交ack操作。主分片还会为了让集群保持一个健康状态,再重新构建一个副本分片。

3、一个索引没有副本分片或者副本分片都失联了

这样的场景确实有可能存在。做法就是主分片处理操作,而不需要任何外部的一些校验等。因为master节点知道这个主分片是唯一的健康的分片。

猜你喜欢

转载自blog.csdn.net/weixin_39394909/article/details/108694044