1. 程式人生 > >容器化RDS|計算儲存分離 or 本地儲存?

容器化RDS|計算儲存分離 or 本地儲存?

最常用的是基於 Replication 模型將資料複製到 MySQL Cluster 中所有成員。
MySQL Master-Slave Replication(類似 Oracle DataGuard)提供了基於 binlog 的資料庫層的複製模型,在高併發壓力下節點間同步資料速率最快,單位時間內的交易量受其他節點的影響極小,該架構可通過 vip 漂移的方式實現 “failover”。

MySQL Master-Slave Replication
但嚴格意義上來說,這是基於 binlog 的 Asynchronous Replication 模型,因此叢集中所有成員存在資料不一致的可能,在“failover”時無法保證資料零丟失。
可見如果基於 Replication 模型,Synchronous Replication 是實現資料零丟失的前提。
傳統的 Synchronous Replication 一般會採用兩階段提交或分散式鎖,這會帶來如下幾個問題:
  • 單位時間內事務能力(TPS)會跟叢集成員數量成反比

  • 增加叢集成員會顯著且無法預期的增加事務響應時間

  • 增加了叢集成員資料複製的衝突和死鎖的可能性

針對以上問題 Galera Cluster 提出 Certification-based Replication 來解決傳統 Synchronous Replication 中遇到的問題,實現如下:

Deferred Update Replication 延遲更新複製
這個流程圖中,有幾個細節需要分享:
  • 將基於 binlog 改為基於 write-set,write-set 中包含修改的資料,Global Transaction ID(後面簡稱 GTID)和 Primary Key。

    GTID 類似 45eec521-2f34-11e0-0800-2a36050b826b:94530586304

    94530586304 為 64-bit 有符號整型,用來表示事務在序列中的位置

  • 將傳統的 Synchronous Replication 改為 Deferred Update Replication,並將整個過程大致分解成四個階段,本地階段、傳送階段、驗證階段和應用階段,其中:

    本地階段:樂觀執行,在事務 Commit 前,假設該 Transcation 在叢集中複製時不會產生衝突。

    傳送階段:優化同步時間視窗,除去全域性排序並獲取 GTID 為同步操作,衝突驗證和事務應用都為非同步,極大的優化了複製效率。

    驗證階段:只有收到該事務的所有前置事務後(不能有 “hole”),該事務和所有未執行的前置事務才能併發驗證,不然不能保證 Global Ordering,因此這裡需要犧牲效率,引入一定的序列化。

    需要等待事務 3

於是就有了 Galera Cluster 在 MySQL 分支中的實現 MariaDB Galera Cluster(簡稱 MGC)和 Percona Xtradb Cluster(簡稱 PXC)。

為避免“split-brain”問題,需要至少三節點組成叢集,對計算資源和儲存資源的容量要求至少增加2倍,會進一步降低資源的部署密度。
越來越多的使用者也期望通過該方案實現跨 IDC 多活,那麼需要在規劃階段想清楚:
IDC 和資料庫節點的拓撲架構,以保證在 1 個 IDC 出問題的情況,叢集可以持續提供服務。
首先 IDC(物理或邏輯)最少需要3個,再看看資料庫節點數量分別為 3、4、5、6、7 的拓撲關係 :
  • 3 資料庫節點:

  • 4 資料庫節點:設定權重避免”split-brain” (⅙ + ⅙ ) + ⅓ + ⅓

  • 5 資料庫節點:

  • 6 資料庫節點:


  • 7 資料庫節點 : 可支援兩種拓撲關係


同時,還有 MySQL Group Replication(簡稱 MGR)[1],類似 Galera Cluster:
  • 基於Corosync實現(Totem協議),外掛式安裝,MySQL 官方原生外掛。

  • 叢集架構,支援多寫(建議單寫)

  • 允許少數節點故障,同步延遲較小,保證強一致,資料零丟失

  • 單位時間的交易量受 flow control 影響。

這裡還需要提一下 Vitess
  • 該專案由 Youtube 開源,從文件看功能極為強大,高度產品化。

  • 作為第二個儲存類專案(第一個是 Rook,有意思是儲存類而不是資料庫類)加入 CNCF,目前還處於孵化階段(incubation-level)。

  • 筆者沒有使用經驗,也不知道國內有哪些使用者,不做評論。

關於 MGR 和 Vitess 網上已有大量介紹,這裡不再贅述。