milvus-logo
LFAI
Home
  • Guia de Administração

Coordenador HA

Como se pode ver na arquitetura do Milvus, este é constituído por muitos componentes que funcionam de forma distribuída. Entre todos os componentes, o Milvus assegura a elevada disponibilidade dos trabalhadores através do aumento e da redução dos nós, tornando os coordenadores o único elo fraco da cadeia.

Visão geral

Na versão 2.2.3, o Milvus implementa alta disponibilidade para os coordenadores, fazendo com que eles trabalhem no modo ativo-em espera, mitigando possíveis pontos únicos de falha (SPoFs) que podem resultar em indisponibilidade do serviço.

Coordinator HA Coordenador HA

A figura acima ilustra a forma como os coordenadores funcionam no modo de espera ativa. Quando um par de coordenadores é iniciado, eles se registram no etcd usando seu ID de servidor e competem pela função ativa. O coordenador que conseguir alugar a função ativa do etcd começará a servir, e o outro coordenador do par permanecerá em espera, observando a função ativa e pronto a servir se o coordenador ativo morrer.

Habilitar o coordenador HA

Com o Helm

Para iniciar vários coordenadores e fazê-los trabalhar no modo ativo-em espera, você deve fazer as seguintes alterações no seu arquivo values.yaml.

  • Defina xxxCoordinator.replicas como 2.
  • Defina xxxCoordinator.activeStandby.enabled como true.

O seguinte trecho de código utiliza o RootCoord como exemplo. Você pode fazer o mesmo com coordenadores de outros 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.

Com o Docker

Para iniciar vários coordenadores e fazê-los trabalhar em modo de espera ativa, pode adicionar algumas definições ao ficheiro docker-compose que utiliza para iniciar o seu cluster Milvus.

O trecho de código a seguir usa o RootCoord como exemplo. Pode fazer o mesmo com coordenadores de outros 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"

Com a shell Mac/Linux

Para iniciar vários coordenadores e fazê-los funcionar em modo de espera ativa, pode

  1. Descarregar o código fonte do Milvus para o seu disco local, e iniciar um cluster Milvus a partir do código fonte como se segue:

    sudo ./scripts/start_cluster.sh
    

    O Milvus funciona com apenas um coordenador de cada tipo no final desta etapa.

  2. Atualize milvus.yaml para alterar o número da porta do coordenador de cada tipo. A seguir, usamos o rootCoord como exemplo.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Inicie o coordenador em espera.

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

    No final desta etapa, execute o seguinte comando para verificar se existem dois processos de coordenador.

    ps aux|grep milvus
    

    A saída deve ser semelhante 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
    ...
    

    E o coordenador em espera gera uma entrada de log a cada dez segundos, como segue:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Mate o coordenador ativo em um par e observe o comportamento do coordenador em espera.

    É possível constatar que são necessários 60 segundos para que o coordenador em espera assuma a função ativa.

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

A HA do coordenador é desativada por padrão. É possível ativar esse recurso manualmente alterando os seguintes itens no arquivo de configuração do Milvus.

Limites

Atualmente, não existe uma garantia de consistência forte entre o serviço ativo e o serviço em espera. Por conseguinte, o coordenador em espera necessita de recarregar os metadados ao assumir a função ativa.

O Etcd liberta uma concessão apenas depois de a sessão atual ter expirado. O tempo limite da sessão é predefinido para 60 segundos. Por conseguinte, existe um intervalo de 60 segundos entre o momento em que o coordenador ativo morre e o momento em que o coordenador em espera assume o papel ativo.

Traduzido porDeepLogo

Try Zilliz Cloud for Free

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

Get Started
Feedback

Esta página foi útil?