0
点赞
收藏
分享

微信扫一扫

一起raft 切主后的故障分析

笙烛 2022-07-12 阅读 29

现象

线上由3个控制节点组成的一个raft集群种的一个节点stop了,stop 之前刚发过一条踢掉一台数据节点的命令,但是数据节点并没完全被踢掉---虽然元数据不在了,但是节点还在集群中,前端还能访问它。

问题分析

梳理了下kick 数据节点的业务流程如下:
1.RPC服务器端响应brpc请求;
2.服务器端判断当前如果是leader, 就进入leader 处理流程;
3.leader append KickDataServer 事务日志到所有的副本;

  1. 每个副本收到事务日志,走下边的流程:
    4.1 解析对应的请求类型;
    4.2 判断自己现在角色是否leader, 如果不是结束当前流程;如果是,开始apply 这条事务日志:
    4.2.1 去掉数据库中关于带kick的数据节点的记录;
    4.2.2 针对有副本在待删除节点机器上的block, 发起补副本;
    4.2.3 返回给CLI kick数据节点成功;
    4.2.4 给待kick的数据节点发下线命令。

上面流程看了两遍,初步怀疑是执行到4.2.3后碰到控制节点被stop 导致的。但后来仔细一下,咱这是基于raft的啊,即便老leader被stop掉,新leader 接管后,也会重放踢数据节点的命令啊? 那问题在哪呢?

遗留问题

  1. raft 切主后回放哪些log?

  2. raft 切主后如何回放log?
举报

相关推荐

0 条评论