milvus-logo
LFAI
Home
  • Guía de administración

Coordinador HA

Como se muestra en la arquitectura de Milvus, Milvus consta de muchos componentes y los hace trabajar de forma distribuida. Entre todos los componentes, Milvus garantiza la alta disponibilidad de los trabajadores mediante el escalado de los nodos, haciendo de los coordinadores el único eslabón débil de la cadena.

Visión general

En la versión 2.2.3, Milvus implementa la alta disponibilidad de los coordinadores para que funcionen en modo activo-standby, mitigando los posibles puntos únicos de fallo (SPoF) que pueden provocar la indisponibilidad del servicio.

Coordinator HA Alta disponibilidad de los coordinadores

La figura anterior ilustra cómo funcionan los coordinadores en el modo activo-espera. Cuando se inicia un par de coordinadores, se registran en etcd utilizando su ID de servidor y compiten por el rol activo. El coordinador que consiga alquilar el rol activo al etcd empezará a servir, y el otro coordinador de la pareja permanecerá en espera, vigilando el rol activo y listo para servir si el coordinador activo muere.

Habilitar HA de coordinador

Con Helm

Para iniciar múltiples coordinadores y hacer que trabajen en modo activo-standby, debería hacer los siguientes cambios en su archivo values.yaml.

  • Cambie xxxCoordinator.replicas a 2.
  • Establezca xxxCoordinator.activeStandby.enabled en true.

El siguiente fragmento de código utiliza RootCoord como ejemplo. Puede hacer lo mismo con coordinadores de otros tipos.

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.

Con Docker

Para iniciar múltiples coordinadores y hacer que trabajen en modo activo-standby, puede añadir algunas definiciones al archivo docker-compose que utiliza para iniciar su cluster Milvus.

El siguiente fragmento de código utiliza RootCoord como ejemplo. Puede hacer lo mismo con coordinadores de otros tipos.

  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"

Con Mac/Linux shell

Para iniciar varios coordinadores y hacer que funcionen en modo activo-espera, puede

  1. Descargar el código fuente de Milvus a su disco local, y arrancar un cluster Milvus desde el código fuente como sigue:

    sudo ./scripts/start_cluster.sh
    

    Milvus se ejecuta con un solo coordinador de cada tipo al final de este paso.

  2. Actualice milvus.yaml para cambiar el número de puerto del coordinador de cada tipo. A continuación se utiliza rootCoord como ejemplo.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Inicie el coordinador en espera.

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

    Al final de este paso, ejecute el siguiente comando para verificar que existen dos procesos de coordinador.

    ps aux|grep milvus
    

    La salida debería ser similar a

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

    Y el coordinador en espera emite una entrada de registro cada diez segundos como sigue:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Elimine el coordinador activo de un par y observe el comportamiento del coordinador en espera.

    Puede comprobar que el coordinador en espera tarda 60 segundos en asumir el papel activo.

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

La HA del coordinador está desactivada por defecto. Puede activar esta función manualmente cambiando los siguientes elementos en su archivo de configuración de Milvus.

Límites

Actualmente, no existe una garantía de coherencia sólida entre el servicio activo y el servicio en espera. Por lo tanto, el coordinador en espera necesita recargar los metadatos cuando asume el papel activo.

Etcd libera un contrato de arrendamiento sólo cuando la sesión actual ha expirado. El tiempo de espera de la sesión es por defecto de 60 segundos. Por lo tanto, hay un intervalo de 60 segundos entre el momento en que el coordinador activo muere y el momento en que el coordinador en espera asume el rol activo.

Traducido porDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?