升級 Pulsar
本文將介紹如何將 Pulsar 從 V2 升級到 V3。
自 Milvus v2.5 起,milvus-helm和milvus-operator將默認使用 Pulsar V3,以修復一些錯誤和安全漏洞。 雖然 Milvus 2.5 與 Pulsar 2.x 相容,升級到 Pulsar V3 是可選的。為了增強穩定性和性能,我們建議升級到 Pulsar V3。
如果您喜歡使用 Pulsar V2 與 Milvus v2.5.x,請閱讀使用 Pulsar V2 與 Milvus v2.5.x。
升級過程需要一個短暫的服務中斷(通常需要大約幾分鐘到十幾分鐘,取決於數據量)。
在操作之前,您需要停止所有正在運行的用戶端向 Milvus 寫入數據。否則,寫入的資料可能會遺失。
本文假設 Milvus 安裝在命名空間
default
並命名為my-release
。請在執行從本頁複製的指令時,將參數變更為您自己的命名空間和發行版名稱。確保您的工作環境在 Kubernetes 叢集的上述命名空間下有權限,並安裝下列指令。
a.
kubectl
>= 1.20b.
helm
>= 3.14.0c.
cat
,grep
,awk
進行字串操作d.
curl
或Attu v2.4+用於與 milvus 管理 API 進行互動
路線圖
升級過程包括以下步驟:
步驟
本節提供在 Milvus 中將 Pulsar 從 V2 升級到 V3 的詳細步驟。
持久化 Pulsar 中未消耗的資料
在這個步驟中,您需要確保 Pulsar 中現有的資料已持久化到物件儲存服務。 有兩種方法可用,您可以選擇適合您需求的方法。
方法 1:使用 Attu
如果您的工作 Milvus 部署中只有少量的集合,且分段不多,您可以使用 Attu 將資料持久化到物件儲存服務。
選取所有資料庫中的每個集合,進入
Segments
面板,按一下Flush
按鈕。集合的區段面板
然後在彈出視窗時,再次按一下
Flush
。在 Attu 中的資料沖洗提示
然後等到所有資料集的 Persistent Segment 狀態都是
Flushed
。在 Attu 中檢視資料刷新狀態
方法 2:使用管理 API
將 Milvus proxy 的 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 pod 並刪除 Pulsar V2 部署。 有兩個獨立的部分可供使用:
適用於 Milvus Helm 使用者
如果您使用 Milvus Helm 圖表安裝 Milvus,請前往使用 Helm 刪除 Pulsar V2。
適用於 Milvus Operator 使用者
如果您已經使用 Milvus Operator 安裝 Milvus,請前往使用 Milvus Operator 刪除 Pulsar v2。
使用 Helm 刪除 Pulsar V2
如果你已經使用 Milvus Helm 圖表安裝 Milvus,按照以下步驟停止 Milvus pod 並刪除 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
List pulsar PVCs & PVs (Persistent Volume Claims & Persistent Volume) 需要清除
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
如果它輸出 NotFound 錯誤,也沒關係。它已被 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
使用 Milvus 操作員刪除 Pulsar V2
如果您已使用 Milvus Operator 安裝 Milvus,請依照下列步驟停止 Milvus Pod 並刪除 Pulsar V2 部署。
將目前的 Milvus Manifest 儲存至
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 & 儲存資料,並刪除 pulsar 資料,同時刪除 milvus。kubectl -n default patch milvus my-release --patch-file patch.yaml --type=merge
輸出。
milvus.milvus.io/my-release patched
停止 Milvus 並刪除脈衝星 V2。不用擔心 etcd 和 object 儲存資料卷,它們會被預設保留。
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 可能需要幾分鐘才能優雅地停止,操作員也可能需要幾分鐘才能刪除 pulsar 儲存空間。
milvus.milvus.io "my-release" deleted NAME MODE STATUS UPDATED AGE my-release cluster Deleting True 41m milvus.milvus.io "my-release" deleted
等待命令完成。
再次檢查 Milvus 資源是否已消失。
kubectl -n default get milvus my-release
輸出應該是
No resources found in default namespace.
啟動 Pulsar V3 和 Milvus
在這個步驟中,您需要啟動 Pulsar V3 和 Milvus pods。 有兩個獨立的部分可供使用:
給 Helm 使用者
如果您使用 Milvus Helm 圖表安裝 Milvus,請前往For Helm User。
給 Milvus 操作員使用者
如果您使用 Milvus Operator 安裝了 Milvus,請前往For Milvus Operator 使用者。
啟動 Pulsar V3 並使用 Helm
編輯上一步儲存的
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
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
安裝您的 milvus 版本與最新的 helm 圖表版本。helm -n default install my-release zilliztech/milvus --reset-values -f values.yaml
輸出
NAME: my-release LAST DEPLOYED: Fri Nov 22 15:31:27 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
檢查所有 Pod 是否都已排程並開始執行
kubectl -n default get pods
。所有 pod 可能需要幾分鐘才能啟動。
輸出如下。
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 Operator
編輯上一步儲存的
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
確保您的 Milvus Operator 已升級至 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 啟動 Milvus
kubectl create -f milvus.yaml
輸出
milvus.milvus.io/my-release created
檢查 Pods 是否全部排程並運行,
kubectl -n default get pods
。所有 Pod 可能需要幾分鐘才能啟動。
輸出如下。
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