基于 SQLite 构建的轻量级、容错分布式关系型数据库,通过 Raft 共识实现多节点复制。
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
检查是否已安装 Go 1.16+
go version - 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 数据每日更新。
相关项目
1.8万+31 本周824GoMIT维护活跃更新于 昨天
Apache ZooKeeper 是一个分布式协调服务,提供层级化键值存储,用于分布式系统中的配置管理、命名与同步。
1.3万+5 本周7325JavaApache-2.0更新于 20小时前
面向分布式系统关键数据的可靠分布式键值存储,基于 Raft 共识算法与 gRPC 接口。
5.3万+112 本周1.1万GoApache-2.0维护活跃更新于 23小时前
面向 Java 函数式编程的轻量容错库,提供熔断、限流、重试、舱壁隔离等装饰器。
1.1万+2 本周1539JavaApache-2.0更新于 8天前
Python 版断路器模式实现,在依赖服务故障时阻断调用,保护系统其余部分。
700+1 本周96PythonBSD-3-Clause更新于 上个月
一个用 Go 编写的企业级许可链分布式账本框架,用于构建区块链解决方案与应用。
1.7万+9 本周9100GoApache-2.0维护活跃更新于 前天