写点什么

Elasticsearch 写一致性原理

用户头像
escray
关注
发布于: 2021 年 02 月 02 日
Elasticsearch 写一致性原理
consistency


By default, the primary shard requires a quorum, or majority, of shard copies (where a shard copy can be a primary or a replica shard) to be available before even attempting a write operation. This is to prevent writing data to the “wrong side” of a network partition.


  • 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 都是活跃的,可用的,才可以执行这个写操作

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 状态的,才可以执行这个写操作

如果只有 2 台机器


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


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


Elasticsearch 提供了一种特殊的处理场景,就是说当 number_of_replicas>1 时才生效,因为假如说,你就一个 primary shard,replica=1,此时就 2 个 shard


(1 + 1 / 2) + 1 = 2,要求必须有 2 个 shard 是活跃的,但是可能就 1 个 node,此时就 1 个 shard 是活跃的,如果你不特殊处理的话,导致我们的单节点集群就无法工作

当 quorum 不齐全时


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


等待期间,期望活跃的 shard 数量可以增加,最后实在不行,就会 timeout


我们其实可以在写操作的时候,加一个 timeout 参数,比如说


put /index/type/id?timeout=30
复制代码


这个就是说自己去设定 quorum 不齐全的时候,Elasticsearch 的 timeout 时长,可以缩短,也可以增长

补充说明


在查询官方文档的时候,我发先这篇文章的内容似乎已经过时了,相关的说法在 Elasticsearch: The Definitive Guide [2.x] 上可以找到,但是在 current(7.10.1 ) 的文档里面似乎找不到,只找到了 Quorum-based decision making


a quorum is a subset of the master-eligible nodes in the cluster.

发布于: 2021 年 02 月 02 日阅读数: 24
用户头像

escray

关注

Let's Go 2017.11.19 加入

在学 Elasticsearch 的项目经理

评论

发布
暂无评论
Elasticsearch 写一致性原理