开发者社区 问答 正文

nacos 的raft可能长时间两个leader并存的情况,如何处理

要把旧的leader变成follower的前提条件是新leader的term更大。

但是旧leader在变成follower之前,是一直认为自己是leader,就可以处理请求,term就一直增加。

如果新leader的term增加速度更慢的话,新旧两个leader就可能一直共存。

上面说的有点抽象,我下面详细说下:

nacos的raft并不是严格意义上的raft,一个写请求是leader直接成功的,并不需要半数以上的确认。所以旧leader是可以一直认为自己是leader的。

leader变成follower的唯一条件是收到心跳,但是收到心跳还是要判断term的,所以term就成为关键了。

只要旧leader有写请求过来,虽然这个时候不会有其他的follower转发请求过来,但是他本身是会收到鞋请求的,流量不一定均匀,旧leader的流量可能和新leader的流量差不多,就会一直两个leader并存了。

展开
收起
一人吃饱,全家不饿 2021-02-01 20:02:09 1671 分享 版权
来自: 阿里开源
1 条回答
写回答
取消 提交回答
  • 这种情况是两个leader,网络分区下无法自动将为Follower,一个写请求到leader就成功,这个是基于客户端会一直心跳上报,这种情况下有多个leader也没关系。并不是所有写请求都会到leader就成功的,要求强一致性的写请求会同步写Follower。

    2021-02-01 20:02:34
    赞同 展开评论