Milvus CDC
Milvus CDC(Change Data Capture)は、あるMilvusクラスターから別のMilvusクラスターへデータ変更をレプリケートします。CDCを使用することで、Milvus向けのプライマリ・スタンバイ型ディザスタリカバリトポロジーを構築できます。
プライマリ・スタンバイ構成では、1つのクラスタがプライマリとして機能し、書き込みを受け付けます。1つ以上のスタンバイクラスタは、プライマリからの変更を継続的に受信し、読み取りトラフィックを処理できます。プライマリクラスタが利用できなくなったり、メンテナンスが必要になった場合は、サービストラフィックをスタンバイクラスタに切り替えることができます。
アーキテクチャ
一般的なトポロジーには以下が含まれます:
- プライマリ・クラスタ:レプリケーションのソースとなるクラスタです。読み取りおよび書き込みを受け付けます。
- スタンバイクラスタ:レプリケーションのターゲットクラスタです。プライマリから変更を受け取り、スタンバイ状態にある間は読み取り専用となります。
- CDC ノード:現在のプライマリからスタンバイクラスタへ WAL の変更を転送する Milvus コンポーネントです。スイッチオーバーまたはフェイルオーバー後にプライマリとなる可能性のある各クラスタに CDC をデプロイします。
- レプリケーション・トポロジー:クラスタA → クラスタB のような、設定された送信元から宛先への関係。
以下は、このトポロジーの図解です。
CDCワークフロー
サポートされるトポロジー
最も一般的なCDCの展開形態は、プライマリ1つとスタンバイ1つです:
Application writes
|
v
Primary cluster A -- CDC replication --> Standby cluster B
Milvus CDC は、プライマリが 1 つ、スタンバイが複数あるトポロジーもサポートしています:
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ラグは継続的に監視し、可能な限り低く抑える必要があります。「CDCレプリケーションの設定」ページには、CDCラグを推定するためのPromQLの例が掲載されています。
CDCレプリケーションにおける一括インポート
CDCレプリケーションのトポロジでは、一括インポートではauto_commit=false を使用した2フェーズコミット(2PC)モードを使用する必要があります。インポートとコミットはプライマリクラスタに対してのみ実行し、インポートファイルがプライマリクラスタとスタンバイクラスタの両方で利用可能であることを確認してください。詳細については、「CDCレプリケーションにおける一括インポート」を参照してください。
制限事項
Milvus CDCには現在、以下の制限があります。
- シングルプライマリトポロジのみをサポートしています。
- アクティブ-アクティブまたはマルチプライマリ書き込みはサポートされていません。
- スタンバイクラスタは読み取りトラフィックを処理できますが、スタンバイ状態にある間は直接書き込みを拒否します。
- フェイルオーバーの際、旧プライマリに書き込まれたものの、まだスタンバイにレプリケートされていないデータが失われる可能性があります。
- 設定された
pchannelsは、各クラスタの実際のチャネルレイアウトと一致している必要があります。
よくある質問
スタンバイクラスタはクエリを処理できますか?
はい。スタンバイクラスタは読み取りトラフィックを処理できます。プライマリになるまでは、書き込みを受け付けることはできません。
Milvus CDCはアクティブ-アクティブ書き込みをサポートしていますか?
いいえ。Milvus CDCはシングルプライマリトポロジー向けに設計されています。複数のクラスタに同時に書き込みを行うと、スプリットブレインやデータの不整合が発生する可能性があります。
スイッチオーバー時にデータは失われますか?
いいえ。スイッチオーバーでは、スタンバイがプライマリになる前に、残りのデータがレプリケートされるのを待ちます。
フェイルオーバー時にデータは失われますか?
その可能性があります。旧プライマリに書き込まれたものの、まだスタンバイにレプリケートされていないデータは失われる可能性があります。
フェイルオーバー中に失われる可能性のあるデータの量はどれくらいですか?
潜在的なデータ損失量は、プライマリが利用不能になった時点でのCDCの遅延によって制限されます。