關於 Cassandra 複製係數
Cassandra 會將資料副本儲存在多個節點上,確保可靠性和容錯能力。每個 Edge 鍵空間的複製策略會決定副本的放置節點。
Cassandra 叢集中鍵空間的副本總數,稱為鍵空間的「複製係數」。如果複製係數為一,代表 Cassandra 叢集中的每個資料列都只有一個副本。如果複製係數為 2,代表每個資料列都有兩個副本,且每個副本都位於不同的節點。所有副本都同等重要,沒有主要或主副本。
在每個資料中心有三個以上 Cassandra 節點的正式環境系統中,Edge 鍵空間的預設複製係數為三。一般來說,複製係數不應超過叢集中的 Cassandra 節點數量。
請按照下列程序查看 Cassandra 結構定義,其中會顯示每個 Edge 鍵空間的複製係數:
- 登入 Cassandra 節點。
- 執行下列指令:
/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),kms 鍵空間的預設複製係數為 3,適用於具有三個 Cassandra 節點的安裝。
如果您在叢集中新增其他 Cassandra 節點,預設複製係數不會受到影響。
舉例來說,如果您將 Cassandra 節點數量增加到六個,但將複製係數保留為三,則無法確保所有 Cassandra 節點都有所有資料的副本。如果節點故障,複製係數越高,代表節點上的資料越有可能存在於其餘節點之一。複製係數較高的缺點是資料寫入延遲時間會增加。
關於 Cassandra 一致性等級
Cassandra 一致性等級的定義是,必須確認讀取或寫入作業的 Cassandra 節點數量下限,才能將作業視為成功。您可以為不同的 Edge 鍵空間指派不同的一致性等級。
連線至 Cassandra 進行讀取和寫入作業時,訊息處理器和管理伺服器節點通常會使用 Cassandra 的 LOCAL_QUORUM 值,指定鍵空間的一致性層級。不過,有些鍵空間定義為使用一致性層級 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 值做為一致性層級,則必須在所有資料中心驗證讀取/寫入作業。
如要查看 Edge 訊息處理器或管理伺服器節點使用的一致性層級,請按照下列步驟操作:
- 登入訊息處理器節點。
- 切換至 /opt/apigee/edge-message-processor/conf 目錄:
cd /opt/apigee/edge-message-processor/conf
- 寫入一致性:
grep -ri "write.consistencylevel" *
- 讀取一致性:
grep -ri "read.consistencylevel" *
- 登入管理伺服器節點。
- 切換至 /opt/apigee/edge-management-server/conf 目錄:
cd /opt/apigee/edge-management-server/conf
- 重複第 3 與第 4 個步驟。
如果您在叢集中新增 Cassandra 節點,一致性等級不會受到影響。