elasticsearch6实战教程学习笔记(四)-- 其他原理


笔记来源 → B站学习视频:最新ElasticSearch6实战教程。 

v+数字是视频序号,内容根据我的理解微调了。

上篇介绍了一些简单的查询:elasticsearch6实战教程学习笔记(三)

本篇内容:(1)什么是扩容 - v24;(2)es6的容错机制 - v25;(3)文档数据路由原理 - v32;(4)文档增改查原理 - v33、v29、v35;(5)更新文档对并发问题的处理 - v31;(6)写一致性原理和quorum机制 - v34。

本篇的代码没有对应实例,使用的时候请自行修改。

目录

1. 扩容

2. 容错机制

3. 文档数据路由原理

4. 文档增改查原理

5. 更新文档对并发问题的处理

6. 写一致性原理和quorum机制


1. 扩容

(1)垂直扩容

增加节点容量,可以增加服务器容量(不推荐)。

(2)水平扩容

增加服务器(节点)容量。其中:

① 扩容的极限:每个节点上一个shard( primary + replica )。

② 容错性:保证服务器宕机时,每个shard至少有一个primary或replica shard存在。


2. 容错机制

发生宕机时,若存在primary shard不活跃,则集群的状态为red(不健康)。es将进行容错处理:

① 重新选举其他节点作为master。

② master会把丢失的primary shard的某一个副本提升为primary shard。此时,集群状态为yellow(亚健康),因为存在副本不活跃。

③ 宕机服务器重启。master会把每个primary shard上的数据拷贝一份到恢复的服务器上。


3. 文档数据路由原理

数据路由:es确定文档存储在哪个分片上,这个过程称为数据路由(routing)。

数据路由算法:shard=hash(routing)%number_of_primary_shards

(1)每次增删改查时,都有一个routing值,默认为文档_id;

(2)计算routing值的哈希函数值;

(3)计算出的hash值与主分片个数取余。

对应的余数即为文档所在的分片。(所以分片的个数不可修改)


4. 文档增改查原理

(1)增加doc

假设存在3个分片,每个分片有1个副本,共计6个shard。6个shard均匀分布在3个节点上。则:

① 用户可请求任意节点,被请求的节点为“协调节点”。“协调节点”将根据数据路由算法,算出文档应存在哪个分片上。

② “协调节点”将请求转发给数据路由后的节点上。

③ 节点存储文档后,将数据同步到它的副本上。

④ 完成所有操作后,“协调节点”对用户进行响应。

(2)修改文档

① 使用put修改文档(全部替换):es查询出数据展示给用户,用户修改后提交数据,旧文档被标记为deleted document,创建新文档new doc。旧文档在后续会被es删除。

② 使用post修改文档(部分替换):用户直接提交需要修改的数据,es修改数据,旧文档被标记为deleted document,创建新文档new doc。旧文档在后续会被es删除。

总结:post比put需要的网络传输次数要少,从而提高了性能。post的查询文档到修改都是在es内部实现的。

并发时,post比put发生冲突的可能性更小。

(3)查询文档

与前面的机制相似,由“协调节点”接受请求、转发请求并响应用户。

转发请求时,es通过“轮询调度”把请求均匀分配给primary和replica。

特例:当数据存在与primar且不存在于replica时,若请求被转发到replica上,则会提示查找不到doc。


5. 更新文档对并发问题的处理

es使用的是乐观锁,当文档更新发生冲突时,根据doc的版本version进行更新。

使用POST方式进行文档更新时:

POST /index/type/id/_update?retry_on_conflict=3&version=5
// retry_on_conflict:更新失败时,重新获取文档数据和版本信息进行更新,重复次数为设定的3次。

6. 写一致性原理和quorum机制

(1)consistency

① 只要索引下的分片有一个为活跃的,则写操作可执行。

PUT /index/type/id?consistency=one
{
    "name":"Ginna",
    "age":28,
    "sex":"female",
    "interests":["movies"]
}

②只要索引下的分片全部为活跃的,才能执行写操作。

PUT /index/type/id?consistency=all
{
    "name":"Ginna",
    "age":28,
    "sex":"female",
    "interests":["movies"]
}

③只要索引下的分片多数为活跃的,才能执行写操作。consistency的默认值为qurom。

PUT /index/type/id?consistency=qurom
{
    "name":"Ginna",
    "age":28,
    "sex":"female",
    "interests":["movies"]
}

④quorum机制

多数shard可用: [int((primary个数 + 每个primary的replica个数)/2)+1] 个shard可用。

例A:假设存在3个分片,每个分片有1个副本,共计6个shard。6个shard均匀分布在3个节点上。则需要[int((3 + 1)/2)+1] = 3 个shard可用。

例B:假设存在1个分片,有3个副本,共计4个shard。4个shard分布在2个节点上。则需要[int((1 + 3)/2)+1] = 3 个shard可用。

由于相同的副本不能放在同一个节点上,所以只有1个primary和一个replica活跃,故执行失败。

(2)timeout

当shard的活跃数未达标时,es会默认等待60s,若等待期间的shard活跃数没有增加,则显示timeout。timeout可自行设置。

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

下篇:准备整理一篇关于查询的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值