Cassandra のレプリケーション係数と整合性レベルについて

Cassandra のレプリケーション係数について

Cassandra は信頼性とフォールト トレラントを確保するために、データレプリカを複数のノードに保存します。各 Edge キースペースのレプリケーション戦略によって、レプリカが配置されるノードが決まります。

Cassandra クラスタ全体のキースペースのレプリカの合計数は、キースペースのレプリケーション係数と呼ばれます。レプリケーション係数が 1 の場合、Cassandra クラスタの各行のコピーは 1 つのみであることを意味します。レプリケーション係数が 2 の場合、各行のコピーが 2 つあり、各コピーが異なるノードに存在することを意味します。すべてのレプリカは等しく重要で、プライマリ レプリカやマスター レプリカはありません。

各データセンターに 3 つ以上の Cassandra ノードがある本番環境システムでは、Edge キースペースのデフォルトのレプリケーション係数は 3 です。原則として、レプリケーション係数はクラスタ内の Cassandra ノードの数を超えないようにしてください。

次の手順に従い、各 Edge キースペースのレプリケーション係数を示す Cassandra スキーマを表示します。

  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 の 3 つの Cassandra ノードを持つ kms キースペースのデフォルトのレプリケーション係数は 3 です。

クラスタに Cassandra ノードを追加しても、デフォルトのレプリケーション係数は影響を受けません。

たとえば、Cassandra ノードの数を 6 に増やしても、レプリケーション係数を 3 のままにしても、すべての Cassandra ノードにすべてのデータのコピーが存在するとは限りません。ノードがダウンした場合、レプリケーション係数が高いほど、そのノード上のデータが残りのノードのいずれかに存在する可能性が高くなります。レプリケーション係数の増加による欠点は、データ書き込みのレイテンシが増加することです。

Cassandra の整合性レベルについて

Cassandra の整合性レベルは、オペレーションの成功とみなすために、読み取り / 書き込みオペレーションを確認する必要がある Cassandra ノードの最小数として定義されています。 Edge キースペースごとに異なる整合性レベルを割り当てることができます。

読み取り / 書き込みオペレーションのために Cassandra に接続する場合、Message Processor ノードと Management Server ノードでは通常、LOCAL_QUORUM の Cassandra 値を使用してキースペースの整合性レベルを指定します。ただし、一部のキースペースは 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 ノードで使用される整合性レベルを確認するには:

  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 ノードを追加しても、整合性レベルには影響しません。