rqlite 6.0 发布,基于 SQLite 的分布式容错 DBMS

发布了分布式 DBMS rqlite 6.0,它使用 SQLite 作为存储引擎,并允许您组织同步存储集群的工作。 rqlite 的特点之一是易于安装、部署和维护分布式容错存储,有点类似于 etcd 和 Consul,但使用关系数据模型而不是键/值格式。 该项目代码是用 Go 编写的,并根据 MIT 许可证分发。

为了使所有节点保持同步状态,使用了 Raft 共识算法。 Rqlite 使用原始的 SQLite 库和标准的 go-sqlite3 驱动程序,在其之上启动一个层来处理客户端请求、执行到其他节点的复制并监控在主导节点的选择上达成共识的情况。

对数据库的更改只能由被选为领导者的节点进行,但是具有写操作的连接也可以发送到集群中的其他节点,这将返回领导者的地址以重复请求(在下一个版本中他们承诺添加自动转发请求给leader)。 主要强调的是容错性,因此 DBMS 仅通过读取操作进行扩展,而写入操作是瓶颈。 可以从单个节点运行 rqlite 集群,并且该解决方案可用于通过 HTTP 提供对 SQLite 的访问,而无需提供容错功能。

每个节点上的SQLite数据不是存储在文件中,而是存储在内存中。 在 Raft 协议实现的层级别,会保留导致数据库发生更改的所有 SQLite 命令的日志。 此日志在复制(在其他节点上重现请求的级别进行复制)、启动新节点或从连接丢失中恢复期间使用。 为了减少日志的大小,使用自动打包,它在指定数量的更改后启动,并导致在磁盘上固定快照,与此相关的新日志开始保留(内存中数据库的状态)与快照+累积的变更日志相同)。

rqlite的特点:

  • 轻松部署集群,无需单独安装 SQLite。
  • 能够快速获取复制的 SQL 存储。
  • 准备用于工作项目(生产级)。
  • HTTP(S) API 的存在允许您以批处理模式更新数据并确定集群的主导节点。 它还提供命令行界面以及使用为 SQLite 构建的各种客户端库的能力。
  • 提供用于识别其他节点的服务,允许您动态创建集群。
  • 支持节点之间的加密数据交换。
  • 能够配置读取时检查数据的相关性和一致性的级别。
  • 可选择以只读模式连接节点,该模式不参与共识的确定,用于提高集群读取操作的可扩展性。
  • 支持基于在一个请求中组合命令的您自己的事务形式(不支持基于 BEGIN、COMMIT、ROLLBACK、SAVEPOINT 和 RELEASE 的事务)。
  • 支持创建热备份。

新版本引入了重大的架构更改,旨在通过改进将读写请求路由到正确集群节点的过程来提高集群可靠性。 rqlite 节点现在可以使用 Raft 协议在节点之间建立的 TCP 连接在它们之间复用多个逻辑连接。 如果请求需要Leader权限,但发送到Secondary节点,Secondary节点可以确定Leader的地址并将其传递给客户端,而无需进行Raft共识计算。

这一更改还消除了对单独元数据同步组件的需求,并消除了对 Raft 状态和元数据的单独处理。 现在,辅助节点仅在必要时、需要找出领导节点的地址时才向领导节点发送请求。 该 API 提供了获取有关集群中其他节点状态的信息的能力。 “.sysdump”命令已添加到命令行界面。

来源: opennet.ru

添加评论