|NO.Z.00046|——————————|BigDataEnd|——|Hadoop&ElasticSearch.V46|——|ELK.v46|原理剖析|分布式数据一致性|
一、分布式数据一致性
### --- 分布式数据一致性
~~~ 在分布式环境下,一致性指的是多个数据副本是否能保持一致的特性。
~~~ 在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态。
~~~ 对系统的一个数据更新成功之后,如果所有用户都能够读取到最新的值,
~~~ 该系统就被认为具有强一致性。
二、ES5.0以前的一致性
### --- ES5.0以前的一致性
~~~ consistency,one(primary shard),all(all shard),quorum(default)
~~~ 我们在发送任何一个增删改操作的时候,比如PUT /index/indextype/id ,
~~~ 都可以带上一个consistency参数,指明我们想要的写一致性是什么?
~~~ PUT /index/indextype/id?consistency=quorumone:要求我们这个写操作,
~~~ 只要有一个primary shard是active状态,就可以执行。
~~~ all:要求我们这个写操作,必须所有的primary shard和replica shard都是活跃的,
~~~ 才可以执行这个写操作。
~~~ quorum:默认值,要求所有的shard中,必须是法定数的shard都是活跃的,
~~~ 可用的,才可以执行这个写操作。
### --- quorum机制
~~~ 写之前必须确保法定数shard可用 (1)公式:
int((primary shard + number_of_replicas) / 2) + 1
当number_of_replicas > 1时才生效。
3 primary shard + 1 = 6 shard ---> 3
### --- 举例
~~~ 比如: 1个primary shard,3个replica。
~~~ 那么 quorum=((1 + 3) / 2) + 1 = 3,
~~~ 要求3个primary shard+1个replica shard=4个shard中必须有3个shard是要处于active状态,
~~~ 若这时候只有两台机器的话,会出现什么情况?

三、timeout机制
### --- timeout机制
~~~ quorum不齐全时,会wait(等待)1分钟
~~~ 默认1分钟,可以设置timeout手动去调,默认单位毫秒。
~~~ 等待期间,期望活跃的shard数量可以增加,最后无法满足shard数量就会timeout,
~~~ 我们其实可以在写操作的时候,加一个timeout参数,
~~~ 比如说PUT /index/_doc/id?timeout=30s,这个就是说自己去设定quorum不齐全的时候,
~~~ ES的timeout时长。默认是毫秒,加个s代表秒
四、ElasticSearch5.0以及以后的版本
### --- ElasticSearch5.0以及以后的版本
~~~ 从ES5.0后,原先执行put 带 consistency=all / quorum 参数的,都报错了,提示语法错误。
~~~ 原因是consistency检查是在Put之前做的。然而,虽然检查的时候,
~~~ shard满足quorum,但是真正从primary shard写到replica之前,仍会出现shard挂掉,
~~~ 但Update Api会返回succeed。因此,这个检查并不能保证replica成功写入,
~~~ 甚至这个primary shard是否能成功写入也未必能保证。。
~~~ 因此,修改了语法,用了 下面的 wait_for_active_shards,因为这个更能清楚表述,而没有歧义。
### --- 例子:
PUT /test_index/_doc/1?wait_for_active_shards=2&timeout=10s
{
"name":"xiao mi"
}

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv025-elk
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通