milvus-logo
LFAI
Home
  • Guide d'administration

Coordinateur HA

Comme le montre l'architecture Milvus, Milvus est constitué de nombreux composants qui fonctionnent de manière distribuée. Parmi tous les composants, Milvus assure la haute disponibilité des travailleurs grâce à la mise à l'échelle des nœuds, ce qui fait des coordinateurs le seul maillon faible de la chaîne.

Vue d'ensemble

Dans la version 2.2.3, Milvus met en œuvre la haute disponibilité pour les coordinateurs afin qu'ils fonctionnent en mode actif-standby, en atténuant les éventuels points de défaillance uniques (SPoF) qui peuvent entraîner l'indisponibilité du service.

Coordinator HA Coordinateur HA

La figure ci-dessus illustre le fonctionnement des coordinateurs en mode actif-veille. Lorsqu'une paire de coordinateurs démarre, ils s'enregistrent auprès d'etcd en utilisant leur ID de serveur et sont en compétition pour le rôle actif. Le coordinateur qui réussit à louer le rôle actif auprès de l'etcd commencera à servir, et l'autre coordinateur de la paire restera en veille, surveillant le rôle actif et prêt à servir si le coordinateur actif meurt.

Activer le coordinateur HA

Avec Helm

Pour démarrer plusieurs coordinateurs et les faire travailler en mode actif-standby, vous devez apporter les modifications suivantes à votre fichier values.yaml.

  • Remplacez xxxCoordinator.replicas par 2.
  • Remplacez xxxCoordinator.activeStandby.enabled par true.

L'extrait de code suivant utilise RootCoord comme exemple. Vous pouvez faire de même pour les coordinateurs d'autres types.

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.

Avec Docker

Pour démarrer plusieurs coordinateurs et les faire travailler en mode actif-standby, vous pouvez ajouter quelques définitions au fichier docker-compose que vous utilisez pour démarrer votre cluster Milvus.

L'extrait de code suivant utilise RootCoord comme exemple. Vous pouvez faire de même pour les coordinateurs d'autres types.

  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"

Avec le shell Mac/Linux

Pour démarrer plusieurs coordinateurs et les faire fonctionner en mode actif-veille, vous pouvez

  1. Télécharger le code source de Milvus sur votre disque local et démarrer un cluster Milvus à partir du code source comme suit :

    sudo ./scripts/start_cluster.sh
    

    Milvus fonctionne avec un seul coordinateur de chaque type à la fin de cette étape.

  2. Mettez à jour milvus.yaml pour modifier le numéro de port du coordinateur de chaque type. Ce qui suit utilise rootCoord comme exemple.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Démarrez le coordinateur de secours.

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

    À la fin de cette étape, exécutez la commande suivante pour vérifier que deux processus de coordinateur existent.

    ps aux|grep milvus
    

    La sortie doit être similaire à

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

    Et le coordinateur en attente produit une entrée de journal toutes les dix secondes, comme suit :

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Tuez le coordinateur actif d'une paire et observez le comportement du coordinateur en attente.

    Vous pouvez constater qu'il faut 60 secondes au coordinateur en attente pour reprendre le rôle actif.

    [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 est désactivé par défaut. Vous pouvez activer cette fonction manuellement en modifiant les éléments suivants dans votre fichier de configuration Milvus.

Limites

Actuellement, il n'y a pas de garantie de cohérence forte entre le service actif et le service en attente. Par conséquent, le coordinateur en attente doit recharger les métadonnées lorsqu'il reprend le rôle actif.

Etcd ne libère un bail que lorsque la session en cours a expiré. Le délai d'expiration de la session est fixé par défaut à 60 secondes. Il y a donc un intervalle de 60 secondes entre le moment où le coordinateur actif meurt et le moment où le coordinateur en attente reprend le rôle actif.

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?