sofastack/sofa-jraft

对于rheakv分为:kv数据存储目录以及raft log存储目录。但是参与者之间数据同步处理的是日志目录。那kv数据目录怎么同步了

zxuanhong opened this issue · 1 comments

Your question

  1. 对于rheakv分为kv数据存储目录以及raft log存储目录,但是节点数据同步处理的是日志目录。那kv数据目录怎么同步了
  2. 是否是依赖log目录回放,然后执行kv数据存储方法,也就是log复制后会调用对于的kv存储引擎
  3. 如果不处理kv数据存储复制,那怎么保证同一个分区所有参与节点kv数据保持一致了
  4. 对于真实环境,能否这两个合并。基本相当于同一个参与者数据存储了两份。那数据很大的情况磁盘是不是也会暂用很大。
  5. 或者说log是否有删除机制。对于有些情况。

Environment

  • SOFAJRaft version:
  • JVM version (e.g. java -version):
  • OS version (e.g. uname -a):
  • Maven version:
  • IDE version:

看下 rheakv 状态机代码:

首先 jraft-core 会触发 Snapshot load,rheakv 从 Snapshot 恢复一部分数据,另一部分最新数据通过状态机的 onApply 恢复。整个机制均由 jraft-core 触发。

log 是 raft log,默认会定期做 Snapshot,完成 Snapshot 会对日志进行裁剪,具体先看下文档,文档中包含的不在这里重复了:https://www.sofastack.tech/projects/sofa-jraft/jraft-user-guide/