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

作为一个raft集群框架以及分布式rheakv框架。对集群管理感觉问题好多啊。能否完善下真实集群下的操作案例(推荐的文章,没一个是真实对集群管理进行过操作的)。 #1082

Closed zxuanhong closed 4 months ago

zxuanhong commented 4 months ago

Your question

一、 rheakv pd独立部署下。pd操作副本添加,副本移除等等走不通。

  1. pd副本添加操作,会提示

    Fail to [addReplica], Status[ECATCHUP<10003>: Peer 127.0.0.1:8182 failed to catch up.]
  2. pd副本移除操作,会提示。我只是移除分区副本。难道在集群部署模式下还要手动去分区8182节点停掉node不成??不应该一起完成吗。我及时去8182节点移除了node.重启又来了。

    ode <pd_test-0/127.0.0.1:8182> term 29 start preVote.
  3. pd作为管理者,如果当前节点没有我操作的分区任何副本,操作addReplica或者removeReplica时。提示如下。作为管理者pd不应该能正常处理这个问题吗??在真实环境一个集群,总不能还要查询下信息,然后去对应集群操作吧???

    Request processing failed: java.lang.NullPointerException: Null configuration
  4. 如果集群启动时初始化分区peer存在,我对对于分区节点进行副本删除后在添加,居然不是出现1错误。但是删除副本,对应副本目录居然还存在,pd分区信息peers列表删除的副本节点也存在????(pd调用了刷新配置)。分布式系统多raft副本本来就是动态创建的,不可能一初始化就所有节点都配置为副本,也不可能不进行副本删除。

  5. 真的集群配置变更,通过远程pd客户端client.getRegionRouteTable().addOrUpdateRegion();去变更分区配置,发现只能在当前分区节点生效(看了下源代码,仅仅只是修改了缓存数据)。那配置要怎么变更了???真的集群下也没个示例

二、 操作官方文档4.2 CLI 服务去操作。依然还是各种报错。不是配置不存在,就是链接不通(比如添加副本failed to catch up)

三、真的有pd的情况,rheakv

Environment

fengjiachun commented 4 months ago

我尝试一个一个回答 一

  1. failed to catch up 代表追 raft 日志失败,这是 raft core 层面的失败,具体要看对应日志,原因可能有很多,raft 本身就无法提供给你一种调了就成功的体验,要做的工作有 Snapshot 文件复制加上最新 raft log 的追赶
  2. 没明白你移除的是什么副本?移除操作通过 CliService 移除,跟 pd 没有关系,pd 不是做这个事情的,pd 只负责一些自动平衡负载等调度
  3. pd 不是管理者, rheakv 没有提供一个所谓的管理系统,rheakv 也不是一个开箱即用系统,只是一个 kv 框架,所以可管理可运维这一套是没有提供的
  4. 这个问题不详细回答了,因为不确定你的预期,坦率的讲, 可能 rheakv 不是你想要的东西,另外你期望的 raft 动态创建副本,这是 raft 以外的事情了,raft 本身不提供
zxuanhong commented 4 months ago

@fengjiachun 我认为的RemotePlacementDriverClient addReplica以及removeReplica是对rheakv分区副本进行操作??难道不是???因为我看readme是能够进行如下操作的:集群线上配置变更,增加节点、删除节点、替换节点等。以前用的是atomix,不知道听说过没。他那边叫partitions。也是多组raft分区概念。

fengjiachun commented 4 months ago

@fengjiachun 我认为的RemotePlacementDriverClient addReplica以及removeReplica是对rheakv分区副本进行操作??难道不是???因为我看readme是能够进行如下操作的:集群线上配置变更,增加节点、删除节点、替换节点等。以前用的是atomix,不知道听说过没。他那边叫partitions。也是多组raft分区概念。

readme 里说的是 jraft-core, 甚至不包含一个 kv, 你提到的增加接节点、删除节点等, 是 raft 协议的一部分,是指 jraft -core 实现了这些,需要外界调用 API 来使用(可以通过 CliService )

zxuanhong commented 4 months ago

@fengjiachun 明白了。目前没啥问题,这个issue我就关闭了