图解写一致性原理以及 quorum 机制深入剖析

consistency写一致性
我们在发送一条增删改操作的时候,比如说 PUT/index/type/id ,
都可以带上一个consistency参数,指明我们想要的写一致性是什么?

PUT /index/type/id?consistency=quorum

有三个可选

  • one (primary shard)
    要求我们这个写操作,只要有一个primary shard是active 活跃可用的,就可以执行。
  • all (all shard)
    要求我们这个写操作,必须所有的primary shard 和replica shard 都是活跃的,才可以执行这个写操作。
  • quorum (default)
    默认的值,要求所有的shard中,必须大部分的shard都是active 的,可用的,才可以执行这个写操作。

quorum机制

写之前必须确保大多数shard都可用,当 number_of_replica>1时才生效

计算公式:quorum=int((primary+number_of_replicas)/2)+1,

举个例子:3个primary shard,number_of_replicas=1,总共就是3+3*1=6个shard

quorum=(3+1)/2+1=3

所以,要求6个shard中至少有3个shard是active状态的,才可用执行这个写操作

如果节点数少于quorum数量,可能导致quorum不齐全,进而导致无法执行这个写操作。

3个primary shard , replica=1,要求至少3个shard 是active,3个shard 按照之前学习的shard&replica机制。必须在不同的节点上,如果说只有2台机器的话,是不是有可能说,3个shard都没法分配齐全,此时就可以出现无法执行的情况。

es提供了一种特殊的处理场景,就是说当number_of_replicas>1时才生效。因为假如说,你就一个primary shard , replica=1,此时就2个shard
(1+1)/2+1=2,要求必须有2个shard是活跃的,但是可能就一个node。此时就一个shard是活跃的,如果不特殊处理的话,导致我们的单节点集群就无法工作。

quorum不齐全,默认等待一分钟,最后实在不行就回timeout。
当然我们也可以手动指定timeout时长,语法:

PUT  index/type/id?timeout=30ms   //当quorum不齐全的时候,es等待时长设置为30毫秒
PUT  index/type/id?timeout=30s   //当quorum不齐全的时候,es等待时长设置为30秒

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值