milvus-logo
LFAI
Casa
  • Guida all'amministrazione

Coordinatore HA

Come mostrato nell'architettura di Milvus, Milvus è composto da molti componenti e li fa lavorare in modo distribuito. Tra tutti i componenti, Milvus assicura l'alta disponibilità dei lavoratori attraverso lo scaling up e lo scaling out dei nodi, rendendo i coordinatori l'unico anello debole della catena.

Panoramica

Nella versione 2.2.3, Milvus implementa l'alta disponibilità per i coordinatori per farli lavorare in modalità active-standby, mitigando i possibili single point of failure (SPoF) che possono causare l'indisponibilità del servizio.

Coordinator HA Coordinatore HA

La figura precedente illustra il funzionamento dei coordinatori in modalità active-standby. Quando una coppia di coordinatori si avvia, si registra con etcd utilizzando il proprio ID server e compete per il ruolo attivo. Il coordinatore che riesce ad affittare il ruolo attivo da etcd inizierà a servire, mentre l'altro coordinatore della coppia rimarrà in standby, controllando il ruolo attivo e pronto a servire se il coordinatore attivo muore.

Abilitare il coordinatore HA

Con Helm

Per avviare più coordinatori e farli lavorare in modalità active-standby, occorre apportare le seguenti modifiche al file values.yaml.

  • Impostare xxxCoordinator.replicas su 2.
  • Impostare xxxCoordinator.activeStandby.enabled su true.

Il seguente frammento di codice utilizza RootCoord come esempio. È possibile fare lo stesso per coordinatori di altro tipo.

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

Per avviare più coordinatori e farli lavorare in modalità active-standby, si possono aggiungere alcune definizioni al file docker-compose che si usa per avviare il cluster Milvus.

Il seguente frammento di codice utilizza RootCoord come esempio. È possibile fare lo stesso per i coordinatori di altro tipo.

  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 la shell Mac/Linux

Per avviare più coordinatori e farli lavorare in modalità active-standby, è possibile

  1. Scaricare il codice sorgente di Milvus sul disco locale e avviare un cluster Milvus dal codice sorgente come segue:

    sudo ./scripts/start_cluster.sh
    

    Alla fine di questa fase, Milvus funziona con un solo coordinatore per tipo.

  2. Aggiornare milvus.yaml per cambiare il numero di porta del coordinatore di ciascun tipo. Di seguito si utilizza rootCoord come esempio.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Avviare il coordinatore in standby.

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

    Al termine di questa fase, eseguire il comando seguente per verificare che esistano due processi di coordinatore.

    ps aux|grep milvus
    

    L'output dovrebbe essere simile 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
    ...
    

    Il coordinatore standby emette una voce di registro ogni dieci secondi come segue:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Uccidere il coordinatore attivo di una coppia e osservare il comportamento del coordinatore in standby.

    Si può notare che il coordinatore in standby impiega 60 secondi per assumere il ruolo attivo.

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

Il coordinatore HA è disattivato per impostazione predefinita. È possibile attivare questa funzione manualmente modificando le seguenti voci nel file di configurazione di Milvus.

Limiti

Attualmente non esiste una forte garanzia di coerenza tra il servizio attivo e quello in standby. Pertanto, il coordinatore in standby deve ricaricare i metadati quando assume il ruolo attivo.

Etcd rilascia un lease solo dopo il timeout della sessione corrente. Il timeout della sessione è predefinito a 60 secondi. Pertanto, c'è un intervallo di 60 secondi tra la morte del coordinatore attivo e l'assunzione del ruolo attivo da parte del coordinatore in standby.

Tradotto daDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?