Elasticsearch 的写一致性
我们在发送任何一个增删改的操作的时候,都可以带上一个 consistency 参数,指明我们想要的写一致性是什么
- one:primary shard 要求我们这个写操作,只要有一个 primary shard 是 active 活跃可用的,就可以执行。
- all:all shard 要求我们这个写操作,必须所有的 primary shard 和 replica shard 都是活跃的,才可以执行这个操作。
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论