milvus-logo
LFAI
홈페이지
  • 관리 가이드
    • 종속성 관리

Pulsar 업그레이드

이 문서에서는 이미 Pulsar V2로 작동 중인 Milvus 배포가 있는 경우 Pulsar 구성 요소를 V2에서 V3로 업그레이드하는 절차에 대해 설명합니다.

Milvus v2.5부터는 일부 버그와 보안 취약점을 수정하기 위해 기본적으로 milvus-helmmilvus-operator가 Pulsar V3를 사용합니다. Milvus 2.5는 Pulsar 2.x와 호환되지만, Pulsar V3로 업그레이드하는 것은 선택 사항입니다. 안정성과 성능을 향상하려면 Pulsar V3로 업그레이드하는 것이 좋습니다.

Milvus v2.5.x와 함께 Pulsar V2를 사용하려면 Milvus v2.5.x와 함께 Pulsar V2 사용하기를 참조하세요.

  1. 업그레이드 과정에서 잠시 서비스가 중단될 수 있습니다(일반적으로 데이터 양에 따라 약 몇 분에서 10분 이상 소요됨).

  2. 작업 전에 실행 중인 모든 클라이언트가 Milvus에 데이터를 쓰지 못하도록 중지해야 합니다. 그렇지 않으면 기록된 데이터가 손실될 수 있습니다.

  3. 이 문서에서는 Milvus가 네임스페이스 default 에 설치되어 있고 이름이 my-release 이라고 가정합니다. 이 페이지에서 복사한 명령을 실행하는 동안 매개변수를 사용자 네임스페이스와 릴리스 이름으로 변경하세요.

  4. 작업 환경에 위에서 언급한 네임스페이스에 대한 권한이 있고 다음 명령어가 설치되어 있는지 확인합니다.

    a. kubectl >= 1.20

    b. helm >= 3.14.0

    c. cat, grep, awk 문자열 조작 작업용

    d. curl 또는 Attu v2.4 이상, 밀버스 관리 API와 상호 작용하기 위해

로드맵

업그레이드 프로세스에는 다음 단계가 포함됩니다:

  1. 펄서에서 소비되지 않는 데이터를 유지합니다.

  2. Milvus를 중지하고 pulsar V2를 삭제합니다.

  3. Pulsar V3 및 Milvus를 시작합니다.

절차

이 섹션에서는 Milvus에서 Pulsar를 V2에서 V3로 업그레이드하는 자세한 절차를 설명합니다.

Pulsar에서 소비되지 않는 데이터 유지

이 단계에서는 Pulsar의 기존 데이터가 오브젝트 스토리지 서비스에 보존되어 있는지 확인해야 합니다. 두 가지 접근 방식을 사용할 수 있으며, 필요에 맞는 방식을 선택할 수 있습니다.

접근 방식 1: Attu 사용

작동 중인 Milvus 배포에 세그먼트 수가 많지 않은 적은 수의 컬렉션만 있는 경우, Attu를 사용하여 데이터를 객체 스토리지 서비스에 지속시킬 수 있습니다.

  1. 모든 데이터베이스에서 모든 컬렉션을 선택하고 Segments 패널로 이동하여 Flush 버튼을 클릭합니다.

    Segment panel of a collection 컬렉션의 세그먼트 패널

  2. 그런 다음 팝업이 나타나면 Flush 을 다시 클릭합니다.

    Data flush prompt in Attu Attu의 데이터 플러시 프롬프트

  3. 그런 다음 모든 컬렉션의 영구 세그먼트 상태가 Flushed 이 될 때까지 기다립니다.

    View data flush status in Attu Attu에서 데이터 플러시 상태 보기

접근 방식 2: 관리 API 사용

  1. 후속 작업을 위해 Milvus 프록시 포트 9091을 로컬 호스트에 프록시합니다.

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

    출력.

    [1] 8116
    Forwarding from 127.0.0.1:9091 -> 9091
    
    
  2. 나중에 정리할 수 있도록 Pid를 저장합니다.

    pid=8116
    
    
  3. 삽입된 모든 데이터를 Pulsar에서 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
    
    

    출력.

    {
      "segmentIDs": [
        454097953998181000,
        454097953999383600,
        454097953998180800
      ]
    }
    
    
  4. 모든 세그먼트 플러시됨을 확인합니다.

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

    완료되면 다음과 같은 출력이 표시됩니다.

    {"status":{},"flushed":true}
    
    
  5. 백엔드 kubectl port-forward 프로세스 중지

    kill $pid
    
    

    출력.

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

Milvus를 중지하고 Pulsar V2를 삭제합니다.

이 단계에서는 Milvus 파드를 중지하고 Pulsar V2 배포를 삭제해야 합니다. 두 가지 섹션이 있습니다:

헬름을 사용하여 Pulsar V2 삭제하기

Milvus 헬름 차트를 사용하여 Milvus를 설치한 경우, 아래 단계에 따라 Milvus 파드를 중지하고 Pulsar V2 배포를 삭제하세요.

  1. 나중에 복구할 수 있도록 현재 Milvus 릴리스 값을 values.yaml 에 저장합니다.

    helm -n default get values my-release -o yaml > values.yaml
    cat values.yaml
    
    
  2. 명령을 사용하여 Milvus와 모든 종속성을 중지합니다. 데이터 볼륨은 기본적으로 유지되므로 걱정하지 마세요.

    helm -n default uninstall my-release
    
    

    출력

    These resources were kept due to the resource policy:
    [PersistentVolumeClaim] my-release-minio
    
    release "my-release" uninstalled
    
    
  3. 펄서 PVC 및 PV(퍼시스턴트 볼륨 클레임 및 퍼시스턴트 볼륨) 목록을 지워야 합니다.

    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
    
    

    출력

    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. pulsar-pvcs.txt 의 PVC 목록이 모두 Pulsar에 대한 것인지 확인합니다. 오류가 없는 것을 확인했다면 PVC를 삭제합니다.

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

    출력.

    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. (선택 사항) PVC를 제공하는 스토리지 클래스에 따라 PV를 수동으로 제거해야 할 수도 있습니다.

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

    찾을 수 없음 오류가 출력되어도 괜찮습니다. 이미 쿠버네티스 컨트롤러에 의해 삭제되었기 때문입니다.

    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
    
    

Milvus 오퍼레이터를 사용하여 Pulsar V2 삭제하기

Milvus Operator를 사용하여 Milvus를 설치한 경우, 아래 단계에 따라 Milvus 파드를 중지하고 Pulsar V2 배포를 삭제하세요.

  1. 나중에 사용할 수 있도록 현재 Milvus 매니페스트를 milvus.yaml 에 저장합니다.

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

    출력.

    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. 다음 내용으로 patch.yaml 파일을 생성합니다.

    # 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. kubectl patch 을 사용하여 밀버스를 삭제하는 동안 etcd 및 스토리지 데이터를 유지하고 펄서 데이터를 삭제합니다.

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

    출력.

    milvus.milvus.io/my-release patched
    
    
  4. 밀버스를 중지하고 펄서 V2를 삭제합니다. etcd 및 오브젝트 스토리지 데이터 볼륨은 기본적으로 유지되므로 걱정하지 마세요.

    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
    
    

    출력: 밀버스가 정상적으로 중지되고 운영자가 펄서 볼륨을 삭제하는 데 몇 분 정도 걸릴 수 있습니다.

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

    명령이 완료될 때까지 기다리세요.

  5. 밀버스 리소스가 사라졌는지 다시 확인합니다.

    kubectl -n default get milvus my-release
    
    

    출력은 다음과 같아야 합니다.

    No resources found in default namespace.
    
    

Pulsar V3 및 Milvus 시작

이 단계에서는 Pulsar V3와 Milvus 파드를 시작해야 합니다. 두 개의 별도 섹션을 사용할 수 있습니다:

  • 헬름 사용자의 경우

    밀버스 헬름 차트를 사용하여 밀버스를 설치한 경우, 헬름 사용자의 경우로 이동합니다.

  • 밀버스 오퍼레이터 사용자의 경우

    밀버스 오퍼레이터를 사용하여 밀버스를 설치한 경우, 밀버스 오퍼레이터 사용자의 경우로 이동합니다.

Pulsar V3를 시작하고 헬름을 사용합니다.

  1. 이전 단계에서 저장한 values.yaml 을 편집합니다.

    # 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. 로컬 헬름 리포지토리를 업데이트합니다.

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

    출력

    "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. 편집한 values.yaml 을 사용하여 최신 헬름 차트 버전으로 밀버스 릴리스를 설치합니다.

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

    Output

    NAME: my-release
    LAST DEPLOYED: Fri Nov 22 15:31:27 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
    
  4. 파드가 모두 스케줄링되고 kubectl -n default get pods 로 실행되는지 확인한다.

    모든 파드가 시작되는 데 몇 분 정도 걸릴 수 있다.

    출력은 다음과 같습니다.

    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
    
    

Pulsar V3를 시작하고 밀버스 오퍼레이터를 사용합니다.

  1. 이전 단계에서 저장한 milvus.yaml 을 편집합니다.

    # 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. 밀버스 오퍼레이터가 v1.1.2 이상 버전으로 업그레이드되었는지 확인합니다.

    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
    
    

    명령을 사용하여 Pulsar V3로 밀버스 시작하기

    kubectl create -f milvus.yaml
    
    

    출력

    milvus.milvus.io/my-release created
    
    
  3. 모든 파드가 kubectl -n default get pods 로 스케줄링되고 실행되는지 확인합니다.

    모든 파드가 시작되려면 몇 분 정도 걸릴 수 있습니다.

    출력은 다음과 같습니다.

    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
    
    

번역DeepL

Try Managed Milvus for Free

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

Get Started
피드백

이 페이지가 도움이 되었나요?