milvus-logo
LFAI
Home
  • Guia de Administração
    • Gerir dependências

Atualizando o Pulsar

Este artigo descreve o procedimento para atualizar seu componente Pulsar de V2 para V3 se você já tem uma implantação Milvus funcionando com Pulsar V2. Desde Milvus v2.5, milvus-helm e milvus-operator usarão Pulsar V3 por padrão para corrigir alguns bugs e vulnerabilidades de segurança. Enquanto Milvus 2.5 é compatível com Pulsar 2.x, a atualização para Pulsar V3 é opcional. Para maior estabilidade e desempenho, recomendamos a atualização para a Pulsar V3.

  1. O processo de atualização requer uma breve interrupção de serviço (geralmente leva de alguns minutos a mais de dez minutos, dependendo da quantidade de dados).

  2. Antes da operação, é necessário impedir que todos os clientes em execução escrevam dados no Milvus. Caso contrário, os dados escritos podem perder-se.

  3. Este artigo pressupõe que o Milvus está instalado no espaço de nomes default e tem o nome my-release. Por favor, altere os parâmetros para o seu próprio espaço de nomes e nome de lançamento enquanto executa os comandos copiados desta página.

  4. Certifique-se de que o seu ambiente de trabalho tem permissões no namespace acima mencionado no cluster Kubernetes e que os seguintes comandos estão instalados.

    a. kubectl >= 1.20

    b. helm >= 3.14.0

    c. cat, grep, awk para operações de manipulação de cadeia de caracteres

    d. curl ou Attu v2.4+ para interagir com a API de gestão milvus

Roteiro

O processo de atualização inclui os seguintes passos:

  1. Persistir os dados não consumidos no pulsar.

  2. Parar o Milvus e apagar o pulsar V2.

  3. Iniciar o Pulsar V3 e o Milvus.

Procedimentos

Esta secção fornece os procedimentos detalhados para atualizar a Pulsar de V2 para V3 no Milvus.

Persistir os dados não consumidos no Pulsar

Neste passo, é necessário garantir que os dados existentes no Pulsar foram persistidos no serviço de armazenamento de objetos. Existem duas abordagens disponíveis, e você pode escolher a que melhor se adapta às suas necessidades.

Abordagem 1: usando o Attu

Se você tiver apenas um pequeno número de coleções em sua implantação Milvus em funcionamento com poucos segmentos, você pode usar o Attu para persistir os dados no serviço de armazenamento de objetos.

  1. Selecione todas as colecções em todas as suas bases de dados, aceda ao painel Segments, clique no botão Flush

    Segment panel of a collection Painel de segmentos de uma coleção

  2. Em seguida, na janela pop-up, clique novamente em Flush.

    Data flush prompt in Attu Aviso de descarga de dados no Attu

  3. Em seguida, aguarde até que todos os estados de segmento persistente das colecções sejam Flushed.

    View data flush status in Attu Exibir o status da descarga de dados no Attu

Abordagem 2: Utilizar a API de gestão

  1. Porta proxy 9091 do proxy Milvus para o host local para operações subsequentes.

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

    Saída.

    [1] 8116
    Forwarding from 127.0.0.1:9091 -> 9091
    
    
  2. Guardar o Pid para limpeza posterior.

    pid=8116
    
    
  3. Acionar a ação de persistir todos os dados inseridos do Pulsar para o 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
    
    

    Saída.

    {
      "segmentIDs": [
        454097953998181000,
        454097953999383600,
        454097953998180800
      ]
    }
    
    
  4. Verifique Todos os segmentos liberados.

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

    Quando estiver concluído, você deve ver a seguinte saída

    {"status":{},"flushed":true}
    
    
  5. Interrompa o processo de backendground kubectl port-forward

    kill $pid
    
    

    Saída.

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

Parar o Milvus e excluir o Pulsar V2

Nesta etapa, você precisa parar o pod do Milvus e excluir a implantação do Pulsar V2. Há duas seções separadas disponíveis:

Eliminar o Pulsar V2 utilizando o Helm

Se você instalou o Milvus usando o gráfico Milvus Helm, siga as etapas abaixo para interromper o pod do Milvus e excluir a implantação do Pulsar V2.

  1. Salve os valores atuais da versão do Milvus em values.yaml para recuperação posterior.

    helm -n default get values my-release -o yaml > values.yaml
    cat values.yaml
    
    
  2. Use o comando para parar o Milvus e todas as dependências. Não se preocupe com os volumes de dados, eles serão mantidos por padrão.

    helm -n default uninstall my-release
    
    

    Saída

    These resources were kept due to the resource policy:
    [PersistentVolumeClaim] my-release-minio
    
    release "my-release" uninstalled
    
    
  3. Lista pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) precisa ser limpa

    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
    
    

    Saída

    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. Verifique se a lista de PVCs de pulsar-pvcs.txt é toda para a Pulsar. Depois de confirmar que não há erro, exclua os PVCs.

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

    Saída.

    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. (Opcional) Dependendo da classe de armazenamento que fornece o PVC, também pode ser necessário remover manualmente o PV.

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

    Não há problema se ele emitir erros NotFound. Ele já foi excluído pelos controladores do 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
    
    

Excluir o Pulsar V2 usando o Milvus Operator

Se você instalou o Milvus usando o Milvus Operator, siga as etapas abaixo para interromper o pod do Milvus e excluir a implantação do Pulsar V2.

  1. Salve o Manifesto do Milvus atual em milvus.yaml para uso posterior.

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

    Saída.

    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. Crie um arquivo patch.yaml com o seguinte conteúdo.

    # 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. Utilize kubectl patch para manter os dados do etcd e do armazenamento e eliminar os dados do pulsar enquanto elimina o milvus.

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

    Saída.

    milvus.milvus.io/my-release patched
    
    
  4. Pare o Milvus e apague o pulsar V2. Não se preocupe com os volumes de dados do etcd e do armazenamento de objetos, eles serão mantidos por padrão.

    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
    
    

    Saída: Observe que pode levar alguns minutos para o milvus parar graciosamente e para o operador excluir os volumes do pulsar.

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

    Espere até que o comando termine.

  5. Verifique novamente para ver se o recurso Milvus desapareceu

    kubectl -n default get milvus my-release
    
    

    A saída deve ser como.

    No resources found in default namespace.
    
    

Iniciar o Pulsar V3 e o Milvus

Nesta etapa, você precisa iniciar os pods Pulsar V3 e Milvus. Há duas seções separadas disponíveis:

  • Para o utilizador do Helm

    Se instalou o Milvus usando o gráfico do Milvus Helm, vá para For Helm User.

  • Para utilizadores do Milvus Operator

    Se instalou o Milvus usando a carta Milvus Operator, vá para Para o utilizador do Milvus Operator.

Inicie o Pulsar V3 e use o Helm

  1. Edite o values.yaml salvo no Passo anterior.

    # 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. Atualize seu repositório helm local

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

    Saída

    "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. Instale sua versão do milvus com a mais nova versão do helm chart usando o values.yaml editado

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

    Saída

    NAME: my-release
    LAST DEPLOYED: Fri Nov 22 15:31:27 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
    
  4. Verifique os pods para ver se todos eles são agendados e executados com kubectl -n default get pods.

    Pode levar alguns minutos para que todos os pods sejam iniciados

    O resultado é semelhante.

    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
    
    

Iniciar o Pulsar V3 e usar o Milvus Operator

  1. Editar o milvus.yaml guardado no passo anterior.

    # 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. Certifique-se de que o seu Milvus Operator está atualizado para a versão v1.1.2 ou posterior

    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
    
    

    Use o comando para iniciar o milvus com o pulsar v3

    kubectl create -f milvus.yaml
    
    

    Saída

    milvus.milvus.io/my-release created
    
    
  3. Verifique os pods para ver se todos eles são agendados e executados com kubectl -n default get pods.

    Pode demorar alguns minutos para que todos os pods sejam iniciados.

    A saída é semelhante.

    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
    
    

Traduzido porDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Esta página foi útil?