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

请教个问题:任务应用到多数派状态机决定条件是怎样的???对于kv系统是否因为这个导致数据丢失。 #1087

Closed zxuanhong closed 3 months ago

zxuanhong commented 3 months ago

Your question

  1. 由于提交任务完成是通过判断是否应用到多数派状态机;
  2. 比如kv系统,三个参与者(1,2,3)。1、2两个参与者任务已经应用到状态机。一旦领导转移或者重新选举到3,3节点数据怎么跟上1,2了(他变为领导者了,应该是依据他的日志进行回放的吧)。
  3. 如果不更上,那岂不是数据存在丢失了。
  4. 是否有配置,要求task一定应用到所有存活参与者。
  5. 或者说我怎么保证整个raft集群启动好后,保证所有参与则数据是能够完全跟上leader的。而不会出现部分更上,部分跟不上

Environment

shihuili1218 commented 3 months ago

数据不全的成员,不会成为leader

zxuanhong commented 3 months ago

@shihuili1218 那如果调用转移了。因为集群数量一旦多的话,这个参与者丢失一点数据(没有onApply)。那个节点也少一个点。我是否可以认为,这样重复下来整个集群各个节点数据都变得不一致了。是否整个集群都不会在出现leader了。

更何况不是强制转移,就是服务器重启了。既然一个group 有三个参与者(一个leader,两个follow),这三个参与者的状态机都应该是一致的。所以个人觉得不应该有多数派这么一说

shihuili1218 commented 3 months ago

强制转移本就是一个危险操作。

另外多数派是为了容错,你说的有没有配置可以让其强制复制到所有节点,这个功能下版本会有,就是pr 1040

zxuanhong commented 3 months ago

@shihuili1218 好的,非常感谢。还有能否支持节点间一对一或广播方式通信。这样方便领导节点通过订阅通道直接发送消息到集群中。以前atomix中用起来比较爽。

zxuanhong commented 3 months ago

@shihuili1218 再请教个问题,对于如果使用NWR模型的pr 1040,我想实现所有节点数据一致。那请问这个计算时是使用存活的节点计参与计算还是集群所有成员。

我的意思,如果我部署一个7个参与者的raft集群。如果down调2个基于NWR如果还使用7个参与者来计算,集群还能正常运行吗(因为已经有两个掉线或者挂掉了),真实存活的只有5个参与者