🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 管理指南
    • 管理相依性
  • Home
  • Docs
  • 管理指南

  • 管理相依性

  • 將 Pulsa 與 Milvus 搭配使用

  • 升級至 Pulsar v3

升級 Pulsar

本文將介紹如何將 Pulsar 從 V2 升級到 V3。

自 Milvus v2.5 起,milvus-helmmilvus-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

  1. 升級過程需要一個短暫的服務中斷(通常需要大約幾分鐘到十幾分鐘,取決於數據量)。

  2. 在操作之前,您需要停止所有正在運行的用戶端向 Milvus 寫入數據。否則,寫入的資料可能會遺失。

  3. 本文假設 Milvus 安裝在命名空間default 並命名為my-release 。請在執行從本頁複製的指令時,將參數變更為您自己的命名空間和發行版名稱。

  4. 確保您的工作環境在 Kubernetes 叢集的上述命名空間下有權限,並安裝下列指令。

    a.kubectl >= 1.20

    b.helm >= 3.14.0

    c.cat,grep,awk 進行字串操作

    d.curlAttu v2.4+用於與 milvus 管理 API 進行互動

路線圖

升級過程包括以下步驟:

  1. 持久保存 pulsar 中未消耗的資料。

  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. 然後等到所有資料集的 Persistent Segment 狀態都是Flushed

    View data flush status in Attu 在 Attu 中檢視資料刷新狀態

方法 2:使用管理 API

  1. 將 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
    
    
  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 pod 並刪除 Pulsar V2 部署。 有兩個獨立的部分可供使用:

使用 Helm 刪除 Pulsar V2

如果你已經使用 Milvus Helm 圖表安裝 Milvus,按照以下步驟停止 Milvus pod 並刪除 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. 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
    
    
  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
    
    

    如果它輸出 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 部署。

  1. 將目前的 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:
    
    
  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 & 儲存資料,並刪除 pulsar 資料,同時刪除 milvus。

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

    輸出。

    milvus.milvus.io/my-release patched
    
    
  4. 停止 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
    
    

    等待命令完成。

  5. 再次檢查 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

  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

    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 安裝您的 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
    
    
  4. 檢查所有 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

  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. 確保您的 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
    
    
  3. 檢查 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
    
    

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?