Pulsar 업그레이드
이 문서에서는 이미 Pulsar V2로 작동 중인 Milvus 배포가 있는 경우 Pulsar 구성 요소를 V2에서 V3로 업그레이드하는 절차에 대해 설명합니다.
Milvus v2.5부터는 일부 버그와 보안 취약점을 수정하기 위해 기본적으로 milvus-helm 및 milvus-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 사용하기를 참조하세요.
업그레이드 과정에서 잠시 서비스가 중단될 수 있습니다(일반적으로 데이터 양에 따라 약 몇 분에서 10분 이상 소요됨).
작업 전에 실행 중인 모든 클라이언트가 Milvus에 데이터를 쓰지 못하도록 중지해야 합니다. 그렇지 않으면 기록된 데이터가 손실될 수 있습니다.
이 문서에서는 Milvus가 네임스페이스
default
에 설치되어 있고 이름이my-release
이라고 가정합니다. 이 페이지에서 복사한 명령을 실행하는 동안 매개변수를 사용자 네임스페이스와 릴리스 이름으로 변경하세요.작업 환경에 위에서 언급한 네임스페이스에 대한 권한이 있고 다음 명령어가 설치되어 있는지 확인합니다.
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
문자열 조작 작업용d.
curl
또는 Attu v2.4 이상, 밀버스 관리 API와 상호 작용하기 위해
로드맵
업그레이드 프로세스에는 다음 단계가 포함됩니다:
절차
이 섹션에서는 Milvus에서 Pulsar를 V2에서 V3로 업그레이드하는 자세한 절차를 설명합니다.
Pulsar에서 소비되지 않는 데이터 유지
이 단계에서는 Pulsar의 기존 데이터가 오브젝트 스토리지 서비스에 보존되어 있는지 확인해야 합니다. 두 가지 접근 방식을 사용할 수 있으며, 필요에 맞는 방식을 선택할 수 있습니다.
접근 방식 1: Attu 사용
작동 중인 Milvus 배포에 세그먼트 수가 많지 않은 적은 수의 컬렉션만 있는 경우, Attu를 사용하여 데이터를 객체 스토리지 서비스에 지속시킬 수 있습니다.
모든 데이터베이스에서 모든 컬렉션을 선택하고
Segments
패널로 이동하여Flush
버튼을 클릭합니다.컬렉션의 세그먼트 패널
그런 다음 팝업이 나타나면
Flush
을 다시 클릭합니다.Attu의 데이터 플러시 프롬프트
그런 다음 모든 컬렉션의 영구 세그먼트 상태가
Flushed
이 될 때까지 기다립니다.Attu에서 데이터 플러시 상태 보기
접근 방식 2: 관리 API 사용
후속 작업을 위해 Milvus 프록시 포트 9091을 로컬 호스트에 프록시합니다.
kubectl -n default port-forward deploy/my-release-milvus-proxy 9091:9091 &
출력.
[1] 8116 Forwarding from 127.0.0.1:9091 -> 9091
나중에 정리할 수 있도록 Pid를 저장합니다.
pid=8116
삽입된 모든 데이터를 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 ] }
모든 세그먼트 플러시됨을 확인합니다.
cat flushing_segments.json| curl -X GET 127.0.0.1:9091/api/v1/persist/state -d @/dev/stdin
완료되면 다음과 같은 출력이 표시됩니다.
{"status":{},"flushed":true}
백엔드
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 배포를 삭제해야 합니다. 두 가지 섹션이 있습니다:
밀버스 헬름 사용자의 경우
Milvus 헬름 차트를 사용하여 Milvus를 설치한 경우, 헬름을 사용하여 Pulsar v2 삭제로 이동합니다.
밀버스 오퍼레이터 사용자의 경우
밀버스 오퍼레이터를 사용하여 밀버스를 설치한 경우, 밀버스 오퍼레이터를 사용하여 Pulsar v2 삭제로 이동합니다.
헬름을 사용하여 Pulsar V2 삭제하기
Milvus 헬름 차트를 사용하여 Milvus를 설치한 경우, 아래 단계에 따라 Milvus 파드를 중지하고 Pulsar V2 배포를 삭제하세요.
나중에 복구할 수 있도록 현재 Milvus 릴리스 값을
values.yaml
에 저장합니다.helm -n default get values my-release -o yaml > values.yaml cat values.yaml
명령을 사용하여 Milvus와 모든 종속성을 중지합니다. 데이터 볼륨은 기본적으로 유지되므로 걱정하지 마세요.
helm -n default uninstall my-release
출력
These resources were kept due to the resource policy: [PersistentVolumeClaim] my-release-minio release "my-release" uninstalled
펄서 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
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
(선택 사항) 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 배포를 삭제하세요.
나중에 사용할 수 있도록 현재 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:
다음 내용으로
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
kubectl patch
을 사용하여 밀버스를 삭제하는 동안 etcd 및 스토리지 데이터를 유지하고 펄서 데이터를 삭제합니다.kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
출력.
milvus.milvus.io/my-release patched
밀버스를 중지하고 펄서 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
명령이 완료될 때까지 기다리세요.
밀버스 리소스가 사라졌는지 다시 확인합니다.
kubectl -n default get milvus my-release
출력은 다음과 같아야 합니다.
No resources found in default namespace.
Pulsar V3 및 Milvus 시작
이 단계에서는 Pulsar V3와 Milvus 파드를 시작해야 합니다. 두 개의 별도 섹션을 사용할 수 있습니다:
헬름 사용자의 경우
밀버스 헬름 차트를 사용하여 밀버스를 설치한 경우, 헬름 사용자의 경우로 이동합니다.
밀버스 오퍼레이터 사용자의 경우
밀버스 오퍼레이터를 사용하여 밀버스를 설치한 경우, 밀버스 오퍼레이터 사용자의 경우로 이동합니다.
Pulsar V3를 시작하고 헬름을 사용합니다.
이전 단계에서 저장한
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
로컬 헬름 리포지토리를 업데이트합니다.
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!⎈
편집한
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
파드가 모두 스케줄링되고
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를 시작하고 밀버스 오퍼레이터를 사용합니다.
이전 단계에서 저장한
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
밀버스 오퍼레이터가 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
모든 파드가
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