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

發布了分散式 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

添加評論