介绍
rqlited(简称 rqlite)是用 Go 开发、基于 SQLite + Raft 的轻量级分布式关系型数据库,一键部署、强一致、高可用,适合边缘/中小规模核心数据场景。
官网
https://github.com/rqlite/rqlite
定位
- 本质:给单机 SQLite 加上 分布式一致性与自动复制,开箱即用。
- 目标:以最低运维复杂度获得“强一致+高可用+SQL 兼容”,不追求写吞吐,优先数据安全。
- 适用:IoT/边缘、中小后端、嵌入式系统、需要强一致但不想运维重数据库的场景。
架构与原理
1)整体架构(单节点)
- HTTP API:入口,支持 SQL 读写、集群管理,JSON 交互。
- Raft 层:一致性核心,选主、日志复制、故障转移。
- SQLite 引擎:本地存储,WAL 模式,全量 SQL 能力。
- 存储文件:
data.db(SQLite)、raft/(Raft 日志)。
2)集群与一致性(Raft)
- 角色:1 个 Leader(处理写)、多个 Follower(同步+读)、Candidate(选举用)。
- 写流程:
- 写请求 → Leader
- Leader 写 Raft 日志 → 同步到多数 Follower
- 多数确认 → Leader 本地 SQLite 执行 → 提交 → 返回成功
- Follower 按日志顺序重放,保持与 Leader 完全一致。
- 读模式:
- 强一致:Leader 读(最新数据)
- 弱一致:Follower 读(低延迟,可能稍旧)
- 线性一致:可配置,满足分布式系统强一致语义。
- 高可用:集群≥3 节点,只要多数存活(≥2),服务不中断;Leader 宕机自动选新主。
3)SQLite 增强
- WAL 模式:提升并发读,写不阻塞读。
- 同步策略:默认
SYNCHRONOUS=OFF提性能,定期切FULL落盘防损坏。 - 全量 SQL:支持索引、事务、JOIN、子查询、全文搜索、JSON 字段。
- 扩展:可加载 SQLite 扩展(如向量搜索、加密、数学函数)。
特性
1)极简部署与运维
- 单二进制:无依赖,跨平台(Linux/macOS/Windows),解压即跑。
- 集群秒建:
rqlited data启动节点,用发现服务(DNS/K8s/Consul/etcd)自动组网。 - 零 DBA:自动备份、日志压缩、故障转移、节点扩容/缩容。
2)SQL 与事务能力
- 标准 SQL:兼容 SQLite 语法,支持
SELECT/INSERT/UPDATE/DELETE、事务、约束。 - 原子批量写:单请求多条 SQL 全成功或全回滚。
- 事务支持:
BEGIN/COMMIT/ROLLBACK,跨语句原子性。
3)安全与可靠
- TLS 加密:HTTP 转 HTTPS,节点间加密通信。
- 认证:Basic Auth、JWT,接口级权限控制。
- 备份恢复:热备份、压缩、自动上传 S3/MinIO;支持从 SQLite 文件恢复。
- 监控:节点状态、Raft 日志、SQLite 指标、延迟/错误统计。
4)弹性与扩展
- 只读节点:添加 Follower 分担读压力,水平扩展读性能。
- 动态集群:在线增删节点,不中断服务。
- 容器友好:官方 Docker 镜像,K8s 一键部署。
快速上手(3 节点集群)
1)安装(Linux)
curl -L https://github.com/rqlite/rqlite/releases/download/v8.20.0/rqlite-v8.20.0-linux-amd64.tar.gz -o rqlite.tar.gz
tar xzf rqlite.tar.gz
cd rqlite-v8.20.0-linux-amd64
2)启动 3 节点
# 节点1(Leader候选)
./rqlited -node-id 1 -http-addr localhost:4001 -raft-addr localhost:4002 ./node1
# 节点2
./rqlited -node-id 2 -http-addr localhost:4003 -raft-addr localhost:4004 -join localhost:4002 ./node2
# 节点3
./rqlited -node-id 3 -http-addr localhost:4005 -raft-addr localhost:4006 -join localhost:4002 ./node3
3)HTTP API 操作
# 创建表
curl -X POST localhost:4001/db -d 'CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)'
# 插入数据
curl -X POST localhost:4001/db -d 'INSERT INTO users (name) VALUES ("alice")'
# 查询
curl -X GET "localhost:4001/db?q=SELECT * FROM users"
4)CLI 操作
./rqlite -h localhost:4001
rqlite> SELECT * FROM users;
优势与局限
优势
- 极简:单二进制、无依赖、运维成本极低。
- 强一致:Raft 保证线性一致,数据不丢不裂。
- SQL 兼容:全量 SQL+事务+扩展,学习成本低。
- 高可用:自动选主、故障转移、数据多副本。
局限
- 写性能:Raft 同步多数节点,写吞吐低于单机 SQLite,不适合高并发写场景。
- 存储规模:基于 SQLite,单库建议≤100GB,超大库需分库或换方案。
- 无水平写扩展:所有写走 Leader,Follower 不分担写压力。
对比同类方案
- vs SQLite:单机→分布式,自动复制,高可用,故障自愈。
- vs PostgreSQL/MySQL:轻量百倍,部署运维极简,资源占用低,适合边缘/中小场景。
- vs etcd/consul:支持完整 SQL(非 KV),事务、JOIN、索引更适合关系数据。
- vs LiteFS/Litestream:rqlite 是完整集群(自动选主/故障转移);LiteFS 是文件系统级复制,需外部选主。
总结
rqlited 是“SQLite 易用性 + Raft 强一致”的完美结合,用极低成本获得企业级高可用关系数据库能力。适合边缘计算、IoT、中小后端、嵌入式系统,以及所有不想运维重数据库但需要强一致的场景。