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

Edge for Private Cloud v4.19.01

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;
    

dc-1(データセンター 1)では、3 つの Cassandra ノードを持つインストールに対して、kms キー空間のデフォルトのレプリケーション係数は 3 です。

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

たとえば、Cassandra ノードの数を 6 に増やしたとしても、レプリケーション係数が 3 のままであれば、すべての Cassandra ノードにすべてのデータのコピーが存在するとは限りません。レプリケーション係数を大きくすれば、ノードがダウンした場合に、そのノードのデータが残りのノードのいずれかに存在する確率は高くなります。ただし、レプリケーション係数を大きくすると、データの書き込みによりレイテンシが増加するというデメリットがあります。

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

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

Message Processor ノードと Management Server ノードは、読み取りおよび書き込みオペレーションのために Cassandra に接続する際、通常は 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 "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 ノードをクラスタに追加しても、整合性レベルは影響を受けません。