關於 Cassandra 複製係數和一致性等級

關於 Cassandra 複製係數

Cassandra 會將資料備用資源儲存在多個節點上,以確保可靠性和容錯能力。每個 Edge Keyspace 的複製策略會決定放置備用資源的節點。

在單一 Cassandra 叢集中,索引鍵空間的備用資源總數稱為索引鍵空間的「複製係數」。如果複製係數為一個,表示 Cassandra 叢集中每個資料列只有一個副本。如果複製因數為兩個,表示每個資料列都有兩個副本,每個副本位於不同的節點。所有備用資源都同等重要,沒有主要或主要執行個體備用資源。

在實際工作環境系統中,每個資料中心各有三個以上的 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 索引鍵空間的預設複製係數是三個。

即便在叢集中新增了額外的 Cassandra 節點,預設的複製因數不會受到影響。

舉例來說,如果您將 Cassandra 節點數量增加為六個,但複製係數仍保留三個,就無法確保所有 Cassandra 節點都有所有資料的副本。如果某個節點故障,複寫因數越高代表節點上資料存在於其餘節點的機率越高。提高複製因數的缺點是資料寫入的延遲時間增加。

關於 Cassandra 一致性等級

「Cassandra 一致性等級」是指 Cassandra 節點數量的下限,也就是必須先確認讀取或寫入作業,才能判定作業成功。可將不同的一致性等級指派給不同的 Edge 鍵空間。

連線至 Cassandra 進行讀取和寫入作業時,訊息處理器和管理伺服器節點通常會使用 LOCAL_QUORUM 的 Cassandra 值,指定索引鍵空間的一致性等級。不過,某些鍵空間已定義為使用 1 一致性等級。

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

LOCAL_QUORUM = (replication_factor/2) + 1

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

如果 LOCAL_QUORUM = 2,資料中心的三個 Cassandra 節點中至少有兩個節點必須回應讀取/寫入作業,作業才能順利完成。就三個節點 Cassandra 叢集而言,每個資料中心只能容許一個節點當機。

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

如何查看邊緣訊息處理器或管理伺服器節點使用的一致性等級:

  1. 登入訊息處理器節點。
  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 節點時,一致性等級不會受到影響。