Milvus CDC
Milvus CDC (Change Data Capture)は、Milvusクラスタ間のデータ変更をレプリケートします。CDCを使用してMilvusのプライマリ-スタンバイディザスタリカバリトポロジを構築することができます。
プライマリ-スタンバイ・トポロジでは、1つのクラスタがプライマリとして動作し、書き込みを受け付けます。1つまたは複数のスタンバイクラスタはプライマリからの変更を継続的に受信し、読み取りトラフィックに対応できます。プライマリクラスタが利用できなくなったり、メンテナンスが必要になったりした場合は、サービストラフィックをスタンバイクラスタに切り替えることができます。
アーキテクチャ
典型的なトポロジーには以下が含まれます:
- プライマリクラスタ:レプリケーションのソース・クラスタ。読み取りと書き込みを受け付けます。
- スタンバイ・クラスタ:レプリケーションのターゲット・クラスタ。プライマリから変更を受け取り、スタンバイの間は読み取り専用です。
- CDCノード:現在のプライマリクラスタからスタンバイクラスタにWALの変更を転送するMilvusコンポーネント。スイッチオーバーまたはフェイルオーバー後にプライマリとなる可能性のある各クラスタにCDCを配置します。
- レプリケーショントポロジ:以下はトポロジーの説明図です。
CDC ワークフロー
サポートされるトポロジー
最も一般的な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ラグによって制限されます。