Passaggio da Pulsar a Woodpecker
Questa pagina descrive come passare dalla coda dei messaggi (MQ) di un cluster Milvus da Pulsar (integrato o esterno) a Woodpecker (backend MinIO) e viceversa. Per il flusso di lavoro generale e i prerequisiti, consultare Passare alla coda dei messaggi.
Prerequisito: la funzionalità "Cambio della coda dei messaggi" è disponibile in Milvus 3.0 e versioni successive. Aggiornare l’istanza di Milvus a Milvus 3.0 o versioni successive prima di iniziare: la funzionalità non è disponibile nelle versioni precedenti.
Il cambio della coda dei messaggi è un’operazione ad alto rischio. Scegli la sezione corrispondente al tuo metodo di distribuzione — Con Helm o Con Milvus Operator — e seguila dall’inizio alla fine. Non mescolare i comandi di Helm e Operator.
Con Helm
Passaggio da Pulsar a Woodpecker (Helm)
Passaggio 1: Verifica che l’istanza di Milvus sia in esecuzione. Assicurati che il tuo cluster Milvus funzioni correttamente — ad esempio, creando una raccolta di prova, inserendo dati ed eseguendo una query.
Passaggio 2: Eseguire il cambio di MQ. Esporre l’interfaccia di gestione MixCoord, quindi chiamare l’API di cambio:
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
In un altro terminale:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "woodpecker"}'
Passaggio 3: verificare che il passaggio sia stato completato.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Se il passaggio ha esito positivo, viene registrato il messaggio " [mqTypeValue=woodpecker]".
Passaggio 4: (Facoltativo) Arrestare Pulsar ed eseguire la pulizia. Per Pulsar integrato, disabilitare Pulsar e abilitare Woodpecker, quindi eliminare i PVC di Pulsar:
helm upgrade my-release zilliztech/milvus \
--set image.all.tag=v3.0.1 \
--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> ...
Per Pulsar esterno, ripulire gli argomenti Milvus nell’istanza Pulsar esterna. Gli argomenti Milvus seguono il formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (ad esempio, by-dev-rootcoord-dml_10_464633776992639586v0).
Se si prevede di tornare a Pulsar in un secondo momento, ripulire prima i dati/argomenti per evitare conflitti. A causa delle limitazioni dei chart Helm, al momento non è possibile tornare a un’istanza di Pulsar integrata.
Passaggio da Woodpecker a Pulsar (Helm)
Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.
Passaggio 2: configurare la connessione Pulsar di destinazione e riavviare Milvus. Il passaggio richiede che Milvus conosca già la connessione Pulsar, quindi inserirla in user.yaml tramite extraConfigFiles e applicare con helm upgrade (che esegue il rollover dei pod). Per la funzionalità Switch MQ è richiesto streaming.enabled=true.
# 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
Attendere che tutti i pod siano pronti, quindi verificare che la configurazione di accesso a Pulsar sia stata incorporata nella configurazione di Milvus.
Passaggio 3: Eseguire il passaggio a MQ.
Assicurarsi che il Pulsar di destinazione non contenga argomenti Milvus provenienti da una configurazione precedente. Se si tratta del primo passaggio a Pulsar, ignorare questa nota; in caso contrario, eliminare prima gli argomenti Milvus residui con gli stessi nomi.
kubectl port-forward --address 0.0.0.0 service/my-release-milvus-mixcoord 29091:9091
In un altro terminale:
curl -X POST http://127.0.0.1:29091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Passaggio 4: verificare che il passaggio sia stato completato.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Se il passaggio va a buon fine, viene registrato il messaggio " [mqTypeValue=pulsar]".
Passaggio 5: (Facoltativo) Rimuovere i dati di Woodpecker. Eliminare i dati di Woodpecker su MinIO/S3 (in <rootPath>/wp/..., in genere files/wp/...) e i metadati di Woodpecker in etcd (etcdctl get woodpecker --prefix). Se si prevede di tornare a Woodpecker in un secondo momento, rimuovere prima questi file.
Con Milvus Operator
Passaggio da Pulsar a Woodpecker (Milvus Operator)
Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.
Passaggio 2: Eseguire il passaggio a MQ. Il servizio MixCoord non è esposto, quindi eseguire l’API di passaggio dall’interno del pod 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"}'
Passaggio 3: Verificare che il passaggio sia stato completato.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Se il passaggio va a buon fine, viene registrato il messaggio " [mqTypeValue=woodpecker]".
Passaggio 4: Aggiornare il tipo di MQ nell’Operator. Aggiornare la configurazione gestita dall’Operator in modo che l’Operator non annulli il passaggio. Creare 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
Passaggio 5: (Facoltativo) Arrestare Pulsar ed eseguire la pulizia. Per Pulsar integrato, disinstallare la versione di Pulsar ed eliminare i relativi PVC:
helm uninstall my-release-pulsar
kubectl get pvc | grep my-release-pulsar
kubectl delete pvc <pulsar-pvc-name> ...
Per Pulsar esterno, ripulire gli argomenti Milvus (formato <cluster_prefix>-dml_<seqNo>_<TimeTick><Version>).
Se si prevede di tornare a Pulsar in un secondo momento, ripulire prima i dati/argomenti per evitare conflitti. A causa delle limitazioni dei chart Helm, al momento non è possibile tornare a un’istanza di Pulsar integrata.
Passaggio da Woodpecker a Pulsar (Milvus Operator)
Passaggio 1: Verificare che l’istanza di Milvus sia in esecuzione.
Passaggio 2: configurare la connessione Pulsar di destinazione e riavviare Milvus. Inserire la connessione Pulsar in spec.config (l’Operator converte spec.config in user.yaml) e impostare il tipo di MQ; l’applicazione del CR aggiorna i pod con la nuova configurazione.
# 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
Attendere che tutti i pod siano pronti, quindi verificare che la configurazione di accesso a Pulsar sia stata integrata nella configurazione di Milvus.
Passaggio 3: Eseguire il passaggio a MQ.
Assicurarsi che il Pulsar di destinazione non contenga argomenti Milvus provenienti da una configurazione precedente. Se si tratta del primo passaggio a Pulsar, ignorare questa nota; in caso contrario, eliminare prima gli argomenti Milvus residui con gli stessi nomi.
kubectl exec -it <mixcoord-pod> -- \
curl -X POST http://localhost:9091/management/wal/alter \
-H "Content-Type: application/json" \
-d '{"target_wal_name": "pulsar"}'
Passaggio 4: verificare che il passaggio sia stato completato.
kubectl logs <mixcoord-pod> | grep "successfully updated mq.type configuration in etcd"
Se il passaggio ha esito positivo, viene registrato il messaggio « [mqTypeValue=pulsar] ».
Passaggio 5: (Facoltativo) Rimuovere i dati di Woodpecker. Eliminare i dati di Woodpecker su MinIO/S3 (nella directory <rootPath>/wp/..., in genere files/wp/...) e i metadati di Woodpecker in etcd (etcdctl get woodpecker --prefix). Se si prevede di tornare a Woodpecker in un secondo momento, rimuovere prima questi file.
Scenari supportati
| MQ di origine | MQ di destinazione | Helm | Operatore Milvus |
|---|---|---|---|
| Pulsar integrato | Woodpecker (MinIO) | Supportato | Supportato |
| Pulsar esterno | Woodpecker (MinIO) | Supportato | Supportato |
| Woodpecker (MinIO) | Pulsar esterno | Supportato | Supportato |
| Pulsar | Woodpecker (locale) | Supportato ma non consigliato (tutti i pod necessitano di un sistema di file condiviso) | Non supportato |