• es写一致性原理以及quorum机制深入剖析


    1、consistency,one(primary shard),all(all shard),quorum(default)

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

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

    2、quorum机制

        写之前必须确保大多数shard都可用,int( (primary + number_of_replicas) / 2 ) + 1,当number_of_replicas>1时才生效

        quroum = int( (primary + number_of_replicas) / 2 ) + 1
        举个例子,3个primary shard,number_of_replicas=1,总共有3 + 3 * 1 = 6个shard
        quorum = int( (3 + 1) / 2 ) + 1 = 3
        所以,要求6个shard中至少有3个shard是active状态的,才可以执行这个写操作

    3、如果节点数少于quorum数量,可能导致quorum不齐全,进而导致无法执行任何写操作

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

        1个primary shard,replica=3,quorum=((1 + 3) / 2) + 1 = 3,要求1个primary shard + 3个replica shard = 4个shard,其中必须有3个shard是要处于active状态的。如果这个时候只有2台机器的话,会出现什么情况呢?

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

    4、quorum不齐全时,wait,默认1分钟,timeout,100,30s

        等待期间,期望活跃的shard数量可以增加,最后实在不行,就会timeout
        我们其实可以在写操作的时候,加一个timeout参数,比如说put /index/type/id?timeout=30,这个就是说自己去设定quorum不齐全的时候,es的timeout时长,可以缩短,也可以增长

  • 相关阅读:
    C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
    数据结构(二)栈与队列---回溯法之八皇后问题
    数据结构(二)栈与队列---递归之汉罗塔
    数据结构(二)栈与队列---栈的应用(递归和分治思想)
    数据结构(二)栈与队列---队列
    chmod 权限777 是什么意思(Unix和Linux的各种操作系统下)
    C#:基于WMI查询USB设备
    Eclipse中web项目部署至Tomcat步骤
    CSS设置DIV背景色渐变显示
    通过[蜘蛛协议]Robots.txt禁止搜索引擎收录的方法
  • 原文地址:https://www.cnblogs.com/duanxz/p/15926703.html
Copyright © 2020-2023  润新知