🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Руководство по администрированию
  • Home
  • Docs
  • Руководство по администрированию

  • Конфигурация

  • Координатор HA

Координатор HA

Как видно из архитектуры Milvus, он состоит из множества компонентов и работает распределенно. Среди всех компонентов Milvus обеспечивает высокую доступность рабочих узлов за счет увеличения и уменьшения масштаба узлов, делая координаторов единственным слабым звеном в цепи.

Обзор

В выпуске 2.2.3 Milvus реализовал высокую доступность для координаторов, чтобы заставить их работать в режиме активного резерва, смягчая возможные единичные точки отказа (SPoF), которые могут привести к недоступности сервиса.

Coordinator HA Координатор HA

На рисунке выше показано, как координаторы работают в режиме активного резерва. Когда запускается пара координаторов, они регистрируются в etcd, используя идентификатор своего сервера, и конкурируют за активную роль. Координатор, которому удастся арендовать активную роль у etcd, начнет обслуживание, а другой координатор в паре останется в режиме ожидания, наблюдая за активной ролью и готовый обслуживать ее в случае гибели активного координатора.

Включение координатора HA

С помощью Helm

Чтобы запустить несколько координаторов и заставить их работать в режиме активного ожидания, необходимо внести следующие изменения в файл values.yaml.

  • Установите xxxCoordinator.replicas в 2.
  • Установите xxxCoordinator.activeStandby.enabled на true.

В следующем фрагменте кода в качестве примера используется RootCoord. Вы можете сделать то же самое с координаторами других типов.

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.

С помощью Docker

Чтобы запустить несколько координаторов и заставить их работать в режиме активного ожидания, вы можете добавить несколько определений в файл docker-compose, который вы используете для запуска кластера Milvus.

В следующем фрагменте кода в качестве примера используется RootCoord. Вы можете сделать то же самое с координаторами других типов.

  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"

С помощью оболочки Mac/Linux

Чтобы запустить несколько координаторов и заставить их работать в режиме активного ожидания, вы можете

  1. Загрузить исходный код Milvus на локальный диск и запустить кластер Milvus из исходного кода следующим образом:

    sudo ./scripts/start_cluster.sh
    

    В конце этого шага Milvus работает только с одним координатором каждого типа.

  2. Обновите milvus.yaml, чтобы изменить номер порта координатора каждого типа. Ниже в качестве примера используется rootCoord.

    rootCoord:
      address: localhost
      port: 53100 # change to 53001
    
  3. Запустите резервный координатор.

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

    В конце этого шага выполните следующую команду, чтобы убедиться в существовании двух процессов координатора.

    ps aux|grep milvus
    

    Результат должен быть похож на

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

    А резервный координатор каждые десять секунд выводит в журнал следующую запись:

    [INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
    
  4. Убейте активного координатора в паре и понаблюдайте за поведением резервного координатора.

    Вы можете обнаружить, что резервному координатору требуется 60 секунд, чтобы взять на себя роль активного.

    [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 отключена. Вы можете включить эту функцию вручную, изменив следующие элементы в конфигурационном файле Milvus.

Ограничения

В настоящее время не существует надежной гарантии согласованности между активной и резервной службой. Поэтому резервный координатор должен перезагружать метаданные, принимая на себя роль активного.

Etcd освобождает аренду только после истечения времени текущей сессии. По умолчанию таймаут сессии составляет 60 секунд. Поэтому между смертью активного координатора и принятием активной роли резервным координатором существует 60-секундный промежуток.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?