ES写入流程详解-故障分析
2022-03-15 16:26:50 1 举报
ES写入流程详解-故障分析
作者其他创作
大纲/内容
R1
P0
1、写请求
2、协调节点参数验证,如果有错就拒绝操作。
R0
2.1、如果P0有副本存在,master节点把R0升级为P0
Master监控数据节点的的状态
在写入时,主分片发生错误,有可能是长时间GC,有可能是网络隔离
_verson
写入过程中,主分片很长时间未响应(长时间GC或者故障)
当分片不能响应一个读请求,协调节点会从副本组中选择另一个副本,将请求转发给他。没有可用的分片副本会导致重复的错误。某些情况下,例如 _search ,es 倾向于尽早响应,即使只有部分结果,也不等待问题被解决(你可以在响应结果的 _shards 字段,检查本次结果是完整的还是部分的)
6、所有的副本分片成功完成后,回复主分片
Master节点
2、协调节点把读请求转发到相关分片,每个副本集都需要一个分片,可能是主可能是副分片
4、
写操作发生故障的处理办法总结:1、如果协调节点发生故障,
8、
2、数据节点1的主分片P0发生故障
数据节点2
local checkpoint
8、协调节点回复客户端
数据节点1
4、Master把P0的副分片提拔为主分片(默认认最多等待1分钟)
allocation ID
2.2 allocate_stale_primary ,用于将一个陈旧的分片分配为主分片。使用此命令意味着丢失给定分片副本中缺少的数据。在所有分片副本都不存在的情况下,还可以强制 es 使用空分片副本分配主分片,这意味着丢失与该分片相关联的所有先前数据。 不言而喻,allocate_empty_primary 命令只能用于最糟糕的情况,其含义很好理解。
3、数据节点1向Master报告,分片发生故障
每个索引操作首先会使用 routing 参数解析到 副本组 ,通常基于文档 ID。一旦确定副本组,就会内部地转发该操作到分片组的主分片中。主分片负责验证操作和转发它到其他副本分片。 es 维护一个可以接收该操作的分片的副本列表。这个列表叫做 同步副本列表(in-sync copies),并由 master 节点维护。正如它的名字,这个“好”分片副本列表中的分片,都会保证已成功处理所有的索引和删除操作,并给用户返回了 ack。主分片负责维护不变性(各个副本保持一致),因此必须复制这些操作到这个列表中的每个副本。
in-sync allocation IDs
5、收到接收到来自副分片的拒绝其请求的响应时,它将会访问一下主节点,然后就会知道自己已被替换。 然后将操作路由到新的主分片
in- sync replica set
Allocation IDs存储在 shard 级元信息中,每个 shard 都有自己唯一的Allocation ID,同时集群级元信息中记录了一个被认为是最新shard 的Allocation ID集合,这个集合称为 in-sync allocation IDs。只有包含最新数据的分片才会在in-sync a IDs中。作用是为了确保主分片有最新的数据
Sequence Number
主分片继续处理
3、在索引中计算返回值分数,这个时候只取了ID,还没有取具体数据
写故障处理
P1
2.2 如果P0没有副本,mater确保不会提升任何其他分片副本(过时的)为主分片,并且索引到主分片上的任何操作都不会丢失。
5、主分片写完后,转发该操作到所有副本分片
10、Master找另一个节点,启动R0
DOC
R0-->P0
5、主分片把操作分发给所有副本
1、读请求
协调节点(默认每个节点都是协调节点)
1、主分片节点向Master汇报分片故障
Primary Terms 由主节点分配给每个主分片,每次主分片发生变化时递增。这和 Raft 中的 term,以及 Zab 中 Viewstamped Replication的view-number 概念很相似。Sequence Numbers 标记发生在某个分片上的写操作。由主分片分配,只对写操作分配。假设索引:website 有2个主分片和1个副分片,当分片website[0] 的序列号增加到5时,他的主分片离线,副分片被提升为新的主分片,对于后续写操作,序列号从6开始递增。分片website[1]有自己独立的序列号计数器。作用:1. P和S一起来分辨新旧请求2.比较分片之间的数据差异,用来同步分片
9、
3、这个时候P0不知道R0升级为P0,继续向R0发送消息
1、初始状态
7、主分片回复协调节点,操作完成。
6、副分片由于网络/硬件原因操作执行失败
数据读
8、Master确认移除该分片
3、路由计算,把请求发给主分片
Global checkpoint
4、选择需要的数据结果,读取数据
_version表示每条文档被修改的次数
client
数据写入
5、聚合数据,返还客户端
4、主分片执行增删改,如果有错就拒绝操作
4、发现是陈旧的主分页,拒绝操作
primary ID
收藏
0 条评论
下一页