Skip to content

FAQ

构建配置为 C++17,以 CMakeLists.txt 为准。

单节点启动时是否需要填写 initial_peers

Section titled “单节点启动时是否需要填写 initial_peers?”

不用。单节点引导时留空即可,Raftor 会把本节点作为唯一投票节点启动。

多节点首次引导时 initial_peers 应该怎么填?

Section titled “多节点首次引导时 initial_peers 应该怎么填?”

应填写完整初始成员列表,并且包含当前节点自己。不同节点第一次启动时看到的初始成员集合应保持一致。

ReadIndex() 为何不直接返回业务数据?

Section titled “ReadIndex() 为何不直接返回业务数据?”

因为它的职责是确认当前读取是否满足线性一致性,而不是替代状态机的读取逻辑。实际数据仍应由应用层读取。

默认优先使用 Raftor。只有在你必须自己掌控 Ready 持久化、消息发送和推进顺序时,才考虑直接使用 RawNode

只要日志会持续增长,就应规划快照策略。开发阶段可先手动触发;进入长期运行场景后,应配置自动快照阈值。

pre_votecheck_quorum 是否需要关闭?

Section titled “pre_vote 和 check_quorum 是否需要关闭?”

通常不建议关闭。默认保持开启更符合大多数生产场景,也更有利于线性一致读和稳定选主。

  • 验证最小接入流程:minimal_node
  • 参考完整应用结构:kvstore

单节点测试是否必须打开网络端口?

Section titled “单节点测试是否必须打开网络端口?”

不一定。可以设置 transport_kind = TransportKind::Noop,此时不会打开 socket,也不会连接远端 peer。该模式只适合单节点或测试。

运行期地址变更应调用 UpdateNodeAddress(id, addr)initial_peers 只在首次引导时生效,WAL 已初始化后重启会优先使用持久化地址簿。

什么时候启用 enable_entry_checksum

Section titled “什么时候启用 enable_entry_checksum?”

需要检测 entry 数据损坏时可以启用。默认关闭是为了兼容旧 WAL 和滚动升级。启用后如果发现 ChecksumMismatch,节点会停止并拒绝后续请求。