zoukankan      html  css  js  c++  java
  • 写一致性原理以及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时才生效。
    quorum = 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机制,必须在不同的节点上,如果说只有2台机器的话,是不是有可能出现说,3个shard都没法分配齐全,此时就可能会出现写操作无法执行的情况。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=30ms,这个就是说自己去设定quorum不齐全的时候,es的timeout时长,可以缩短,也可以增长。ms毫秒,s秒,m分钟

  • 相关阅读:
    ES6之主要知识点(二) 变量的解构赋值。默认值
    ES6之主要知识点(一)
    前后端通信
    js 面向对象类
    typeof 、Object.prototype.toString和 instanceof
    原型链 之 对象的创建
    Ueditor1.4.3.3+springMvc+maven 实现图片上传
    Hibernate 根据实体名称得到DB表名以及表对应的Sequence name
    第三章:对象的共享——java并发编程实战
    第二章:线程安全性——java并发编程实战
  • 原文地址:https://www.cnblogs.com/qinjf/p/8511450.html
Copyright © 2011-2022 走看看