全部產品
Search
文件中心

Lindorm:多可用性區域(高可用版)部署

更新時間:May 10, 2025

Lindorm支援建立多可用性區域的執行個體。該方案將一個Lindorm執行個體部署在多個可用性區域,多可用性區域執行個體具備更高的容災能力,同時Lindorm執行個體可以實現多個可用性區域之間資料的強一致,也可以在資料最終一致下發出請求返回最快的結果,從而提高線上業務的服務品質。

與傳統架構對比

傳統的主備容災架構

傳統的主備容災為了實現高可用性,通常的原理是分別在兩個不同的可用性區域(可用性區域A和可用性區域B)中購買一個Lindorm執行個體(主執行個體1和備執行個體2),使用資料通道服務(簡稱LTS)實現Lindorm執行個體間的雙向同步。當主執行個體1發生故障或者可用性區域A不可用時,使用者將訪問的串連切換至備執行個體2或者可用性區域B,從而實現高可用,主備容災的高可用架構圖如下所示。

主備容災的方案雖然能夠滿足大部分使用者的高可用需求,但是這種主備容災方案並不適用所有的業務,存在以下不足之處

  • 主備執行個體的資料同步存在延遲,無法滿足強一致需求

    主備執行個體的資料同步鏈路為非同步鏈路,也就是當業務資料寫入主執行個體1後,資料在備執行個體2不是立即可見的,存在一定的延遲。當發生主備切換操作時,業務並不能立刻讀到最新的資料,這是一些業務無法接受的。如果業務使用了Increment、CheckAndPut等先讀後寫的原子語義介面,並且沒有讀到最新資料,那麼就會導致資料錯亂或者回退。如果可用性區域A的網路存在故障,由於同步延遲問題,在可用性區域A網路恢複之前的時間段內可用性區域B的資料會一直處於缺失的狀態。

  • 備執行個體資源利用率不高

    在主備容災下,大部分時間備執行個體的資源不會被使用,只有在主備切換操作的時候才會被訪問。

  • 主備切換需要資料庫管理員實施。

    目前主備容災完全由業務自行完成,業務的DBA需要時刻注意主執行個體的運行情況。在主執行個體發生故障時,DBA決定是否需要切換為備執行個體。並且切換的邏輯和方案都需要使用者自行去定製,對業務不透明

總的來說,傳統的主備容災存在以上問題,但云原生多模資料庫Lindorm多可用性區域部署可以完全解決這些不足之處。

Lindorm多可用性區域(高可用版)架構

Lindorm支援多可用性區域部署,Lindorm執行個體寬表的Partition會在每個可用性區域中存在一個獨立的副本,同時日誌WAL會儲存至底層的可用性區域C雲原生分布式儲存Lindorm DFS中。如果可用性區域A完全不可用,可用性區域B通過可用性區域C的資料完成資料的恢複。副本間的資料同步由Lindorm內建的Replica Consensus協議完成,Replica Consensus協議只需要儲存至少兩個副本的資料就可以完成資料同步。在多可用性區域部署模式下,Lindorm支援設定表的一致性層級來實現不同的業務需求,包括強一致和最終一致。

  • 強一致:如果將表設定為強一致,那麼只有表的主Partition可以讀寫,備Partition只能通過Replica Consensus協議接收資料。當主可用性區域的地區所有機器都終止工作或者可用性區域不可用時,Lindorm會自動觸發選擇主可用性區域操作,備可用性區域需要一定的時間恢複才能切換為主可用性區域。強一致模式下,使用者可以讀取最新寫入的資料。

  • 最終一致:如果將表設定為最終一致(也稱為弱一致),那麼表的主備Partition都可以讀寫,Replica Consensus協議是將可用性區域A寫入的資料同步至可用性區域B中,由於資料同步是非同步,所以兩個副本之間的資料會存在不一致(通常在100ms量級)。最終一致模式下,由於表的主備Partition都可以讀寫,當可用性區域A不可用、表讀寫出現毛刺和機器終止工作等故障時,超過一定的時間不會返回訪問結果,無需等待和系統切換主可用性區域的過程,Lindorm會自動選擇可用性區域B發送請求,達到高可用和降低讀寫毛刺的效果。

功能特性

雖然Lindorm是分布式架構,本身具有高可用性,但是一些對可用性要求高的業務,會有更高的要求。業務不但需要Lindorm能應對部分機器故障的問題,還必須能夠應對網路不可用以及城市災難等極端問題。為了保障資料庫在各種意外情況下都能持續提供服務,Lindorm多可用性區域部署支援以下功能特性:

  • 具備機房級或者城市級容災能力。

  • 滿足Lindorm執行個體的資料強一致或者最終一致需求。

  • 故障識別和切換操作都是由Lindorm自動觸發,易用性高。

Lindorm多可用性區域(高可用版)方案與傳統主備容災方案、基於Paxos/Raft一致性協議的高可用方案的功能特性對比,如下表所示:

功能特性

多可用性區域(高可用版)

主備容災

基於Paxos/Raft一致性協議

強一致

最終一致

資料丟失(RPO)

0

<100ms

<1s

0

服務恢複(RTO)

1分鐘

10~30s

由主備切換的時間決定。

30s~3分鐘

訪問RT

主可用性區域訪問,可能存在跨多可用性區域讀寫。

就近訪問,支援多地區讀寫可降低毛刺

主可用性區域訪問,可能存在跨多可用性區域讀寫。

主可用性區域訪問,可能存在跨多可用性區域讀寫。

易用性

對業務透明。

對業務透明。

業務需改造,外置同步鏈路,使用者自行切換。

對業務透明。

最小需要儲存日誌和資料的可用性區域數目

  • 儲存日誌:3個

  • 儲存資料:2個

  • 儲存日誌:2個

  • 儲存資料:2個

  • 儲存日誌:2個

  • 儲存資料:2個

  • 儲存日誌:3個

  • 儲存資料:3個

可以看出相較於傳統主備容災方案、基於Paxos/Raft一致性協議的方案而言,Lindorm多可用性區域架構資料訪問更靈活服務恢複耗時更短且易用性更高

說明

無論是強一致還是弱一致,在Lindorm多可用性區域(高可用版)部署下,Lindorm執行個體寬表的故障識別,切換都由Lindorm執行個體自行決定,整個過程對使用者透明,並且使用者一直訪問一個Lindorm執行個體,無需再開發中介軟體來串連多個執行個體和執行個體間的切換。

  • 如果業務沒有強一致的需求,建議選擇Lindorm多可用性區域執行個體,並設定表為最終一致。

  • 如果業務有強一致的需求,建議選擇Lindorm多可用性區域執行個體,並設定表為強一致。

使用限制

  • 開源用戶端(例如開源HBase用戶端)不支援部署Lindorm多可用性區域(高可用版)執行個體。

  • 多可用性區域部署僅適用於寬表引擎,因此不支援同時依賴其他引擎能力的功能,即搜尋索引和列存索引。寬表引擎自身支援的其他功能如二級索引、動態列、萬用字元列可正常使用。

  • 多可用性區域執行個體不支援冷儲存、冷熱分離功能。

購買多可用性區域(高可用版)執行個體

您可以通過控制台購買Lindorm多可用性區域(高可用版)執行個體,具體操作請參見建立執行個體

使用多可用性區域(高可用版)執行個體

一致性選擇

一般情況下,Lindorm執行個體建立的表都會預設設定為最終一致,最終一致可以滿足大部分使用者的需求,達到高可用和降低毛刺的效果。因此推薦使用最終一致性模型。事實上,絕大部分的業務都能接受讀取100 ms前的資料,而且Lindorm的用戶端支援就近讀寫,如果使用者的讀寫用戶端在同一可用性區域,大部分情況下用戶端讀到的都是最新資料(沒有因為毛刺或者機器終止工作導致當前可用性區域的partition不可用或者逾時等情況)。如果您的業務有以下需求,需要將表設定為強一致。

  • 必須要讀到最新資料。

  • 使用Increment、CheckAndPut等先讀後寫的原子語義介面。

  • 需要為表建立二級索引。

說明

強一致模式下,Lindorm無法通過讀取多副本的方式來減少抖動和毛刺,如果主可用性區域出現故障,備可用性區域需要一定的時間恢複才能切換為主可用性區域。

建表並設定表的一致性

說明

由於HBase API和HBase Shell不支援一致性概念,如果您使用HBase API訪問Lindorm寬表引擎,請使用HBase API和HBase Shell建立表(建立的表預設設定為最終一致性)後,再使用以下步驟對錶屬性進行修改。

  1. 通過Lindorm-cli串連並使用寬表引擎,使用SQL訪問Lindorm寬表引擎。

  2. 設定表一致性。

    • 建立表格時,通過以下語句設定表為強一致。

      CREATE TABLE dt (
          p1 INT,
          p2 INT,
          c1 VARCHAR,
          c2 BIGINT,
          PRIMARY KEY(p1)
      ) WITH (CONSISTENCY='strong');

      建立表格時,通過以下語句設定表為最終一致。

      CREATE TABLE dt2 (
          p1 INT,
          p2 INT,
          c1 VARCHAR,
          c2 BIGINT,
          PRIMARY KEY(p1)
      ) WITH (CONSISTENCY='eventual');
    • 建立表格後,通過以下語句修改表屬性為最終一致。

      ALTER TABLE dt SET CONSISTENCY='enventual';

      建立表格後,通過以下語句修改表屬性為強一致。

      ALTER TABLE dt2 SET CONSISTENCY='strong';

資料寫入

Lindorm多可用性區域(高可用版)與單可用性區域版本的使用方式完全一樣。串連Lindorm寬表引擎並寫入資料,具體操作請參見通過Lindorm-cli串連並使用寬表引擎

資料匯入

  • 使用API方式將資料匯入Lindorm多可用性區域(高可用版)執行個體與單可用性區域方法相同,使用控制台上提供的串連地址即可。

  • 使用bulkload方式匯入Lindorm多可用性區域(高可用版)執行個體,需要在兩個可用性區域都匯入一份資料,相關使用諮詢方法請參見支援人員