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

分布式 DBMS rqlite 7.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 的存在允许您以批处理模式更新数据并确定集群的主导节点。 还提供了适用于各种编程语言的命令行界面和客户端库。
  • 提供用于识别其他节点的服务,允许您动态创建集群。
  • 支持节点之间的加密数据交换。
  • 能够配置读取时检查数据的相关性和一致性的级别。
  • 可选择以只读模式连接节点,该模式不参与共识的确定,用于提高集群读取操作的可扩展性。
  • 支持基于在一个请求中组合命令的您自己的事务形式(不支持基于 BEGIN、COMMIT、ROLLBACK、SAVEPOINT 和 RELEASE 的事务)。
  • 支持创建热备份。

在新版本中:

  • 使用新的节点检测服务添加了对自动 rqlite 集群的支持,该服务可以在 Consul 和 etcd 分布式存储的基础上工作。 该服务允许 rqlite 节点自动找到彼此 - 管理员只需在不同服务器上启动多个节点,指定公共 Consul 或 etcd 集群地址(例如,“example.com:8500”),节点就会自动找到组合成一个簇。 领导节点会定期更新其在 Consul 或 etcd 存储中的地址信息,这允许您随后更改领导者,而无需重新配置其他节点,甚至在更改领导者后也可以添加新节点。 在 AWS Lambda 上运行的旧版发现模式服务已停止。
  • CLI 界面允许一次指定多个主机 - 如果第一个节点不可用,将联系下一个主机。
  • 用于解析 rqlited 命令行参数的代码已被重新​​设计。
  • 已弃用的 protobuf 包已停止使用。
  • 用于实现 Raft 协议的 BoltDB 存储已被 bbolt 取代,bbolt 是 etcd 项目的一个分支。

来源: opennet.ru

添加评论