Cambiar entre Pulsar y Woodpecker

En esta página se describe cómo cambiar la cola de mensajes (MQ) de un clúster de Milvus entre Pulsar (integrado o externo) y Woodpecker (backend MinIO), en ambas direcciones. Para conocer el flujo de trabajo general y los requisitos previos, consulta Cambiar la cola de mensajes.

Requisito previo: la función «Cambiar MQ» está disponible en Milvus 3.0 y versiones posteriores. Actualiza tu instancia de Milvus a Milvus 3.0 o posterior antes de comenzar; la función no está disponible en versiones anteriores.

Cambiar la cola de mensajes es una operación de alto riesgo. Elige la sección que se ajuste a tu método de implementación —Con Helm o Con Milvus Operator — y síguela de principio a fin. No mezcles comandos de Helm y de Operator.

Con Helm

Cambiar de Pulsar a Woodpecker (Helm)

Paso 1: Comprueba que la instancia de Milvus esté en ejecución. Asegúrate de que tu clúster de Milvus funcione correctamente; por ejemplo, creando una colección de prueba, insertando datos y ejecutando una consulta.

Paso 2: Ejecuta el cambio de MQ. Accede a la interfaz de gestión de MixCoord y, a continuación, llama a la API de cambio:

kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091

En otra terminal:

curl -X POST http://127.0.0.1:29091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "woodpecker"}'

Paso 3: Comprueba que el cambio se haya completado.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Si el cambio se ha realizado correctamente, se registrará en el archivo de registro [mqTypeValue=woodpecker].

Paso 4: (Opcional) Detén Pulsar y realiza la limpieza. Para Pulsar integrado, desactiva Pulsar y activa Woodpecker; a continuación, elimina los PVC de Pulsar:

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> ...

En el caso de Pulsar externo, limpia los temas de Milvus en la instancia externa de Pulsar. Los temas de Milvus siguen el formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (por ejemplo, by-dev-rootcoord-dml_10_464633776992639586v0).

Si tiene previsto volver a Pulsar más adelante, elimine primero los datos y los temas para evitar conflictos. Debido a las limitaciones de los gráficos de Helm, actualmente no es posible volver a una instancia integrada de Pulsar.

Cambiar de Woodpecker a Pulsar (Helm)

Paso 1: Comprueba que la instancia de Milvus esté en ejecución.

Paso 2: Configura la conexión de destino a Pulsar y reinicia Milvus. Para realizar el cambio, es necesario que Milvus ya conozca la conexión a Pulsar, así que introdúcel user.yaml o a través de extraConfigFiles y aplícala con helm upgrade (lo que reinicia los pods). Se requiere streaming.enabled=true para la función 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

Espera a que todos los pods estén listos y, a continuación, confirma que la configuración de acceso a Pulsar se ha incorporado a la configuración de Milvus.

Paso 3: Ejecuta el cambio a MQ.

Asegúrate de que el Pulsar de destino no contenga temas de Milvus de una configuración anterior. Si es tu primera migración a Pulsar, omite esta nota; de lo contrario, elimina primero los temas residuales de Milvus con los mismos nombres.

kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091

En otra terminal:

curl -X POST http://127.0.0.1:29091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "pulsar"}'

Paso 4: Verifica que la migración se haya completado.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Si la migración se ha realizado correctamente, se registrará en [mqTypeValue=pulsar].

Paso 5: (Opcional) Elimina los datos de Woodpecker. Elimina los datos de Woodpecker en MinIO/S3 (en la ruta <rootPath>/wp/..., normalmente files/wp/...) y los metadatos de Woodpecker en etcd (etcdctl get woodpecker --prefix). Si tienes previsto volver a Woodpecker más adelante, elimina primero estos archivos.

Con Milvus Operator

Cambiar de Pulsar a Woodpecker (Milvus Operator)

Paso 1: Comprueba que la instancia de Milvus esté en ejecución.

Paso 2: Ejecuta el cambio de MQ. El servicio MixCoord no está expuesto, así que ejecuta la API de cambio desde dentro del pod de MixCoord:

kubectl exec -it <mixcoord-pod> -- \
  curl -X POST http://localhost:9091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "woodpecker"}'

Paso 3: Comprueba que el cambio se haya completado.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Si el cambio se ha realizado correctamente, se registra en [mqTypeValue=woodpecker].

Paso 4: Actualiza el tipo de MQ en el Operator. Actualiza la configuración gestionada por el Operator para que este no revierta el cambio. Crea 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

Paso 5: (Opcional) Detener Pulsar y limpiar. Para Pulsar integrado, desinstala la versión de Pulsar y elimina sus PVC:

helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...

Para Pulsar externo, limpia los temas de Milvus (formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).

Si tiene previsto volver a Pulsar más adelante, limpie primero los datos y los temas para evitar conflictos. Debido a las limitaciones de los gráficos de Helm, actualmente no es posible volver a una instancia integrada de Pulsar.

Cambiar de Woodpecker a Pulsar (operador de Milvus)

Paso 1: Comprueba que la instancia de Milvus esté en ejecución.

Paso 2: Configura la conexión a Pulsar de destino y reinicia Milvus. Introduce la conexión a Pulsar en spec.config (el operador convierte spec.config en user.yaml) y establece el tipo de MQ; al aplicar el CR, los pods se actualizan con la nueva configuración.

# 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

Espera a que todos los pods estén listos y, a continuación, confirma que la configuración de acceso a Pulsar se ha incorporado a la configuración de Milvus.

Paso 3: Ejecuta el cambio de MQ.

Asegúrate de que el Pulsar de destino no contenga temas de Milvus de una configuración anterior. Si es tu primer cambio a Pulsar, omite esta nota; de lo contrario, elimina primero los temas residuales de Milvus con los mismos nombres.

kubectl exec -it <mixcoord-pod> -- \
  curl -X POST http://localhost:9091/management/wal/alter \
  -H "Content-Type: application/json" \
  -d '{"target_wal_name": "pulsar"}'

Paso 4: Verifica que la migración se haya completado.

kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"

Si la migración se ha realizado correctamente, se registrará en el registro: [mqTypeValue=pulsar].

Paso 5: (Opcional) Elimina los datos de Woodpecker. Elimina los datos de Woodpecker en MinIO/S3 (en la ruta <rootPath>/wp/..., normalmente files/wp/...) y los metadatos de Woodpecker en etcd (etcdctl get woodpecker --prefix). Si tienes previsto volver a Woodpecker más adelante, elimina primero estos archivos.

Escenarios compatibles

MQ de origenMQ de destinoHelmOperador de Milvus
Pulsar integradoWoodpecker (MinIO)CompatibleCompatible
Pulsar externoWoodpecker (MinIO)CompatibleCompatible
Woodpecker (MinIO)Pulsar externoCompatibleCompatible
PulsarWoodpecker (local)Compatible, pero no recomendado (todos los pods necesitan un sistema de archivos compartido)No compatible