Repolode
hashicorp

hashicorp/raft

一个 Go 语言实现的 Raft 共识协议库,用于管理复制日志和复制状态机。

Star
9,161
Fork
1,104
未关闭 Issue
73
最近提交
20天前

这是什么?

raft 是一个 Go 语言库,实现了 Raft 共识算法。它管理一份复制日志,应用可以接入自己的有限状态机(FSM),使多个节点按相同顺序执行命令,从而保持状态一致。它适合用来构建一致性优先、能容忍网络分区的分布式系统(CP 系统),并具备一定的容错能力。

库内实现了 leader 选举、日志复制和提交跟踪,并支持自动快照与日志压缩,以限制磁盘占用。通常以 3 台或 5 台服务器组成集群,分别可容忍 1 台或 2 台节点故障。只要法定人数(quorum)可用,就能动态变更集群成员,也提供非投票成员和可插拔的传输层地址提供者。

日志和稳定存储的后端是独立组件:纯 Go 实现的 raft-boltdb 基于 Bbolt,另有基于 MDB 的后端位于单独仓库。指标上报可通过构建标签在 armon/go-metrics 与 hashicorp/go-metrics 之间切换。

核心功能

  • 01遵循 Raft 协议实现 leader 选举和日志复制
  • 02提供可插拔的有限状态机接口以承载业务逻辑
  • 03自动快照与日志压缩,控制磁盘占用
  • 04支持动态变更集群成员和非投票服务器
  • 05日志与稳定存储支持可插拔后端

适用场景

  • 构建复制型键值存储或其他强一致性服务
  • 在小规模服务器集群中保持元数据一致
  • 为 Go 服务增加基于 leader 的高可用能力

快速上手

  1. 1

    检查是否已安装 Go 1.16+

    go version
  2. 2

    阅读该库的 Godoc 文档

使用前须知

  • 这是一个 Go 库而非独立服务器,你需要围绕它自行实现状态机和传输层。
  • 推荐的持久化日志后端 raft-mdb 位于独立仓库中,且需要 cgo。

收录于专题

标签

常见问题

raft 是什么?
一个 Go 语言实现的 Raft 共识协议库,用于管理复制日志和复制状态机。 raft 是一个 Go 语言库,实现了 Raft 共识算法。它管理一份复制日志,应用可以接入自己的有限状态机(FSM),使多个节点按相同顺序执行命令,从而保持状态一致。它适合用来构建一致性优先、能容忍网络分区的分布式系统(CP 系统),并具备一定的容错能力。
raft 可以免费使用吗?用的什么许可证?
raft 以 MPL-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
raft 还在维护吗?
活跃维护中。raft 最近一次提交是在 2026年10月18日。
raft 适合用来做什么?
构建复制型键值存储或其他强一致性服务 在小规模服务器集群中保持元数据一致 为 Go 服务增加基于 leader 的高可用能力
raft 怎么安装和运行?
检查是否已安装 Go 1.16+: go version 阅读该库的 Godoc 文档
在哪里获取 raft?
源代码和安装说明在 GitHub 上:https://github.com/hashicorp/raft

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目

面向 Java 函数式编程的轻量容错库,提供熔断、限流、重试、舱壁隔离等装饰器。

后端与 API#java#fault-tolerance#circuit-breaker
1.1万+2 本周1539JavaApache-2.0更新于 8天前