elasticsearch write
yaokun123 edited this page Aug 12, 2019
·
4 revisions
我们在发送任何一个增删改的操作的时候,都可以带上一个consistency参数,指明我们想要的写一致性是什么
1、one:primary shard要求我们这个写操作,只要有一个primary shard是active活跃可用的,就可以执行。
2、all:all shard要求我们这个写操作,必须所有的primary shard和replica shard都是活跃的,才可以执行这个操作。
3、quorum:默认值,要求所有的shard中,必须大部分的shard都是活跃的,可用的才可以执行这个写操作。
写之前必须确保大多数shard都可用int((primary+number_of_replicas)/2)+1(当number_of_replicas>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状态的,才可以执行这个写操作。
如果节点数少于quorum数量,可能导致quorum不齐全,进而导致无法执行任何写操作
3个primary shard ,replica=1,至少要求3个shard是active的,3个 shard按照replica机制,
必须在不同节点上(这个说法感觉不正确),
如果只有两台机器的话,是不是有可能出现3个shard无法分布齐全,此时就可能出现操作无法执行的情况。
但是es提供了一种特殊的处理场景,就是说number_of_replicas>1时才生效,因为假如说你就1个primary shard,
replica=1此时就2个shard,(1+1/2)+1=2,要求必须有2个shard是活跃的,但是可能就1个node,
此时就一个shard是活跃的,如果你不特殊处理,导致我们但节点集群就无法工作。
quorum不齐全时,wait默认1分钟,timeout,100,30
等待期间,希望活跃的shard数量可以增加,最后是在不行,就会timeout
我们其实可以在写操作的时候,加一个timeout参数