在 Pulsar 與 Woodpecker 之間切換
本頁面說明如何將Milvus 叢集的訊息佇列 (MQ) 在Pulsar(內建或外部)與Woodpecker(MinIO 後端)之間進行雙向切換。有關一般工作流程與先決條件,請參閱《切換訊息佇列》。
先決條件:MQ 切換功能僅適用於Milvus 3.0 及後續版本。開始操作前,請將您的 Milvus 實例升級至 Milvus 3.0 或後續版本——此功能在較早版本中不可用。
切換訊息佇列是一項高風險操作。請選擇與您的部署方式相符的章節 —「使用 Helm」或「使用 Milvus Operator」— 並依序從頭至尾執行。請勿混用 Helm 與 Operator 指令。
使用 Helm
從 Pulsar 切換至 Woodpecker(Helm)
步驟 1:確認 Milvus 實例正在運行。請確保您的 Milvus 叢集運作正常 —— 例如,建立測試集合、插入資料並執行查詢。
步驟 2:執行訊息佇列切換。公開 MixCoord 管理介面,然後呼叫切換 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 套用(此操作會滾動更新 Pod)。streaming.enabled=true 是「切換訊息佇列 (Switch MQ)」功能所需的設定。
# 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
請等待所有 Pod 準備就緒,然後確認 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 pod 內部執行切換 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 後,系統會根據新設定重新部署 Pod。
# 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
等待所有 Pod 準備就緒後,確認 Pulsar 存取設定已渲染至 Milvus 設定中。
步驟 3:執行訊息佇列切換。
請確保目標 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) | 外部 Pulsar | 已支援 | 受支援 |
| Pulsar | Woodpecker(本地) | 支援但不建議使用(所有 Pod 都需要共用檔案系統) | 不支援 |