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/cqlsh $(hostname -i) [-u cassuser -p casspass] -e "select keyspace_name, replication from system_schema.keyspaces;"

    ここで、$(hostname -i) は Cassandra ノードの IP アドレスに解決されます。または、$(hostname -i) をノードの IP アドレスに置き換えます。

    cassuser: Cassandra 認証を有効にしている場合は、Cassandra のユーザー名を渡します。これはオプションであり、Cassandra 認証が有効になっていない場合はスキップできます。

    casspass: Cassandra 認証を有効にしている場合は、Cassandra のパスワードを渡します。これはオプションであり、Cassandra 認証が有効になっていない場合はスキップできます。

次のような出力が表示されます。各行は 1 つのキースペースを表します。

  keyspace_name       | replication                                                                 
  kms                 | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
  system_distributed  | {'class': 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '3'}
  apprepo             | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'dc-1': '3'}
  

データセンター 1 の dc-1 では、3 つの Cassandra ノードがあるインストールの kms キースペースのデフォルトのレプリケーション係数が 3 であることがわかります。Cassandra 内部の特定のキースペース(system、system_schema など)では、レプリケーション戦略とレプリケーション係数が異なる場合があります。これは意図的なシステム動作です。

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 ノードで使用される整合性レベルを確認するには:

  1. Message Processor ノードにログインします。
  2. /opt/apigee/edge-message-processor/conf ディレクトリに移動します。
    cd /opt/apigee/edge-message-processor/conf
  3. 読み取りと書き込みの整合性を保つ:
    grep -ri "consistency.level" *
  4. Management Server ノードにログインします。
  5. /opt/apigee/edge-management-server/conf ディレクトリに移動します。
    cd /opt/apigee/edge-management-server/conf
  6. 手順 3 を繰り返します。

Cassandra ノードをクラスタに追加しても、整合性レベルに影響はありません。