在 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目标 MQHelmMilvus Operator
内置 PulsarWoodpecker (MinIO)已支持受支持
外部 PulsarWoodpecker (MinIO)已支持已支持
Woodpecker(MinIO)外部 Pulsar已支持已支持
PulsarWoodpecker(本地)支持但不推荐(所有 pod 需要共享文件系统)不支持

翻译自DeepL

想要更快、更简单、更好用的 Milvus SaaS服务 ?

Zilliz Cloud是基于Milvus的全托管向量数据库,拥有更高性能,更易扩展,以及卓越性价比

免费试用 Zilliz Cloud
反馈

此页对您是否有帮助?