🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > [rqlited](https://github.com/rqlite/rqlite) ## 概述 rqlite是一个易于使用的轻量级分布式关系数据库,它使用SQLite作为其存储引擎。rqlite 部署简单,操作非常简单,其集群能力为您提供容错和高可用性。 **特性** * 非常容易部署,无需单独安装 SQLite。 * 完全复制的生产级 SQL 数据库,具有对 SQLite[全文搜索](https://www.sqlite.org/fts3.html)和[JSON 文档支持](https://www.sqlite.org/json1.html)的完全访问权限。 * [生产级](https://github.com/hashicorp/raft)分布式共识系统。 * 一个易于使用的[HTTP(S) API](https://github.com/rqlite/rqlite/blob/master/DOC/DATA_API.md)。[还可以使用命令行界面](https://github.com/rqlite/rqlite/tree/master/cmd/rqlite),以及各种[客户端库](https://github.com/rqlite)。 * 节点发现和自动集群的多种选项[,包括与 Kubernetes、Consul、etcd 和 DNS 的集成](https://github.com/rqlite/rqlite/blob/master/DOC/AUTO_CLUSTERING.md),允许动态创建集群。 * [广泛的安全和加密支持](https://github.com/rqlite/rqlite/blob/master/DOC/SECURITY.md),包括节点到节点的加密。 * [读取一致性级别](https://github.com/rqlite/rqlite/blob/master/DOC/CONSISTENCY.md)的选择,并支持选择[写入性能而不是持久性](https://github.com/rqlite/rqlite/blob/master/DOC/QUEUED_WRITES.md)。 * 可选[的只读(非投票)节点](https://github.com/rqlite/rqlite/blob/master/DOC/READ_ONLY_NODES.md),可以为系统增加读取可扩展性。 * 一种交易支持形式。 * 热[备份](https://github.com/rqlite/rqlite/blob/master/DOC/BACKUPS.md),以及[直接从 SQLite 加载](https://github.com/rqlite/rqlite/blob/master/DOC/RESTORE_FROM_SQLITE.md)。 ## 内存数据库 默认情况下,rqlite 使用[内存中的 SQLite 数据库](https://www.sqlite.org/inmemorydb.html)来最大化性能。在这种模式下,不会创建实际的 SQLite 文件,整个数据库都存储在内存中。如果您希望 rqlite 使用实际的基于文件的 SQLite 数据库,`-on-disk`请在启动时传递给 rqlite。 ### 使用内存数据库是否会使我的数据面临风险? 不会 由于 Raft 日志是所有数据的权威存储,并且它由每个节点存储在磁盘上,因此可以在启动时根据存储在 Raft 日志中的信息完全重新创建内存数据库。使用内存数据库不会使您的数据面临风险。 ## 限制 * 内存数据库目前的大小限制为 2GiB(2147483648 字节)。[您可以在文档](https://github.com/rqlite/rqlite/blob/master/DOC/PERFORMANCE.md#in-memory-database-limits)中了解有关绕过此限制的可能方法的更多信息。 * 只有[**确定性**](https://www.sqlite.org/deterministic.html)的 SQL 语句才能安全地与 rqlite 一起使用,因为语句在发送到每个节点之前会提交到 Raft 日志。换句话说,rqlite 执行*基于语句的复制*。例如,以下语句可能会在每个节点下生成不同的 SQLite 数据库: ``` INSERT INTO foo (n) VALUES(random()); ``` ## 热备与还原 备份 ``` curl -s -XGET localhost:4001/db/backup -o bak.sqlite3 ``` 生成一个 sqlite 文件 还原 ``` curl -v -XPOST localhost:4001/db/load -H "Content-type: application/octet-stream" --data-binary @restore.sqlite ``` ## 开启一个集群 开启一个集群 ``` rqlited -node-id 1 node.1 ``` 开启子节点 ``` rqlited -node-id 2 -http-addr localhost:4003 -raft-addr localhost:4004 -join http://localhost:4001 node.2 rqlited -node-id 3 -http-addr localhost:4005 -raft-addr localhost:4006 -join http://localhost:4001 node.3 ```