在 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 集群运行正常——例如,通过创建测试 Collection、插入数据并执行查询来验证。
步骤 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 下(操作符会将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 需要共享文件系统) | 不支持 |