Cassandra ドキュメント

バージョン

プレリリース版のドキュメントを表示しています。

最新版を表示

ストリーミングの改善

Apache Cassandra 4.0では、ストリーミングにいくつかの改善が加えられました。ストリーミングは、クラスタのノードがSSTable形式のデータを交換するために使用するプロセスです。SSTableのストリーミングは、以下のようないくつかの操作で実行されます。

  • SSTable修復

  • ホストの置換

  • 範囲の移動

  • ブートストラップ

  • 再構築

  • クラスタの拡張

Nettyベースのストリーミング

Cassandra 4.0のストリーミングは、Nettyを使用したノンブロッキング入出力(NIO)に基づいています(CASSANDRA-12229)。これは、ストリーミングメッセージとファイル転送のシングルスレッド(またはシーケンシャル)、同期、ブロッキングモデルに取って代わります。Nettyは、複数の接続を同時に開くことができるノンブロッキング、非同期、マルチスレッドストリーミングをサポートしています。ノンブロッキングとは、スレッドが送信されたリクエストの応答を待機しないため、ブロックされないことを意味します。応答は別のスレッドで返される可能性があります。非同期では、接続とスレッドは切り離されており、1対1の関係はありません。スレッドよりも多くの接続を開くことができます。

ゼロコピーストリーミング

4.0以前では、ストリーミング中にCassandraはSSTableをオブジェクトに具象化していました。これにより不要なガベージが発生し、一部のSSTableは個々のパーティションではなく、ファイル全体として転送できるため、ストリーミングプロセス全体が遅くなります。Cassandra 4.0では、可能な場合はSSTable全体をストリーミングするためのサポートが追加されました(CASSANDRA-14556)。これにより、ZeroCopy APIを使用した高速ストリーミングが可能になります。有効にすると、Cassandraは適格なSSTableにZeroCopyを使用し、転送速度とスループットを大幅に向上させます。ゼロコピーパスは、送受信側両方でデータをユーザー空間にもたらすことを回避します。ストリーミング関連の操作では、対応する改善が見られます。ゼロコピーストリーミングはハードウェアに依存しており、ハードウェアの制限(ネットワークとディスクI/O)によってのみ制限されます。

高可用性

ベンチマークテストでは、ゼロコピーストリーミングはパーティションベースのストリーミングよりも5倍高速です。高速ストリーミングにより、可用性が向上するという利点があります。クラスタの復旧は主にストリーミング速度に依存するため、ノードに障害が発生したCassandraクラスタは、はるかに迅速に(5倍高速に)復旧できます。ノードに障害が発生した場合、SSTableを置換ノードにストリーミングする必要があります。置換操作中、新しいCassandraノードは、この新しいノードのトークン範囲に属するデータのコピーを保持する隣接ノードからSSTableをストリーミングします。保存されているデータの量によっては、このプロセスにはかなりのネットワーク帯域幅が必要になり、完了するまでに時間がかかる場合があります。これらの範囲移動操作にかかる時間が長くなるほど、クラスタの可用性が低下します。複数のノードの障害は、高可用性を大幅に低下させます。新しいノードがデータをストリーミングする速度が速くなるほど、トラフィックを迅速に処理できるようになり、クラスタの可用性が向上します。

ゼロコピーストリーミングの有効化

ゼロコピーストリーミングは、cassandra.yamlで次の設定を行うことで有効になります。

stream_entire_sstables: true

デフォルトでは、ゼロコピーストリーミングは有効になっています。

ゼロコピーストリーミングに適格なSSTable

SSTable内のすべてのパーティションを転送する必要がある場合、ゼロコピーストリーミングが使用されます。これは、LeveledCompactionStrategyを使用する場合、またはトークン範囲によるSSTableのパーティショニングが有効になっている場合によく見られます。ゼロコピーストリーミングの適格性を判断するために、SSTable内のすべてのパーティションキーが反復処理されます。

ゼロコピーストリーミングの利点

有効にすると、Cassandraはすべてのコンポーネントを含む、適格なSSTable全体をノード間でゼロコピーストリーミングできます。これにより、stream_throughput_outboundで指定されたスロットリングの影響を受けますが、ネットワーク転送速度が大幅に向上します。

これにより、送受信ノードのGC圧力が軽減されます。この機能はディスクのバランスを維持しようとしますが、保証はできません。ノード間暗号化が有効になっている場合、この機能は自動的に無効になります。現在、これはLeveled Compactionで使用できます。

ゼロコピーストリーミングの設定

スロットリングにより、ストリーミング速度が低下します。stream_throughput_outboundは、ノードでのすべての発信ストリーミングファイル転送を、指定された合計スループット(Mbps)に制限します。設定されていない場合、デフォルトは200 Mbpsまたは24 MiB/sです。

stream_throughput_outbound: 24MiB/s

ゼロコピーストリーミングのベンチマークを実行するには、stream_throughput_outboundを非常に高い値に設定する必要があります。そうでない場合、スロットリングが大きく、ベンチマークの結果は意味のあるものになりません。

inter_dc_stream_throughput_outboundは、データセンター間のすべてのストリーミングファイル転送を制限します。この設定により、stream_throughput_outboundで設定されたすべてのネットワークストリームトラフィックのスロットリングに加えて、データセンター間のストリームスループットを制限できます。設定されていない場合、デフォルトは200 Mbpsまたは25 MB/sです。

inter_dc_stream_throughput_outbound: 24MiB/s

ゼロコピーストリーミングでストリーミングされるSSTableコンポーネント

ゼロコピーストリーミングは、SSTable全体をストリーミングします。SSTableは、別々のファイルにある複数のコンポーネントで構成されています。ストリーミングされるSSTableコンポーネントは、表1に記載されています。

表1. SSTableコンポーネント

SSTableコンポーネント 説明

Data.db

SSTableの基本データ。残りのコンポーネントは、データコンポーネントに基づいて再生成できます。

Index.db

データファイル内の位置へのポインタを含む、行キーのインデックス。

Filter.db

SSTable内の行キーのシリアライズされたブルームフィルタ。

CompressionInfo.db

非圧縮データの長さ、チャンクオフセットなどの情報を保持するファイル。

Statistics.db

SSTableの内容に関する統計メタデータ。

Digest.crc32

データファイルサイズ_bytesのCRC32チェックサムを保持します。

CRC.db

非圧縮ファイル内のチャンクのCRC32を保持します。

Summary.db

SSTableインデックスサマリー(インデックスコンポーネントのサンプリング)を保持します。

TOC.txt

目次。SSTableのすべてのコンポーネントのリストを格納します。

カスタムコンポーネント。例:カスタム圧縮戦略で使用される可能性があります。

修復ストリーミングプレビュー

nodetool repairによる修復には、修復されたSSTableのストリーミングが含まれ、実行する必要がある修復ストリーミングの量の見積もりを提供する修復プレビューが追加されました。修復プレビュー(CASSANDRA-13257)は、オプションを使用してnodetool repair --previewで呼び出されます。

-prv, --preview

ストリーミングする範囲とデータの量を決定しますが、実際には修復を実行しません。

Keyspaceのストリーミングの並列化

Cassandra 4.0では、ブートストラップと再構築のための異なるKeyspaceのストリーミングが並列化されました(CASSANDRA-4663)。

マルチDC展開でのストリーミングの固有ノード

各DCのレプリカ数が3以上の場合、Range Streamerはデータのストリーミング元として固有のノードを選択します(CASSANDRA-4650)。この最適化を行うことで、クラスタ全体でストリーミング負荷を均等化できます。最適化を行わない場合、一部のノードは他のノードよりも多くのデータのストリーミングに選択される可能性があります。このパッチにより、1つの範囲のみをストリーミングする専用ノードを選択できます。

これにより、ノードのブートストラップのパフォーマンスが向上し、データを提供するノードへの負荷も軽減されます。各DCでN < 3の場合は、2つのノードからのみデータをストリーミングするため、影響はありません。

ストリーム操作の種類

特定のストリームの種類または目的を知ることは重要です。バージョン4.0(CASSANDRA-13064)では、さまざまな種類のストリームを区別するためのenumが追加されました。ストリームの種類は、ストリームリクエストとストリームタスクの両方で使用できます。さまざまなストリームの種類は次のとおりです。

  • レプリカ数の復元

  • アンブートストラップ

  • 再配置

  • ブートストラップ

  • 再構築

  • バルクロード

  • 修復

レプリカ数が設定されたRFを下回ると、デコミッションを許可しない

CASSANDRA-12510は、レプリカ数が設定されたレプリケーションファクター(RF)を下回るとデコミッションを防ぎ、意図的な場合はデコミッションを続行できるようにする--forceオプションを追加します。設定されたRFを下回ってレプリカ数を減らす場合でも、このノードのデコミッションを強制します。