sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.52k stars 1.12k forks source link

通过pd操作removeReplica,成功后移除分区副本的节点一直提示:can't do preVote as it is not in conf。同时删除后分区信息peers依然还有删除的节点信息 #1080

Closed zxuanhong closed 4 months ago

zxuanhong commented 4 months ago

Your question

  1. 我创建了4个节点2个分区,副本数量为4的集群。但是通过pd移除分区1的节点2后。节点2一直提示can't do preVote as it is not in conf。
  2. 具体操作代码如下:
    RheaKVStore rheaKVStore = node.getRheaKVStore();
    RemotePlacementDriverClient placementDriverClient = (RemotePlacementDriverClient) rheaKVStore.getPlacementDriverClient();
    placementDriverClient.removeReplica(1, new Peer(-1, -1, new Endpoint("127.0.0.1", 8182)), true);
  3. 这个分区副本移除后不应该节点2不去响应这个分区,同时对应分区目录也应该删除啊。为啥一直提示这个。感觉有点奇怪
  4. 同时分区信息里面peers信息删除了也还是没有变化,即使pd查询前调用refreshRouteConfiguration方法。删除的副本节点依然在分区信息peers中。 image

Environment

fengjiachun commented 4 months ago

这个分区副本移除后不应该节点2不去响应这个分区,同时对应分区目录也应该删除啊。为啥一直提示这个。感觉有点奇怪

是的,只做 raft 层面的移除副本,不会删除数据,rheakv 不会去做这个,它不是一个开箱即用的系统

zxuanhong commented 4 months ago

@fengjiachun 但是移除不删除目录也就算了,被移除节点一直can't do preVote as it is not in conf。当然停掉对应node就好了。我认为的移除后pd需要同步所有配置信息。也就是使其变更。不应该重启节点后又can't do preVote as it is not in conf。

当然你说不是一个开箱即用的我就完全明白了。

fengjiachun commented 4 months ago

是的,在 jraft-core/rheakv 之上还要做很多 raft 以外的事情, jraft-core 和 rheakv 进作为框架的角色