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ターゲットMQHelmMilvus Operator
組み込みPulsarWoodpecker (MinIO)サポート対象サポート対象
外部 PulsarWoodpecker (MinIO)対応対応
Woodpecker (MinIO)External Pulsar対応対応
PulsarWoodpecker (ローカル)サポートされていますが、推奨されません(すべてのポッドで共有ファイルシステムが必要です)未対応