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 origen | MQ de destino | Helm | Operador de Milvus |
|---|---|---|---|
| Pulsar integrado | Woodpecker (MinIO) | Compatible | Compatible |
| Pulsar externo | Woodpecker (MinIO) | Compatible | Compatible |
| Woodpecker (MinIO) | Pulsar externo | Compatible | Compatible |
| Pulsar | Woodpecker (local) | Compatible, pero no recomendado (todos los pods necesitan un sistema de archivos compartido) | No compatible |