Wechsel zwischen Pulsar und Woodpecker

Auf dieser Seite wird beschrieben, wie Sie die Nachrichtenwarteschlange (MQ) eines Milvus-Clusters in beide Richtungen zwischen Pulsar (integriert oder extern) und Woodpecker (MinIO-Backend) umschalten können. Informationen zum allgemeinen Arbeitsablauf und zu den Voraussetzungen finden Sie unter „Nachrichtenwarteschlange umschalten“.

Voraussetzung: Die Funktion „Switch MQ“ ist ab Milvus 3.0 verfügbar. Aktualisieren Sie Ihre Milvus-Instanz auf Milvus 3.0 oder höher, bevor Sie beginnen – die Funktion ist in früheren Versionen nicht verfügbar.

Das Umschalten der Nachrichtenwarteschlange ist ein risikoreicher Vorgang. Wählen Sie den Abschnitt aus, der Ihrer Bereitstellungsmethode entspricht – „Mit Helm“ oder „Mit Milvus Operator“ – und befolgen Sie die Anweisungen von oben bis unten. Mischen Sie keine Helm- und Operator-Befehle.

Mit Helm

Wechsel von Pulsar zu Woodpecker (Helm)

Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft. Stellen Sie sicher, dass Ihr Milvus-Cluster ordnungsgemäß funktioniert – beispielsweise, indem Sie eine Testkollektion erstellen, Daten einfügen und eine Abfrage ausführen.

Schritt 2: Führen Sie den MQ-Wechsel durch. Stellen Sie die MixCoord-Verwaltungsschnittstelle bereit und rufen Sie dann die Switch-API auf:

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

In einem anderen Terminal:

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

Schritt 3: Überprüfen Sie, ob der Wechsel abgeschlossen ist.

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

Bei einem erfolgreichen Wechsel wird „ [mqTypeValue=woodpecker] “ protokolliert.

Schritt 4: (Optional) Pulsar anhalten und bereinigen. Deaktivieren Sie bei integriertem Pulsar Pulsar und aktivieren Sie Woodpecker; löschen Sie anschließend die Pulsar-PVCs:

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

Bei externem Pulsar bereinigen Sie die Milvus-Themen in der externen Pulsar-Instanz. Milvus-Themen folgen dem Format <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> (zum Beispiel by-dev-rootcoord-dml_10_464633776992639586v0).

Wenn Sie später wieder zu Pulsar wechseln möchten, bereinigen Sie zunächst die Daten/Themen, um Konflikte zu vermeiden. Aufgrund von Einschränkungen des Helm-Charts ist ein Wechsel zurück zu einer integrierten Pulsar-Instanz derzeit nicht möglich.

Wechsel von Woodpecker zu Pulsar (Helm)

Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.

Schritt 2: Konfigurieren Sie die Zielverbindung zu Pulsar und starten Sie Milvus neu. Für den Wechsel muss Milvus die Pulsar-Verbindung bereits kennen. Tragen Sie diese daher über extraConfigFiles in „ user.yaml “ ein und wenden Sie die Änderung mit „ helm upgrade “ an (wodurch die Pods neu gestartet werden). „ streaming.enabled=true “ ist für die Switch-MQ-Funktion erforderlich.

# 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

Warten Sie, bis alle Pods bereit sind, und überprüfen Sie anschließend, ob die Pulsar-Zugriffskonfiguration in die Milvus-Konfiguration übernommen wurde.

Schritt 3: Führen Sie den MQ-Wechsel durch.

Stellen Sie sicher, dass der Ziel-Pulsar keine Milvus-Themen aus einer früheren Konfiguration enthält. Wenn dies Ihr erster Wechsel zu Pulsar ist, überspringen Sie diesen Hinweis; andernfalls bereinigen Sie zunächst verbleibende Milvus-Themen mit denselben Namen.

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

In einem anderen Terminal:

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

Schritt 4: Überprüfen Sie, ob der Wechsel abgeschlossen ist.

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

Bei einer erfolgreichen Umstellung wird Folgendes protokolliert: „ [mqTypeValue=pulsar] “.

Schritt 5: (Optional) Woodpecker-Daten bereinigen. Löschen Sie die Woodpecker-Daten auf MinIO/S3 (unter „ <rootPath>/wp/... “, typischerweise „ files/wp/... “) sowie die Woodpecker-Metadaten in etcd (etcdctl get woodpecker --prefix). Wenn Sie später wieder zu Woodpecker zurückwechseln möchten, bereinigen Sie diese Dateien zunächst.

Mit dem Milvus Operator

Wechsel von Pulsar zu Woodpecker (Milvus Operator)

Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.

Schritt 2: Führen Sie den MQ-Wechsel durch. Da der MixCoord-Dienst nicht öffentlich zugänglich ist, führen Sie die Switch-API aus dem MixCoord-Pod heraus aus:

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

Schritt 3: Überprüfen Sie, ob der Wechsel abgeschlossen ist.

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

Bei einem erfolgreichen Wechsel wird „ [mqTypeValue=woodpecker] “ protokolliert.

Schritt 4: Aktualisieren Sie den MQ-Typ im Operator. Aktualisieren Sie die vom Operator verwaltete Konfiguration, damit der Operator den Wechsel nicht rückgängig macht. Erstellen Sie „ 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

Schritt 5: (Optional) Pulsar anhalten und bereinigen. Bei integriertem Pulsar deinstallieren Sie die Pulsar-Version und löschen Sie deren PVCs:

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

Bei externem Pulsar bereinigen Sie die Milvus-Themen (Format „ <cluster_prefix>-dml_<seqNo>_<TimeTick><Version> “).

Wenn Sie später wieder zu Pulsar zurückwechseln möchten, bereinigen Sie zunächst die Daten/Themen, um Konflikte zu vermeiden. Aufgrund von Einschränkungen des Helm-Charts ist ein Rückwechsel zu einer integrierten Pulsar-Instanz derzeit nicht möglich.

Wechsel von Woodpecker zu Pulsar (Milvus-Operator)

Schritt 1: Überprüfen Sie, ob die Milvus-Instanz läuft.

Schritt 2: Konfigurieren Sie die Verbindung zur Ziel-Pulsar-Instanz und starten Sie Milvus neu. Tragen Sie die Pulsar-Verbindung unter „ spec.config “ ein (der Operator wandelt „ spec.config “ in „ user.yaml “ um) und legen Sie den MQ-Typ fest; durch das Anwenden des CR werden die Pods mit der neuen Konfiguration neu gestartet.

# 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

Warten Sie, bis alle Pods bereit sind, und überprüfen Sie anschließend, ob die Pulsar-Zugriffskonfiguration in die Milvus-Konfiguration übernommen wurde.

Schritt 3: Führen Sie den MQ-Wechsel durch.

Stellen Sie sicher, dass das Ziel-Pulsar keine Milvus-Themen aus einer früheren Konfiguration enthält. Wenn dies Ihr erster Wechsel zu Pulsar ist, überspringen Sie diesen Hinweis; andernfalls bereinigen Sie zunächst verbleibende Milvus-Themen mit denselben Namen.

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

Schritt 4: Überprüfen Sie, ob die Umstellung abgeschlossen ist.

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

Bei einer erfolgreichen Umstellung wird Folgendes protokolliert: „ [mqTypeValue=pulsar] “.

Schritt 5: (Optional) Woodpecker-Daten bereinigen. Löschen Sie die Woodpecker-Daten auf MinIO/S3 (unter „ <rootPath>/wp/... “, typischerweise „ files/wp/... “) sowie die Woodpecker-Metadaten in etcd (etcdctl get woodpecker --prefix). Wenn Sie später wieder zu Woodpecker zurückwechseln möchten, bereinigen Sie diese Dateien zunächst.

Unterstützte Szenarien

Quell-MQZiel-MQHelmMilvus-Operator
Integriertes PulsarWoodpecker (MinIO)UnterstütztUnterstützt
Externer PulsarWoodpecker (MinIO)UnterstütztUnterstützt
Woodpecker (MinIO)Externer PulsarUnterstütztUnterstützt
PulsarWoodpecker (lokal)Unterstützt, aber nicht empfohlen (alle Pods benötigen ein gemeinsames Dateisystem)Nicht unterstützt