milvus-logo
LFAI
Casa
  • Guida all'amministrazione
    • Gestire le dipendenze

Aggiornamento di Pulsar

Questo articolo descrive la procedura per aggiornare il componente Pulsar da V2 a V3 se si dispone già di una distribuzione Milvus funzionante con Pulsar V2. Da Milvus v2.5, milvus-helm e milvus-operator utilizzeranno Pulsar V3 per impostazione predefinita per correggere alcuni bug e vulnerabilità di sicurezza. Mentre Milvus 2.5 è compatibile con Pulsar 2.x, l'aggiornamento a Pulsar V3 è opzionale. Per migliorare la stabilità e le prestazioni, si consiglia l'aggiornamento a Pulsar V3.

  1. Il processo di aggiornamento richiede una breve interruzione del servizio (di solito dura da pochi minuti a più di dieci minuti, a seconda della quantità di dati).

  2. Prima dell'operazione, è necessario interrompere la scrittura dei dati su Milvus da parte di tutti i client in esecuzione. In caso contrario, i dati scritti potrebbero andare persi.

  3. Questo articolo presuppone che Milvus sia installato nello spazio dei nomi default e si chiami my-release. Si prega di modificare i parametri con il proprio spazio dei nomi e il nome della release durante l'esecuzione dei comandi copiati da questa pagina.

  4. Assicuratevi che il vostro ambiente di lavoro abbia i permessi sotto il suddetto spazio dei nomi nel cluster Kubernetes e che i seguenti comandi siano installati.

    a. kubectl >= 1.20

    b. helm >= 3.14.0

    c. cat, grep, awk per le operazioni di manipolazione delle stringhe

    d. curl o Attu v2.4+ per interagire con l'API di gestione milvus.

Tabella di marcia

Il processo di aggiornamento prevede le seguenti fasi:

  1. Persistere i dati non consumati in pulsar.

  2. Arrestare Milvus e cancellare pulsar V2.

  3. Avviare Pulsar V3 e Milvus.

Procedure

Questa sezione fornisce le procedure dettagliate per l'aggiornamento di Pulsar da V2 a V3 in Milvus.

Persistere i dati non consumati in Pulsar

In questa fase è necessario assicurarsi che i dati esistenti in Pulsar siano stati persistiti nel servizio di archiviazione degli oggetti. Sono disponibili due approcci e si può scegliere quello più adatto alle proprie esigenze.

Approccio 1: utilizzo di Attu

Se nella vostra implementazione Milvus funzionante avete solo un piccolo numero di collezioni con pochi segmenti, potete usare Attu per persistere i dati nel servizio di archiviazione degli oggetti.

  1. Selezionate ogni raccolta in tutti i database, accedete al pannello Segments e fate clic sul pulsante Flush.

    Segment panel of a collection Pannello dei segmenti di una raccolta

  2. Quindi, alla comparsa del popup, fare nuovamente clic su Flush.

    Data flush prompt in Attu Richiesta di lavaggio dei dati in Attu

  3. Attendere quindi che gli stati di segmento persistenti di tutte le raccolte siano Flushed.

    View data flush status in Attu Visualizzazione dello stato di lavaggio dei dati in Attu

Approccio 2: Utilizzo dell'API di gestione

  1. Proxy della porta 9091 del proxy Milvus all'host locale per le operazioni successive.

    kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
    

    Uscita.

    [1] 8116
    Forwarding from 127.0.0.1:9091 -> 9091
    
    
  2. Salvare il Pid per una successiva pulizia.

    pid=8116
    
    
  3. Attivare l'azione di persistenza di tutti i dati inseriti da Pulsar a Ojbect Storage.

    curl 127.0.0.1:9091/api/v1/collections \
    |curl 127.0.0.1:9091/api/v1/persist -d @/dev/stdin\
    |jq '.flush_coll_segIDs'| jq '[.[] | .data[]]' | jq '{segmentIDs: (.)}' \
    > flushing_segments.json
    cat flushing_segments.json
    
    

    Uscita.

    {
      "segmentIDs": [
        454097953998181000,
        454097953999383600,
        454097953998180800
      ]
    }
    
    
  4. Controllare Tutti i segmenti trasferiti.

    cat flushing_segments.json|  curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin 
    
    

    Al termine, si dovrebbe vedere il seguente output

    {"status":{},"flushed":true}
    
    
  5. Interrompere il processo di backendground kubectl port-forward

    kill $pid
    
    

    Output.

    [1]  + 8116 terminated  kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091                      
    
    

Arresto di Milvus e cancellazione di Pulsar V2

In questo passaggio, è necessario arrestare il pod Milvus ed eliminare il deployment di Pulsar V2. Sono disponibili due sezioni separate:

Cancellare Pulsar V2 con Helm

Se avete installato Milvus usando il diagramma Milvus Helm, seguite i passaggi seguenti per arrestare il pod Milvus ed eliminare la distribuzione di Pulsar V2.

  1. Salvare i valori attuali della release di Milvus in values.yaml per recuperarli in seguito.

    helm -n default get values my-release -o yaml > values.yaml
    cat values.yaml
    
    
  2. Utilizzare il comando per arrestare Milvus e tutte le dipendenze. Non preoccupatevi dei volumi di dati, saranno mantenuti per impostazione predefinita.

    helm -n default uninstall my-release
    
    

    Uscita

    These resources were kept due to the resource policy:
    [PersistentVolumeClaim] my-release-minio
    
    release "my-release" uninstalled
    
    
  3. L'elenco dei PVC e dei PV di pulsar (Persistent Volume Claims e Persistent Volume) deve essere cancellato.

    kubectl -n default get pvc -lapp=pulsar,release=my-release |grep -v NAME |awk '{print $1}' > pulsar-pvcs.txt
    kubectl -n default get pvc -lapp=pulsar,release=my-release -o custom-columns=VOL:.spec.volumeName|grep -v VOL > pulsar-pvs.txt
    echo "Volume Claims:"
    cat pulsar-pvcs.txt
    echo "Volumes:"
    cat pulsar-pvs.txt
    
    

    Uscita

    Volume Claims:
    my-release-pulsar-bookie-journal-my-release-pulsar-bookie-0
    my-release-pulsar-bookie-journal-my-release-pulsar-bookie-1
    my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-0
    my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-1
    my-release-pulsar-zookeeper-data-my-release-pulsar-zookeeper-0
    Volumes:
    pvc-f590a4de-df31-4ca8-a424-007eac3c619a
    pvc-17b0e215-3e14-4d14-901e-1a1dda9ff5a3
    pvc-72f83c25-6ea1-45ee-9559-0b783f2c530b
    pvc-60dcb6e4-760d-46c7-af1a-d1fc153b0caf
    pvc-2da33f64-c053-42b9-bb72-c5d50779aa0a
    
    
  4. Controllare se l'elenco dei PVC di pulsar-pvcs.txt è tutto per Pulsar. Una volta confermato che non ci sono errori, eliminare i PVC.

    cat pulsar-pvcs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
    
    

    Uscita.

    persistentvolumeclaim "my-release-pulsar-bookie-journal-my-release-pulsar-bookie-0" deleted
    persistentvolumeclaim "my-release-pulsar-bookie-journal-my-release-pulsar-bookie-1" deleted
    persistentvolumeclaim "my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-0" deleted
    persistentvolumeclaim "my-release-pulsar-bookie-ledgers-my-release-pulsar-bookie-1" deleted
    persistentvolumeclaim "my-release-pulsar-zookeeper-data-my-release-pulsar-zookeeper-0" deleted
    
    
  5. (Opzionale) A seconda della classe di archiviazione che fornisce il PVC, potrebbe essere necessario rimuovere manualmente il PV.

    cat pulsar-pvs.txt |xargs -I {} kubectl -n default delete pvc {} --wait=false
    
    

    Non c'è problema se produce l'errore NotFound. È già stato eliminato dai controller di kubernetes.

    Error from server (NotFound): persistentvolumeclaims "pvc-f590a4de-df31-4ca8-a424-007eac3c619a" not found
    Error from server (NotFound): persistentvolumeclaims "pvc-17b0e215-3e14-4d14-901e-1a1dda9ff5a3" not found
    Error from server (NotFound): persistentvolumeclaims "pvc-72f83c25-6ea1-45ee-9559-0b783f2c530b" not found
    Error from server (NotFound): persistentvolumeclaims "pvc-60dcb6e4-760d-46c7-af1a-d1fc153b0caf" not found
    Error from server (NotFound): persistentvolumeclaims "pvc-2da33f64-c053-42b9-bb72-c5d50779aa0a" not found
    
    

Eliminare Pulsar V2 utilizzando Milvus Operator

Se avete installato Milvus usando Milvus Operator, seguite i passi seguenti per fermare il pod Milvus ed eliminare il deployment di Pulsar V2.

  1. Salvare il manifesto Milvus corrente in milvus.yaml per un uso successivo.

    kubectl -n default get milvus my-release -o yaml > milvus.yaml
    head milvus.yaml -n 20
    
    

    Output.

    apiVersion: milvus.io/v1beta1
    kind: Milvus
    metadata:
      annotations:
        milvus.io/dependency-values-merged: "true"
        milvus.io/pod-service-label-added: "true"
        milvus.io/querynode-current-group-id: "0"
      creationTimestamp: "2024-11-22T08:06:59Z"
      finalizers:
      - milvus.milvus.io/finalizer
      generation: 3
      labels:
        app: milvus
        milvus.io/operator-version: 1.1.2
    name: my-release
    namespace: default
    resourceVersion: "692217324"
    uid: 7a469ed0-9df1-494e-bd9a-340fac4305b5
    spec:
      components:
    
    
  2. Creare un file patch.yaml con il seguente contenuto.

    # a patch to retain etcd & storage data and delete pulsar data while delete milvus
    spec:
      dependencies:
        etcd:
          inCluster:
            deletionPolicy: Retain
            pvcDeletion: false
        storage:
          inCluster:
            deletionPolicy: Retain
            pvcDeletion: false
        pulsar:
          inCluster:
            deletionPolicy: Delete
            pvcDeletion: true
    
    
  3. Usare kubectl patch per conservare i dati di etcd e storage e cancellare i dati di pulsar mentre si cancella milvus.

    kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
    
    

    Output.

    milvus.milvus.io/my-release patched
    
    
  4. Fermare Milvus e cancellare pulsar V2. Non preoccupatevi dei volumi di dati di etcd e object storage, saranno mantenuti per impostazione predefinita.

    kubectl -n default delete milvus my-release --wait=false
    kubectl -n default get milvus my-release
    kubectl -n default delete milvus my-release --wait=true
    
    

    Uscita: Si noti che potrebbero essere necessari alcuni minuti perché milvus si arresti con grazia e perché l'operatore cancelli i volumi di pulsar.

    milvus.milvus.io "my-release" deleted
    NAME         MODE      STATUS     UPDATED   AGE
    my-release   cluster   Deleting   True      41m
    milvus.milvus.io "my-release" deleted
    
    

    Attendere il termine del comando.

  5. Verificare nuovamente che la risorsa Milvus sia stata eliminata.

    kubectl -n default get milvus my-release
    
    

    L'output dovrebbe essere simile a.

    No resources found in default namespace.
    
    

Avviare Pulsar V3 e Milvus

In questo passaggio è necessario avviare i pod Pulsar V3 e Milvus. Sono disponibili due sezioni separate:

Avviare Pulsar V3 e utilizzare Helm

  1. Modificare il sito values.yaml salvato nel passo precedente.

    # change the following:
    pulsar:
      enabled: false # set to false
      # you may also clean up rest fields under pulsar field
      # it's ok to keep them though.
    pulsarv3:
      enabled: true
      # append other values for pulsar v3 chart if needs
    
    
  2. Aggiornare il repo locale di helm

    helm repo add zilliztech https://zilliztech.github.io/milvus-helm
    helm repo update zilliztech
    
    

    Uscita

    "zilliztech" already exists with the same configuration, skipping
    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "zilliztech" chart repository
    Update Complete. ⎈Happy Helming!⎈
    
    
  3. Installare la release di Milvus con la versione più recente di helm chart utilizzando il file values.yaml modificato.

    helm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
    
    

    Uscita

    NAME: my-release
    LAST DEPLOYED: Fri Nov 22 15:31:27 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
    
  4. Controllare i pod per vedere se tutti sono stati pianificati e avviati con kubectl -n default get pods.

    Potrebbero essere necessari alcuni minuti perché tutti i pod vengano avviati.

    L'output è simile a.

    NAME                                          READY   STATUS      RESTARTS   AGE
    my-release-etcd-0                             1/1     Running     0          4m3s
    my-release-milvus-datanode-56487bc4bc-s6mbd   1/1     Running     0          4m5s
    my-release-milvus-indexnode-6476894d6-rv85d   1/1     Running     0          4m5s
    my-release-milvus-mixcoord-6d8875cb9c-67fcq   1/1     Running     0          4m4s
    my-release-milvus-proxy-7bc45d57c5-2qf8m      1/1     Running     0          4m4s
    my-release-milvus-querynode-77465747b-kt7f4   1/1     Running     0          4m4s
    my-release-minio-684ff4f5df-pnc97             1/1     Running     0          4m5s
    my-release-pulsarv3-bookie-0                  1/1     Running     0          4m3s
    my-release-pulsarv3-bookie-1                  1/1     Running     0          4m3s
    my-release-pulsarv3-bookie-2                  1/1     Running     0          4m3s
    my-release-pulsarv3-bookie-init-6z4tk         0/1     Completed   0          4m1s
    my-release-pulsarv3-broker-0                  1/1     Running     0          4m2s
    my-release-pulsarv3-broker-1                  1/1     Running     0          4m2s
    my-release-pulsarv3-proxy-0                   1/1     Running     0          4m2s
    my-release-pulsarv3-proxy-1                   1/1     Running     0          4m2s
    my-release-pulsarv3-pulsar-init-wvqpc         0/1     Completed   0          4m1s
    my-release-pulsarv3-recovery-0                1/1     Running     0          4m3s
    my-release-pulsarv3-zookeeper-0               1/1     Running     0          4m2s
    my-release-pulsarv3-zookeeper-1               1/1     Running     0          4m2s
    my-release-pulsarv3-zookeeper-2               1/1     Running     0          4m2s
    
    

Avviare Pulsar V3 e utilizzare Milvus Operator

  1. Modificare il file milvus.yaml salvato nel passo precedente.

    # change the followings fields:
    apiVersion: milvus.io/v1beta1
    kind: Milvus
    metadata:
      annotations: null # this field should be removed or set to null
      resourceVersion: null # this field should be removed or set to null
      uid: null # this field should be removed or set to null
    spec:
      dependencies:
        pulsar:
          inCluster:
            chartVersion: pulsar-v3
            # delete all previous values for pulsar v2 and set it to null.
            # you may add additional values here for pulsar v3 if you're sure about it.
            values: null
    
    
  2. Assicurarsi che Milvus Operator sia aggiornato alla versione v1.1.2 o successiva.

    helm repo add milvus-operator https://zilliztech.github.io/milvus-operator
    helm repo update milvus-operator
    helm -n milvus-operator upgrade milvus-operator milvus-operator/milvus-operator
    
    

    Utilizzare il comando per avviare milvus con pulsar v3

    kubectl create -f milvus.yaml
    
    

    Uscita

    milvus.milvus.io/my-release created
    
    
  3. Controllare i pod per vedere se tutti sono stati programmati ed eseguiti con kubectl -n default get pods.

    Potrebbero essere necessari alcuni minuti perché tutti i pod vengano avviati.

    L'output è simile a.

    NAME                                            READY   STATUS      RESTARTS   AGE
    my-release-etcd-0                               1/1     Running     0          65m
    my-release-milvus-datanode-57fd59ff58-5mdrk     1/1     Running     0          93s
    my-release-milvus-indexnode-67867c6b9b-4wsbw    1/1     Running     0          93s
    my-release-milvus-mixcoord-797849f9bb-sf8z5     1/1     Running     0          93s
    my-release-milvus-proxy-5d5bf98445-c55m6        1/1     Running     0          93s
    my-release-milvus-querynode-0-64797f5c9-lw4rh   1/1     Running     0          92s
    my-release-minio-79476ccb49-zvt2h               1/1     Running     0          65m
    my-release-pulsar-bookie-0                      1/1     Running     0          5m10s
    my-release-pulsar-bookie-1                      1/1     Running     0          5m10s
    my-release-pulsar-bookie-2                      1/1     Running     0          5m10s
    my-release-pulsar-bookie-init-v8fdj             0/1     Completed   0          5m11s
    my-release-pulsar-broker-0                      1/1     Running     0          5m11s
    my-release-pulsar-broker-1                      1/1     Running     0          5m10s
    my-release-pulsar-proxy-0                       1/1     Running     0          5m11s
    my-release-pulsar-proxy-1                       1/1     Running     0          5m10s
    my-release-pulsar-pulsar-init-5lhx7             0/1     Completed   0          5m11s
    my-release-pulsar-recovery-0                    1/1     Running     0          5m11s
    my-release-pulsar-zookeeper-0                   1/1     Running     0          5m11s
    my-release-pulsar-zookeeper-1                   1/1     Running     0          5m10s
    my-release-pulsar-zookeeper-2                   1/1     Running     0          5m10s
    
    

Tradotto daDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?