milvus-logo
LFAI
フロントページへ
  • 管理ガイド

コーディネータHA

Milvusアーキテクチャに示すように、Milvusは多くのコンポーネントで構成され、それらが分散して動作する。すべてのコンポーネントの中で、Milvusはノードのスケールアップとスケールアウトを通じてワーカーの高可用性を確保し、コーディネータを唯一の弱点としています。

概要

2.2.3リリースでは、Milvusはコーディネータに高可用性を実装し、アクティブ-スタンバイモードで動作するようにすることで、サービスが利用できなくなる可能性のある単一障害点(SPoF)を軽減します。

Coordinator HA コーディネーターの高可用性

上図は、コーディネータがアクティブ・スタンバイ・モードでどのように動作するかを示しています。コーディネーターのペアが開始すると、サーバーIDを使用してetcdに登録し、アクティブな役割を争います。etcdからアクティブな役割をリースすることに成功したコーディネータがサービスを開始し、ペアのもう一方のコーディネータはスタンバイ状態のままアクティブな役割を監視し、アクティブなコーディネータが死亡した場合にサービスを提供できるようにします。

コーディネーターのHAを有効にする

Helmを使用する

複数のコーディネーターを起動し、アクティブ-スタンバイモードで動作させるには、values.yaml ファイルを次のように変更します。

  • xxxCoordinator.replicas2 に設定します。
  • xxxCoordinator.activeStandby.enabledtrue に設定します。

以下のコードスニペットでは、例として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シェル

複数のコーディネータを起動し、アクティブスタンバイで動作させるには、次のようにします。

  1. Milvusのソースコードをローカルドライブにダウンロードし、以下のようにソースコードからMilvusクラスタを起動します:

    sudo ./scripts/start_cluster.sh
    

    このステップの最後では、Milvusは各タイプの1つのコーディネータのみで実行されます。

  2. milvus.yaml を更新して、各タイプのコーディネータのポート番号を変更します。以下では例としてrootCoordを使用します。

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. スタンバイ・コーディネータを起動します。

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

    この手順の最後に、以下のコマンドを実行して、2 つのコーディネータ・プロセスが存在することを確認します。

    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
    ...
    

    また、スタンバイ・コーディネーターは、次のように 10 秒ごとにログ・エントリーを出力します:

    [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 は、現在のセッションがタイムアウトした後にのみリースを解放します。セッションタイムアウトのデフォルトは60秒です。したがって、アクティブなコーディネータが死亡してからスタンバイ・コーディネータがアクティブな役割を引き継ぐまでの間には60秒の間隔があります。

翻訳DeepLogo

Try Managed Milvus for Free

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

Get Started
フィードバック

このページは役に立ちましたか ?