Координатор HA
Как видно из архитектуры Milvus, он состоит из множества компонентов и работает распределенно. Среди всех компонентов Milvus обеспечивает высокую доступность рабочих узлов за счет увеличения и уменьшения масштаба узлов, делая координаторов единственным слабым звеном в цепи.
Обзор
В выпуске 2.2.3 Milvus реализовал высокую доступность для координаторов, чтобы заставить их работать в режиме активного резерва, смягчая возможные единичные точки отказа (SPoF), которые могут привести к недоступности сервиса.
Координатор 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
Чтобы запустить несколько координаторов и заставить их работать в режиме активного ожидания, вы можете
Загрузить исходный код Milvus на локальный диск и запустить кластер Milvus из исходного кода следующим образом:
sudo ./scripts/start_cluster.sh
В конце этого шага Milvus работает только с одним координатором каждого типа.
Обновите
milvus.yaml
, чтобы изменить номер порта координатора каждого типа. Ниже в качестве примера используется rootCoord.rootCoord: address: localhost port: 53100 # change to 53001
Запустите резервный координатор.
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 ..."]
Убейте активного координатора в паре и понаблюдайте за поведением резервного координатора.
Вы можете обнаружить, что резервному координатору требуется 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-секундный промежуток.