Edge for Private Cloud v. 4.17.09
Cassandra のレプリケーション係数について
Cassandra は、複数のノードにデータレプリカを格納して、信頼性とフォールト トレランスを確保します。レプリカが配置されるノードは、Edge キースペースごとのレプリケーション戦略によって決まります。
あるキースペースの、Cassandra クラスタ全体でのレプリカの合計数のことを、そのキースペースの「レプリケーション係数」と呼びます。レプリケーション係数が 1 の場合は、Cassandra クラスタに各行のコピーが 1 つだけ存在することを意味します。レプリケーション係数が 2 の場合は、各行のコピーが 2 つあり、各コピーが異なるノードに存在することを意味します。すべてのレプリカは同等の重要性を持ちます。プライマリ レプリカやマスター レプリカは存在しません。
データセンターごとに 3 つ以上の Cassandra ノードがある本番環境システムでは、Edge キースペースのデフォルトのレプリケーション係数は 3 です。原則として、レプリケーション係数はクラスタ内の Cassandra ノードの数を超えないようにしてください。
次の手順に沿って、各 Edge キースペースのレプリケーション係数を示す Cassandra スキーマを表示します。
- 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(3 つの Cassandra ノードを持つインストール構成に対応する数)であることがわかります。
Cassandra ノードをクラスタに追加しても、デフォルトのレプリケーション係数は影響を受けません。
たとえば、Cassandra ノードの数を 6 に増やしたとしても、レプリケーション係数が 3 のままであれば、すべての Cassandra ノードにすべてのデータのコピーが存在するとは限りません。レプリケーション係数を大きくすれば、ノードがダウンした場合に、そのノードのデータが残りのノードのいずれかに存在する確率は高くなります。ただし、レプリケーション係数を大きくすると、データの書き込みによりレイテンシが増加するというデメリットがあります。
Cassandra の整合性レベルについて
Cassandra の整合性レベルは、「読み取りまたは書き込みオペレーションが成功とみなされるために、そのオペレーションに対して肯定応答を返さなければならない最小の Cassandra ノードの数」と定義されています。Edge キースペースごとに異なる整合性レベルを割り当てることができます。
読み取り / 書き込みオペレーションのために Cassandra に接続する場合、Message Processor ノードと Management Server ノードは通常、Cassandra の LOCAL_QUORUM 値を使用して、キースペースの整合性レベルを指定します。ただし、一部のキースペースは整合性レベル 1 を使用するように定義されています。
データセンターの LOCAL_QUORUM 値の計算式は次のとおりです。
LOCAL_QUORUM = (replication_factor/2) + 1
前述のとおり、3 つの Cassandra ノードを持つ Edge 本番環境のデフォルトのレプリケーション係数は 3 です。したがって、LOCAL_QUORUM のデフォルト値は (3/2) +1 = 2 になります(小数点以下は切り捨てられます)。
LOCAL_QUORUM = 2 の場合、オペレーションが成功するためには、データセンター内の 3 つの Cassandra ノードのうち少なくとも 2 つが読み取り/書き込みオペレーションに応答する必要があります。したがって、3 つのノードを持つ Cassandra クラスタでは、データセンターごとに 1 つのノードがダウンすることを許容できます。
整合性レベルを LOCAL_QUORUM として指定することで、Edge は複数のデータセンターにわたるオペレーションを検証することで必要となるレイテンシを回避できます。キースペースが Cassandra の QUORUM 値を整合性レベルとして使用していれば、すべてのデータセンターにわたって読み取り/書き込みオペレーションを検証しなければなりません。
Edge の Message Processor ノードまたは Management Server ノードで使用される整合性レベルを表示するには、次の手順を実行します。
- Message Processor ノードにログインします。
- /opt/apigee/edge-message-processor/conf ディレクトリに移動します。
> cd /opt/apigee/edge-message-processor/conf - 書き込み整合性の場合:
> grep -ri "write.consistencylevel" * - 読み取り整合性の場合:
> grep -ri "read.consistencylevel" * - Management Server ノードにログインします。
- /opt/apigee/edge-management-server/conf ディレクトリに移動します。
> cd /opt/apigee/edge-management-server/conf - ステップ 3 と 4 を繰り返します。
Cassandra ノードをクラスタに追加しても、整合性レベルは影響を受けません。