es学习2-data replication model

replication group

前面装了head插件可以看到如下界面:

193912_8cIz_1445156.png

在Elasticsearch 中索引会被分片,并且每个分片会有多个副本,这些副本被称为replication group,并且需要保持同步复制,这样查询不同副本数据才能保证数据一致,上面相同数字就是一组。

就单个分片来看这种备份是属于主-备模式,既然这样,那就要分主分片和复制分片,主分片是所有索引操作的主要入口点,主分片负责验证并确保操作是正确的,主执行操作成功还要把操作发送到其他副本上。

把这个模型称为 data replication model,下面主要看看这个模型分别在读写上面的体现。

写模型

对索引的操作会被路由到一个replication group中,通常是根据id路由,然后会内部把操作转发到一个组主分片上,主分片负责验证操作并且转发到其他复制分片上,这里有一份同步复制副本的列表被Master节点管理。

主分片的工作流程

1. 验证输入的操作,如果有结构错误直接拒绝
2. 先本地执行操作,验证字段的内容,如果有错直接拒绝
3. 根据当前副本列表,并行把操作分发到每一个副本分片
4. 一旦所有副本分片执行成功,并且上报到主分片,主分片把请求成功通知到客户端

失败处理

主分片操作失败: 如果主分片本身操作失败,则存放主分片的节点要把信息发送到Master节点,这时索引相关操作等待一会儿(默认一分钟,可能一分钟之内能恢复好),Master会在副本分片中选举一个新的主分片,前面失败的索引相关操作被发送到新的主分片上面继续执行,这里需要注意,master节点同样会监控其他节点的健康,并主动对主分片进行降级,这通常是网络方面的原因。

主分片如果发现备份分片有异常情况就上报给Master,Master会重新指示其他节点起一个新的备份分片。

备份分片在收到操作请求后会验证对方分片是否任然是主分片,如果主分片已经被降级备份分片会拒绝它发过来的操作,主分片收到拒绝后会请求Master节点,Master会告诉旧的主分片你已经被替换掉,然后操作会被路由到新的主分片。

读模型

因为是基于主-备模型,所以副本分都是一样的,所以每个分片都能提供读服务,
当一个读请求到某个节点,那个节点负责分发请求到相关分片的节点,并整理结果返回给客户端,通常该节点为协调节点。

读流程

1. 解析读请求到相关分片,这里分片分布在集群不同节点上,需要从多个分片不同的数据集读取。
2. 从分片replication group中选取一个可用数据分片(这里不分主备),es通常在replication group简单循环
3. 将分片级别请求发送到选取的副本
4. 整合结果返回,如果是根据Id获取数据只有一个分片命中,跳过

失败处理

当一个分片对读请求处理失败,则协调节点会选取另外一个相同备份组的分片,在一些情况下(比如:_search)es更倾向于快速返回,而不是等待问题的解决,哪怕只取到一部分数据,但是会把局部结果在_shards中表明。

 

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html

转载于:https://my.oschina.net/chengxiaoyuan/blog/843117

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值