Pulsar と Woodpecker の切り替え
このページでは、Milvusクラスタのメッセージキュー(MQ)を、Pulsar(組み込みまたは外部)とWoodpecker(MinIOバックエンド)の間で双方向に切り替える方法について説明します。一般的なワークフローと前提条件については、「メッセージキューの切り替え」を参照してください。
前提条件:「メッセージキューの切り替え」機能は、Milvus 3.0 以降で利用可能です。作業を開始する前に、Milvus インスタンスを Milvus 3.0 以降にアップグレードしてください。以前のバージョンではこの機能は利用できません。
メッセージキューの切り替えは、リスクの高い操作です。ご自身のデプロイ方法(Helm を使用する場合、またはMilvus Operator を使用する場合)に該当するセクションを選択し、その手順を最初から最後まで順を追って実行してください。Helm コマンドと Operator コマンドを混在させないでください。
Helm を使用する場合
Pulsar から Woodpecker への切り替え(Helm)
ステップ 1: Milvus インスタンスが実行中であることを確認します。テストコレクションの作成、データの挿入、クエリの実行などを行い、Milvus クラスタが正常に動作していることを確認してください。
ステップ 2: MQ の切り替えを実行します。MixCoord 管理インターフェースを公開し、switch API を呼び出します:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
別のターミナルで:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
ステップ 3: 切り替えが完了したことを確認します。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
切り替えが成功すると、[mqTypeValue=woodpecker] というログが出力されます。
ステップ 4: (オプション) Pulsar を停止し、クリーンアップを行います。 組み込みのPulsar の場合、Pulsar を無効にして Woodpecker を有効にした後、Pulsar の PVC を削除します:
helm upgrade my-release zilliztech/milvus \
--set image.all.tag=v3.0.0 \
--set pulsarv3.enabled=false \
--set woodpecker.enabled=true \
--set streaming.enabled=true \
--set indexNode.enabled=false
kubectl get pvc | grep my-release-pulsarv3
kubectl delete pvc <pulsar-pvc-name> ...
外部Pulsarの場合は、外部Pulsarインスタンス内のMilvusトピックをクリーンアップします。Milvusトピックは<cluster_prefix>-dml_<seqNo>_<TimeTick><Version> という形式に従います(例:by-dev-rootcoord-dml_10_464633776992639586v0 )。
後でPulsarに戻す予定がある場合は、競合を避けるために、まずデータやトピックをクリーンアップしてください。Helmチャートの制限により、現在、組み込みのPulsarインスタンスに戻すことはできません。
Woodpecker から Pulsar への切り替え (Helm)
ステップ 1: Milvus インスタンスが実行中であることを確認します。
ステップ 2: 対象の Pulsar 接続を設定し、Milvus を再起動します。切り替えを行うには、Milvus がすでに Pulsar 接続を認識している必要があるため、extraConfigFiles 経由でuser.yaml に書き込み、helm upgrade で適用します(これによりポッドが再起動されます)。Switch MQ 機能を利用するには、streaming.enabled=true が必要です。
# values.yaml
extraConfigFiles:
user.yaml: |+
pulsar:
address: <pulsar addr>
port: <pulsar port, e.g. 6650>
helm upgrade -i my-release zilliztech/milvus \
--set pulsarv3.enabled=true \
--set woodpecker.enabled=false \
--set streaming.enabled=true \
-f values.yaml
すべてのポッドの準備が整うまで待機し、Pulsar アクセス設定が Milvus の設定に反映されていることを確認します。
ステップ 3: MQ スイッチを実行します。
対象のPulsarに、以前の設定からのMilvusトピックが含まれていないことを確認してください。今回がPulsarへの初めての切り替えである場合は、この注意事項をスキップしてください。そうでない場合は、まず同じ名前の残存するMilvusトピックをクリーンアップしてください。
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
別のターミナルで:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
ステップ 4: 切り替えが完了したことを確認します。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
切り替えが成功すると、[mqTypeValue=pulsar] というログが出力されます。
ステップ 5: (オプション) Woodpecker データをクリーンアップします。MinIO/S3 上の Woodpecker データ(<rootPath>/wp/... 配下、通常はfiles/wp/... )および etcd 内の Woodpecker メタデータ(etcdctl get woodpecker --prefix )を削除します。後で Woodpecker に戻す予定がある場合は、まずこれらのファイルをクリーンアップしてください。
Milvus Operator を使用する場合
Pulsar から Woodpecker への切り替え(Milvus Operator)
ステップ 1: Milvus インスタンスが実行中であることを確認します。
ステップ 2: MQ の切り替えを実行します。MixCoord サービスは外部に公開されていないため、MixCoord ポッド内部から切り替え API を実行してください:
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
ステップ 3: 切り替えが完了したことを確認します。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
切り替えが成功すると、[mqTypeValue=woodpecker] がログに記録されます。
ステップ 4: Operator 内の MQ タイプを更新します。Operator が切り替えを元に戻さないように、Operatorが管理する設定を更新します。 change_configmap.yaml を作成します:
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
dependencies:
msgStreamType: woodpecker
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
ステップ 5: (オプション) Pulsar を停止し、クリーンアップを行います。 組み込みのPulsar の場合、Pulsar リリースをアンインストールし、その PVC を削除します:
helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...
外部Pulsarの場合は、Milvusのトピックをクリーンアップします(<cluster_prefix>-dml_<seqNo>_<TimeTick><Version> 形式)。
後でPulsarに戻す予定がある場合は、競合を避けるために、まずデータやトピックをクリーンアップしてください。Helmチャートの制限により、現在、組み込みのPulsarインスタンスに戻すことはできません。
Woodpecker から Pulsar への切り替え(Milvus Operator)
ステップ 1: Milvus インスタンスが実行中であることを確認します。
ステップ 2: 対象の Pulsar 接続を設定し、Milvus を再起動します。Pulsar 接続を`spec.config ` に配置し(Operator は `spec.config ` を `user.yaml` に変換します)、MQ タイプを設定します。CR を適用すると、新しい構成でポッドが再起動されます。
# change_configmap.yaml
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-release
labels:
app: milvus
spec:
config:
pulsar:
address: <pulsar addr>
port: <pulsar port, e.g. 6650>
dependencies:
msgStreamType: pulsar
kubectl patch -f change_configmap.yaml --patch-file change_configmap.yaml --type merge
すべてのポッドが「ready」状態になるのを待ち、Pulsar アクセス設定が Milvus 設定に反映されていることを確認します。
ステップ 3: MQ の切り替えを実行します。
対象のPulsarに、以前の設定からのMilvusトピックが含まれていないことを確認してください。今回がPulsarへの初めての切り替えである場合は、この注意事項をスキップしてください。そうでない場合は、まず同じ名前の残存するMilvusトピックをクリーンアップしてください。
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
ステップ 4: 切り替えが完了したことを確認します。
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
切り替えが成功すると、[mqTypeValue=pulsar] というログが出力されます。
ステップ 5: (オプション) Woodpecker データのクリーンアップ。MinIO/S3 上の Woodpecker データ(<rootPath>/wp/... 配下、通常はfiles/wp/... )および etcd 内の Woodpecker メタデータ(etcdctl get woodpecker --prefix )を削除します。後で Woodpecker に切り戻す予定がある場合は、まずこれらのファイルをクリーンアップしてください。
サポートされるシナリオ
| ソースMQ | ターゲットMQ | Helm | Milvus Operator |
|---|---|---|---|
| 組み込みPulsar | Woodpecker (MinIO) | サポート対象 | サポート対象 |
| 外部 Pulsar | Woodpecker (MinIO) | 対応 | 対応 |
| Woodpecker (MinIO) | External Pulsar | 対応 | 対応 |
| Pulsar | Woodpecker (ローカル) | サポートされていますが、推奨されません(すべてのポッドで共有ファイルシステムが必要です) | 未対応 |