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