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

milvus-logo
LFAI
主頁
  • 管理指南

協調器 HA

Milvus 架構所示,Milvus 由許多元件組成,並以分散式方式運作。在所有元件中,Milvus 透過擴充和縮小節點來確保工作人員的高可用性,讓協調器成為整個鏈中唯一的薄弱環節。

概述

在 2.2.3 版中,Milvus 為協調器實現了高可用性,使其在主動-備用模式下工作,減少可能導致服務不可用的單點故障 (SpoF)。

Coordinator HA 協調器 HA

上圖說明了協調器如何在主動待命模式下工作。當一對協調器啟動時,它們會使用自己的伺服器 ID 向 etcd 註冊,並競爭主動角色。成功從 etcd 租用主動角色的協調器將開始提供服務,而這對協調器中的另一個協調器將維持待命,觀察主動角色,並準備在主動協調器死亡時提供服務。

啟用協調器 HA

使用 Helm

若要啟動多個協調器,並讓它們以主動待命模式運作,您應該對values.yaml 檔案做以下變更。

  • xxxCoordinator.replicas 設為2
  • xxxCoordinator.activeStandby.enabled 設為true

以下程式碼片段以 RootCoord 為例。您也可以對其他類型的協調器做同樣的動作。

rootCoordinator:
  enabled: true
  # You can set the number of replicas greater than 1 only if you also need to set activeStandby.enabled to true.
  replicas: 2  # Otherwise, remove this configuration item.
  resources: {}
  nodeSelector: {}
  affinity: {}
  tolerations: []
  extraEnv: []
  heaptrack:
    enabled: false
  profiling:
    enabled: false  # Enable live profiling
  activeStandby:
    enabled: true  # Set this to true to have RootCoordinators work in active-standby mode.

使用 Docker

要啟動多個協調器,並讓它們以主動待命模式運作,您可以在用來啟動 Milvus 叢集的docker-compose 檔案中加入一些定義。

以下的程式碼片段以 RootCoord 為例。您也可以對其他類型的協調器做同樣的操作。

  rootcoord:
    container_name: milvus-rootcoord
    image: milvusdb/milvus:v2.2.3
    command: ["milvus", "run", "rootcoord"]
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
      PULSAR_ADDRESS: pulsar://pulsar:6650
      ROOT_COORD_ADDRESS: rootcoord:53100
      # add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
      ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
    depends_on:
      - "etcd"
      - "pulsar"
      - "minio"

#   add the following to have RootCoords work in active-standby mode
#   rootcoord-1:
#    container_name: milvus-rootcoord-1
#    image: milvusdb/milvus:v2.2.3
#    command: ["milvus", "run", "rootcoord"]
#    environment:
#      ETCD_ENDPOINTS: etcd:2379
#      MINIO_ADDRESS: minio:9000
#      PULSAR_ADDRESS: pulsar://pulsar:6650
#      ROOT_COORD_ADDRESS: rootcoord-1:53100
#      # add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
#      ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
#    depends_on:
#      - "etcd"
#      - "pulsar"
#      - "minio"

使用 Mac/Linux shell

要啟動多個協調器,並讓它們以主動待命模式工作,您可以

  1. 下載 Milvus 原始碼到您的本機磁碟機,並從原始碼啟動一個 Milvus 叢集,如下所示:

    sudo ./scripts/start_cluster.sh
    

    在此步驟結束時,Milvus 只以每種類型的一個協調器執行。

  2. 更新milvus.yaml ,變更每種類型的協調器的連接埠號。以下以rootCoord為例。

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. 啟動備用協調器。

    sudo nohup ./bin/milvus run rootcoord > /tmp/rootcoord2.log 2>&1 &
    

    在此步驟結束時,執行下列指令以驗證是否存在兩個協調器進程。

    ps aux|grep milvus
    

    輸出應該類似於

    > ps aux|grep milvus
    root        12813   0.7 0.2 410709648   82432   ??  S   5:18PM  0:33.28 ./bin/milvus run rootcoord
    root        12816   0.5 0.2 409487968   62352   ??  S   5:18PM  0:22.69 ./bin/milvus run proxy
    root        17739   0.1 0.3 410289872   91792 s003  SN  6:01PM  0:00.30 ./bin/milvus run rootcoord
    ...
    

    而備用協調器每十秒輸出一個記錄項目,如下所示:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. 關閉成對的主動協調器,並觀察備用協調器的行為。

    您可以發現備用協調器接管主動角色需要 60 秒。

    [2022/09/21 11:58:33.855 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord\" mod_revision:167 "]
    [2022/09/21 11:58:33.856 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord-15\" mod_revision:167 "]
    [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:683] ["stop watching ACTIVE key"]
    [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:655] ["start retrying to register as ACTIVE service..."]
    [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:641] ["register ACTIVE service successfully"] [ServerID=19]
    [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:690] ["quit STANDBY mode, this node will become ACTIVE"]
    [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:638] ["rootcoord switch from standby to active, activating"]
    [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:306] ["RootCoord Register Finished"]
    [2022/09/21 11:58:33.859 +08:00] [DEBUG] [rootcoord/service.go:148] ["RootCoord start done ..."]
    [2022/09/21 11:58:33.859 +08:00] [DEBUG] [components/root_coord.go:58] ["RootCoord successfully started"]
    

協調器 HA 預設為停用。您可以在 Milvus 設定檔中變更下列項目,手動啟用此功能。

限制

目前,主用與備用服務之間沒有強大的一致性保證。因此,備用協調器在接管主動角色時需要重新載入元資料。

Etcd 只會在目前的 session 超時後才釋放租約。會話超時預設為 60 秒。因此,從主動協調器死亡到備用協調器接管主動角色之間有 60 秒的間隔。

免費嘗試托管的 Milvus

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

開始使用
反饋

這個頁面有幫助嗎?