ElasticSearch教程——数据一致性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gwd1154978352/article/details/82877804

ElasticSearch汇总请查看:ElasticSearch教程——汇总篇

 

一致性概念

在分布式环境下,一致性指的是多个数据副本是否能保持一致的特性。
在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态。
对系统的一个数据更新成功之后,如果所有用户都能够读取到最新的值,该系统就被认为具有强一致性。

写一致性

对于写操作,Elasticsearch支持与大多数其他数据库不同的一致性级别,它允许初步检查以查看有多少个分片可用于允许写入。可用的选项是:quorum的可设置的值为:one和all。默认情况下,它被设置为:quorum,这意味着只有当大多数分片可用时,才允许写入操作。在大部分分片可用的情况下,由于某种原因,写入复制副本分片失败仍然可能发生,在这种情况下,副本被认为是错误的,该分片将在不同的节点上进行重建。 

我们在发送任何一个增删改操作的时候,比如说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时才生效,number_of_replicas是在索引中的的设置,用来定义复制分片的数量,如果只有一台机器(没有备机),那么就为0

计算公式

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

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

看清上面说的,是有可能,并不是一定,按照我下图的分配,就不会出现相关问题。具体的分片相关知识以及注意点可以看ElasticSearch教程——分片、扩容以及容错机制

扫描二维码关注公众号,回复: 3464349 查看本文章

注意: 新索引默认有1个复制分片,这意味着为了满足quorum的要求需要两个active的分片。当然,这个默认设置将阻止我们在单一节点集群中进行操作。为了避开这个问题,规定数量只有在number_of_replicas大于一时才生效。

timeout

quorum不齐全时,会wait(等待),默认1分钟,可以设置timeout手动去调,默认单位毫秒
等待期间,期望活跃的shard数量可以增加,最后实在不行,就会timeout,我们其实可以在写操作的时候,加一个timeout参数,比如说

PUT /index/type/id?timeout=30s

这个就是说自己去设定quorum不齐全的时候,ES的timeout时长。默认是毫秒,加个s代表秒。

读一致性

对于读操作,新文档在刷新间隔时间后才能用于搜索。为了确保搜索结果来自最新版本的文档,可以将复制(replication)设置为sync(默认值)(同步),当在主分片和副本分片的写操作都完成后,写操作才返回。在这种情况下,来自任何分片的搜索请求将从文档的最新版本返回结果。甚至如果你的应用要求高索引吞吐率(higher indexing rate)时,replication=async(异步),可以为搜索请求设置 '_preference' 参数为 primary 。这样搜索请求会查询主分片,从而保证结果中的文档是最新版本。

猜你喜欢

转载自blog.csdn.net/gwd1154978352/article/details/82877804