sofastack / sofa-jraft

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

能否做到每次启动Node时都以NodeOptions.getInitialConf()为准,而不是去log里面读历史记录 #183

Closed winflex closed 5 years ago

winflex commented 5 years ago

如果把sofa-jraft集成到一个应用中,那么jraft的相关配置也是配置到该应用的配置文件,那当用户更改应用配置文件中的jraft集群地址后重启时,jraft依然会以旧的那份集群地址启动,除非我把log全清了,那么有没有办法让jraft总是以应用传进去的那个集群地址来初始化呢?

fengjiachun commented 5 years ago

想象一下以下场景:

  1. A(leader),B,C 三个节点,一条 log 只存在于 A 和 B,此时已形成多数派
  2. stop A,B,C
  3. 修改地址列表为 C,D, E
  4. 启动 C,D,E,那条 log 丢了

所以,jraft 在启动时必须以 meta 信息为准,而不是配置文件中的内容 如果你希望每次重启都重建集群,那么通过写代码在启动之前自动删除 jraft 文件目录,jraft 便会以你的配置文件内容为准

winflex commented 5 years ago

好的,明白