Elasticsearch-写一致性原理以及quorum机制深入剖析(学习笔记)

(1)写一致性consistency有以下几种模式:one(primary shard),all(all shard),quorum(default)
我们在发送任何一个增删改查操作的时候,比如说put /index/tyep/id,都可以带上一个consistency参数,指明我们想要写的一致性是什么
例如:put /index/type/id?consistency=quorum
one:要求我们这个写操作,只要有一个primarily shard是active活跃可用的,就可以执行;
all:要求我们这个写操作,必须所有的primary shard和replica shard都是活跃的,才可以执行这个操作;
quorum:默认的值,要求所有的shard中,必须大部分的shard都是活跃的,可用的,才可以执行这个操作。

(2)quorum机制:写之前必须保证大多数的shard都可用,int((primary+number_of_replicas)/2)+1,当number_of_replicas>1时才生效.
int((primary+number_of_replicas)/2)+1计算公式举例说明:
3个primary shard,number_of_replicas=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机制,必须在不同的节点上,如果说只有两台机器的话,3个shard没办法分配齐全,此时就可能出现写操作无法正常执行的情况。

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

(4)quorum不齐全时,wait,默认1分钟,timeout,100,30s
等待期间,期望活跃的shard数量是可以增加的,最后如果不行就会timeout,我们可以在写操作的时候加一个timeout参数,比如:put /inex/tyep/id?timeout=30,这个就是说自己去设定一个quorum指定timeout时长,可以缩短也可以增加。

猜你喜欢

转载自blog.csdn.net/Micheal_yang0319/article/details/106975600