1、consistency,one (primary shard),all(all shard),quorum(default)
在发出请求时,可以添加consistency参数,
如:
put /index/_doc/id?consistency=quorum
- 当consistency为one时,保证primary shard是active的就可以写入
- 当consistency为all时,就必须保证所有的shard 处于active状态
- 当consistency为quorum时,保证大多数shard是可用的。
2、quorum 机制,写之前确保大多数shard可用,int((primary shard + number of replicas) /2 ) +1 当number of replica 大于1 才生效
比如:primary shard有3个,number of replicas = 1
quorum =int((primary shard + number of replicas) /2 ) +1 = ((3+1)/2)+1 =3
所以当有3个primary shard active时,才可以写入
3、在使用quorum 时,会产生问题
当节点数小于primary shard数量时,会导致数据无法写入。
因为,每个primary shard必须分布在不同的节点上,这样会导致primary shard 数量不足,导致无法写操作无法执行 。
ES提供了一个特殊的处理场景,当 number of replica > 1时才生效
如果我们有1个节点,1个primary shard ,replica =1,此时((1+1)/2)+1 =2 。要求必须有2个shard,但是我们只有1个节点,就只有一个shard 是活跃的,如果不做特殊处理,就导致单节点集群无法正常使用。
4、quorum不齐全时,wait 1分钟 ,time 100,30s
在quorum不全时,es默认会等待1分钟,等待shard数量的增加。
在请求时,可以添加timeout参数,缩短或加长超时时间(时间默认为毫秒,可以添加单位为s)
put /index/_doc/id?timeout=30s
