Milvus CDC

Milvus CDC (Change Data Capture)は、Milvusクラスタ間のデータ変更をレプリケートします。CDCを使用してMilvusのプライマリ-スタンバイディザスタリカバリトポロジを構築することができます。

プライマリ-スタンバイ・トポロジでは、1つのクラスタがプライマリとして動作し、書き込みを受け付けます。1つまたは複数のスタンバイクラスタはプライマリからの変更を継続的に受信し、読み取りトラフィックに対応できます。プライマリクラスタが利用できなくなったり、メンテナンスが必要になったりした場合は、サービストラフィックをスタンバイクラスタに切り替えることができます。

アーキテクチャ

典型的なトポロジーには以下が含まれます:

  • プライマリクラスタ:レプリケーションのソース・クラスタ。読み取りと書き込みを受け付けます。
  • スタンバイ・クラスタ:レプリケーションのターゲット・クラスタ。プライマリから変更を受け取り、スタンバイの間は読み取り専用です。
  • CDCノード:現在のプライマリクラスタからスタンバイクラスタにWALの変更を転送するMilvusコンポーネント。スイッチオーバーまたはフェイルオーバー後にプライマリとなる可能性のある各クラスタにCDCを配置します。
  • レプリケーショントポロジ:以下はトポロジーの説明図です。 CDC workflowCDC ワークフロー

サポートされるトポロジー

最も一般的なCDCの配置は、プライマリとスタンバイが1つずつです:

Application writes
      |
      v
Primary cluster A  -- CDC replication -->  Standby cluster B

Milvus CDCはシングルプライマリ、マルチスタンバイのトポロジもサポートしています:

Primary cluster A  -- CDC replication -->  Standby cluster B
                  \-- CDC replication -->  Standby cluster C

Milvus CDCは、2つ以上のクラスタが同時に書き込みトラフィックを受け付けるマルチプライマリまたはアクティブ-アクティブな展開には対応していません。

プライマリとスタンバイの動作

役割読み込み書き込みレプリケーション動作
プライマリリードありスタンバイクラスタに変更を送信
スタンバイはいいいえプライマリからレプリケートされた変更を受信

スタンバイ・クラスタは直接の書き込み要求を拒否します。これにより、スプリットブレインを防ぎ、レプリケーショントポロジの一貫性を保つことができます。

計画的なスイッチオーバーとフェイルオーバー

Milvus CDCでは、現在のプライマリからスタンバイクラスタにサービストラフィックを移動させる2つの方法を提供しています。

オペレーション以下の場合に使用します。データ損失期待される動作
スイッチオーバー現在のプライマリがまだ到達可能であるか、計画的なメンテナンスを行っている場合。RPO = 0ロール変更前にレプリケートされたデータの残りを待つ
フェイルオーバー現在のプライマリが利用できず、迅速に復旧できない場合可能書き込みが再開できるようにスタンバイを直ちにプロモートする

現在のプライマリがまだ応答できる場合は、いつでもスイッチオーバーを使用する。元のプライマリを待つよりも可用性を回復する方が重要な場合にのみフェイルオーバーを使用する。

CDCラグとその理由

CDCラグとは、プライマリクラスタに書き込まれたものの、スタンバイクラスタにまだ適用されていないデータ量のことです。

CDCラグは両方のリカバリオプションに影響します:

  • スイッチオーバーの場合、CDCラグが小さいほど、通常、処理が速く完了することを意味します。
  • フェイルオーバー中、CDCラグは、元のプライマリが利用できない場合に失われる可能性のあるデータウィンドウを表します。

CDCラグを継続的に監視し、可能な限り低く保つ必要があります。Set Up CDC Replicationのページには、CDCラグを見積もるためのPromQLの例が含まれています。

制限事項

Milvus CDCには現在以下の制限があります:

  • シングルプライマリートポロジーのみをサポートします。
  • アクティブ-アクティブまたはマルチプライマリ・ライトをサポートしていません
  • スタンバイ・クラスタは読み込みトラフィックに対応できますが、スタンバイのままでは直接の書き込みは拒否されます。
  • フェイルオーバーでは、古いプライマリに書き込まれたがスタンバイにはまだレプリケートされていないデータが失われる可能性があります。
  • 設定されたpchannels 、各クラスタの実際のチャネル・レイアウトと一致する必要があります。

よくある質問

スタンバイ・クラスタはクエリを処理できますか?

はい。スタンバイ・クラスタは読み取りトラフィックに対応できます。プライマリになるまで書き込みを受け付けることはできません。

Milvus CDCはアクティブ-アクティブ書き込みに対応していますか?

Milvus CDCはシングル・プライマリ・トポロジ向けに設計されています。複数のクラスタに同時に書き込みを行うと、スプリットブレインやデータの発散が発生する可能性があります。

スイッチオーバーするとデータは失われますか?

スタンバイがプライマリになる前に、残りのデータがレプリケートされるのを待ちます。

フェイルオーバーによってデータは失われますか?

あり得ます。旧プライマリに書き込まれ、スタンバイにまだレプリケートされていないデータは失われる可能性があります。

フェイルオーバー中にどの程度のデータが失われる可能性がありますか?

データ損失の可能性は、プライマリが利用できなくなった時点のCDCラグによって制限されます。