SQLite服务器版:rqlited

介绍

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(选举用)。
  • 写流程:
    1. 写请求 → Leader
    2. Leader 写 Raft 日志 → 同步到多数 Follower
    3. 多数确认 → Leader 本地 SQLite 执行 → 提交 → 返回成功
    4. 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、中小后端、嵌入式系统,以及所有不想运维重数据库但需要强一致的场景。