Cassandra 複製因素和一致性等級簡介

Private Cloud 適用的 Edge 4.17.09 版

關於 Cassandra 複寫因數

Cassandra 會在多個節點上儲存資料副本,確保可靠性和容錯性。每個 Edge 鍵值空間的複寫策略會決定備援資源的放置位置。

在 Cassandra 叢集中,一個鍵空間的備份總數稱為該鍵空間的備份因數。使用單一複製因子表示 Cassandra 叢集中每個資料列只有一個副本。複製因子為 2 表示每個資料列都有兩個副本,且每個副本都在不同的節點上。所有備用資源都同樣重要,沒有主要或主備用資源。

在實際工作環境系統中,每個資料中心有三個以上的 Cassandra 節點,Edge Keyspace 的預設複製因子為三。一般來說,複製因數不得超過叢集中的 Cassandra 節點數。

請按照下列程序查看 Cassandra 結構定義,其中會顯示每個 Edge 鍵值空間的複寫因子:

  1. 登入 Cassandra 節點。
  2. 執行下列指令:
    > /opt/apigee/apigee-cassandra/bin/cassandra-cli -h $(hostname -i) <<< "show schema;"

    其中 $(hostname -i) 會解析為 Cassandra 節點的 IP 位址。或者,您也可以將 $(hostname -i) 替換成節點的 IP 位址。

針對每個索引鍵空間,您會看見下列格式的輸出內容:

create keyspace kms
  with placement_strategy = 'NetworkTopologyStrategy'
  and strategy_options = {dc-1 : 3}
  and durable_writes = true;

您可以看到,對於資料中心 1 (dc-1),如果安裝有三個 Cassandra 節點,則 kms 金鑰空間的預設複製因數為 3。

如果您在叢集中新增其他 Cassandra 節點,預設複製因子不會受到影響。

舉例來說,如果您將 Cassandra 節點數量增加為六個,但將複製因數維持為三個,就無法確保所有 Cassandra 節點都有所有資料的副本。如果節點發生故障,複製因子越高,節點上的資料在其餘節點中出現的機率就越高。複製因子越高,資料寫入的延遲時間就會越長。

關於 Cassandra 一致性層級

Cassandra 一致性層級的定義是,在作業可視為成功之前,必須有多少個 Cassandra 節點確認讀取或寫入作業。不同的 Edge 鍵值空間可以指派不同的一致性層級。

當您連線至 Cassandra 執行讀取和寫入作業時,訊息處理器和管理伺服器節點通常會使用 Cassandra 值 LOCAL_QUORUM 指定鍵空間的一致性層級。不過,部分鍵值空間會定義為使用一級一致性。

資料中心的 LOCAL_QUORUM 值計算方式如下:

LOCAL_QUORUM = (replication_factor/2) + 1 

如上所述,Edge 實際工作環境的預設複寫因數為三,也就是有三個 Cassandra 節點。因此,LOCAL_QUORUM 的預設值 = (3/2) + 1 = 2 (值會無條件捨去為整數)。

如果 LOCAL_QUORUM = 2,資料中心中的三個 Cassandra 節點中,至少有兩個必須回應讀取/寫入作業,才能成功執行作業。因此,如果是三節點 Cassandra 叢集,叢集可容許每個資料中心有一個節點異常。

只要將一致性層級指定為 LOCAL_QUORUM,Edge 就能避免在多個資料中心驗證作業時產生的延遲。如果鍵值空間使用 Cassandra QUORUM 值做為一致性層級,則必須在所有資料中心驗證讀取/寫入作業。

如要查看邊緣訊息處理器或管理伺服器節點使用的一致性等級,請按照下列步驟操作:

  1. 登入 Message Processor 節點。
  2. 變更至 /opt/apigee/edge-message-processor/conf 目錄:
    > cd /opt/apigee/edge-message-processor/conf
  3. 針對寫入一致性:
    > grep -ri "write.consistencylevel" *
  4. 讀取一致性:
    > grep -ri "read.consistencylevel" *
  5. 登入 Management Server 節點。
  6. 變更為 /opt/apigee/edge-management-server/conf 目錄:
    > cd /opt/apigee/edge-management-server/conf
  7. 重複第 3 與第 4 個步驟。

如果您在叢集中新增其他 Cassandra 節點,一致性層級不會受到影響。