Elasticsearch 的写一致性

发布于 2021-06-10 08:46:09 字数 1071 浏览 1361 评论 0

我们在发送任何一个增删改的操作的时候,都可以带上一个 consistency 参数,指明我们想要的写一致性是什么

  1. one:primary shard 要求我们这个写操作,只要有一个 primary shard 是 active 活跃可用的,就可以执行。
  2. all:all shard 要求我们这个写操作,必须所有的 primary shard 和 replica shard 都是活跃的,才可以执行这个操作。
  3. quorum:默认值,要求所有的 shard 中,必须大部分的 shard 都是活跃的,可用的才可以执行这个写操作。

quorum 机制

写之前必须确保大多数 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参数

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文