發布基於 SQLite 的分佈式容錯 DBMS rqlite 7.0

分散式 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

添加評論