SQLite服务器版:rqlited 作者:马育民 • 2026-06-01 07:52 • 阅读:10007 # 介绍 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) ```bash 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 节点 ```bash # 节点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 操作 ```bash # 创建表 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 操作 ```bash ./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、中小后端、嵌入式系统,以及所有**不想运维重数据库但需要强一致**的场景。 原文出处:http://malaoshi.top/show_1GW3PpYcBY5C.html