milvus-logo
LFAI
Home
  • Leitfaden für die Verwaltung

Koordinator HA

Wie in der Milvus-Architektur dargestellt, besteht Milvus aus vielen Komponenten und lässt sie verteilt arbeiten. Von allen Komponenten sorgt Milvus für die hohe Verfügbarkeit der Arbeiter durch das Hoch- und Runterskalieren der Knoten, wobei die Koordinatoren das einzige schwache Glied in der Kette sind.

Überblick

In der Version 2.2.3 implementiert Milvus Hochverfügbarkeit für Koordinatoren, um sie im Aktiv-Standby-Modus arbeiten zu lassen und so mögliche Single Points of Failure (SPoFs) zu entschärfen, die zur Nichtverfügbarkeit von Diensten führen können.

Coordinator HA Koordinator HA

Die obige Abbildung veranschaulicht, wie Koordinatoren im Active-Standby-Modus arbeiten. Wenn ein Koordinatorenpaar startet, registrieren sie sich mit ihrer Server-ID bei etcd und konkurrieren um die aktive Rolle. Der Koordinator, dem es gelingt, die aktive Rolle vom etcd zu leasen, beginnt mit dem Dienst, während der andere Koordinator des Paares in Bereitschaft bleibt, die aktive Rolle überwacht und bereit ist, den Dienst zu übernehmen, wenn der aktive Koordinator ausfällt.

Aktivieren von Koordinator-HA

Mit Helm

Um mehrere Koordinatoren zu starten und sie im Aktiv-Standby-Modus arbeiten zu lassen, sollten Sie die folgenden Änderungen an Ihrer Datei values.yaml vornehmen.

  • Setzen Sie xxxCoordinator.replicas auf 2.
  • Setzen Sie xxxCoordinator.activeStandby.enabled auf true.

Der folgende Codeschnipsel verwendet RootCoord als Beispiel. Sie können das Gleiche für Koordinatoren anderer Typen tun.

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.

Mit Docker

Um mehrere Koordinatoren zu starten und sie im Aktiv-Standby-Modus arbeiten zu lassen, können Sie einige Definitionen in die Datei docker-compose einfügen, die Sie zum Starten Ihres Milvus-Clusters verwenden.

Der folgende Codeschnipsel verwendet RootCoord als Beispiel. Sie können das Gleiche für andere Koordinatoren tun.

  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"

Mit Mac/Linux-Shell

Um mehrere Koordinatoren zu starten und sie im Aktiv-Standby-Modus arbeiten zu lassen, können Sie

  1. Laden Sie den Milvus-Quellcode auf Ihr lokales Laufwerk herunter, und starten Sie einen Milvus-Cluster aus dem Quellcode wie folgt:

    sudo ./scripts/start_cluster.sh
    

    Am Ende dieses Schrittes läuft Milvus mit nur einem Koordinator jedes Typs.

  2. Aktualisieren Sie milvus.yaml, um die Portnummer des Koordinators jedes Typs zu ändern. Im Folgenden wird rootCoord als Beispiel verwendet.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Starten Sie den Standby-Koordinator.

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

    Führen Sie am Ende dieses Schritts den folgenden Befehl aus, um zu überprüfen, ob zwei Coordinator-Prozesse vorhanden sind.

    ps aux|grep milvus
    

    Die Ausgabe sollte in etwa so aussehen

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

    Und der Standby-Koordinator gibt alle zehn Sekunden einen Protokolleintrag wie folgt aus:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Beenden Sie den aktiven Koordinator eines Paares und beobachten Sie das Verhalten des Standby-Koordinators.

    Sie können feststellen, dass es 60 Sekunden dauert, bis der Standby-Koordinator die aktive Rolle übernommen hat.

    [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"]
    

Coordinator HA ist standardmäßig deaktiviert. Sie können diese Funktion manuell aktivieren, indem Sie die folgenden Elemente in Ihrer Milvus-Konfigurationsdatei ändern.

Begrenzt

Derzeit gibt es keine starke Konsistenzgarantie zwischen dem aktiven und dem Standby-Dienst. Daher muss der Standby-Koordinator die Metadaten neu laden, wenn er die aktive Rolle übernimmt.

Etcd gibt einen Lease erst dann frei, wenn die aktuelle Sitzung eine Zeitüberschreitung aufweist. Der Standardwert für die Sitzungsdauer beträgt 60 Sekunden. Daher vergehen 60 Sekunden zwischen dem Tod des aktiven Koordinators und der Übernahme der aktiven Rolle durch den Standby-Koordinator.

Übersetzt vonDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

War diese Seite hilfreich?