Масштабирование LUNA CARS#
При использовании системы LUNA CARS возможны множественные варианты ее установки и конфигурации. Доступна как масштабируемость в рамках одного сервера (вертикальное масштабирование), так и на нескольких серверах (горизонтальное масштабирование и отказоустойчивость).
Масштабировать возможно отдельные подсистемы (например, CARS Stream, CARS API) или всю систему целиком.
В данном пункте приведена информация об альтернативных способах установки системы для масштабирования.
Установка LUNA CARS на нескольких серверах с использованием единой базы данных#
LUNA CARS предоставляет возможность установки множества экземпляров системы на разных серверах, но использованием единой базы данных (БД) (Рисунок 7).
В этом случае необходимо выполнить полную установку системы на один сервер и установку без использования БД на дополнительные сервера.
Настройка и установка системы на сервер с БД#
Перед установкой на сервер, где будет находиться БД, выполните настройку файла «docker-compose.yml» на этом сервере:
1․ Зайдите в корень дистрибутива:
cd cars-installer_v.*.*.*
2․ Откройте файл:
nano docker-compose.yml
3․ Раскомментируйте (уберите #) следующие строки в файле:
# ports:
# - ${POSTGRES_PORT}:${POSTGRES_PORT}
Также выполните настройку файла «analytics_instances.csv», который отвечает за настройку передачи изображений с других серверов в единую БД. Для этого:
1․ Зайдите в директорию /common, где располагается файл:
cd cars-installer_v.*.*.*/extras/common
2․ Откройте файл любым удобным способом и заполните данные о каждом сервере, где будет установлена система LUNA CARS, за исключением сервера, на котором заполняется файл (Таблица 4)
Таблица 4. Описание полей файла «analytics_instances.csv»
Поле | Описание | Возможные значения |
---|---|---|
id | Идентификатор сервера. Задается пользователем вручную, не влияет на работу системы | 0, 1, 2…n |
protocol | Выбор протокола передачи данных | HTTP/HTTPS |
host | IP-адрес сервера, где будет установлена система | IP-адрес |
port | Номер порта соединения с данным сервером | Доступные порты |
После этого выполните стандартную полную установку системы LUNA CARS на данном сервере (см. п.2.3.1 – 2.3.5).
Настройка и установка системы на дополнительные сервера#
Для установки системы на все дополнительные сервера необходимо выполнить подготовку дистрибутива, настроив конфигурационные файлы.
Настройка конфигурационных файлов выполняется для каждого дополнительного сервера на самом сервере строго перед установкой системы.
Выполните настройку файла «docker-compose.yml»:
1․ Откройте файл и закомментируйте или удалите следующие строки из файла, относящиеся к вызову контейнера БД:
psql:
image: ${DOCKER_REGISTRY}/postgres:12-vl-2
hostname: ${POSTGRES_HOSTNAME}
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_PORT: ${POSTGRES_PORT}
POSTGRES_HOSTNAME: ${POSTGRES_HOSTNAME}
POSTGRES_USER: ${POSTGRES_USER}
# ports:
# - ${POSTGRES_PORT}:${POSTGRES_PORT}
volumes:
- "${ANALYTICS_PSQL_FOLDER}:/var/lib/postgresql/data/"
- "./extras/postgres/:/tmp/postgresql/"
2․ Закомментируйте или удалите строку - psql
из файла, определяющую зависимость БД и Redis в секции back-db
. Пример закомментированной строки:
depends_on:
- redis
# - psql
3․ Сохраните изменения и выйдите из файла.
После этого контейнер с БД не будет запущен при установке LUNA CARS на дополнительном сервере.
Для того, чтобы указать системе, в какую БД необходимо сохранять данные, настройте конфигурационный файл «.env»:
1․ Зайдите в корень дистрибутива:
cd cars-installer_v.*.*.*
2․ Откройте файл:
nano .env
3․ Для параметра POSTGRES_HOSTNAME
укажите в значении IP-адрес сервера, где находится БД.
4․ Для параметра POSTGRES_PORT
укажите в значении тот же номер порта, что указан для этого параметра в файле «.env» на сервере, где находится БД.
5․ Сохраните изменения и выйдите из файла.
Также выполните настройку файла «analytics_instances.csv». Откройте файл и заполните данные о каждом сервере, где будет установлена система LUNA CARS, за исключением сервера, на котором заполняется файл (подробнее см. Таблицу 4).
После всех настроек выполните стандартный алгоритм установки системы на сервере.
Повторите все шаги данного пункта для каждого дополнительного сервера.
После выполнения всех условий и установки на каждом сервере, все данные будут передаваться на единую БД со всех используемых серверов.
Установка LUNA CARS на нескольких серверах и настройка репликации данных#
LUNA CARS поддерживает установку системы на нескольких серверах с возможностью репликации данных. Такая возможность может быть использована для случаев, когда возникает необходимость собирать и просматривать данные с нескольких (удаленных) серверов на одном (целевом) сервере.
Установка такого типа выполняется при помощи Ansible.
Как и при стандартной установке с помощью Ansible, возможна установка с использованием установочного сервера (см. подробнее в п.2.8). Так, установка системы будет происходит удаленно с установочного сервера на целевой и на удаленные сервера. Схема работы представлена на Рисунке (Рисунок 8).
Использование установочного сервера не является обязательным. Целевой сервер может выполнять роль установочного.
Подготовка к установке системы на несколько серверов#
Перед началом установки необходимо обеспечить выполнение следующих условий:
- Установочный сервер должен иметь доступ ко всем серверам – целевому и удаленным;
- Целевой сервер должен иметь доступ ко всем удаленным серверам;
- На установочном сервере скачан и распакован дистрибутив LUNA CARS (см. п.2.1);
- Ansible должен быть установлен на установочном сервере (см. п.2.8);
- На установочном сервере должна быть выполнена настройка SSH (см. п.2.8.2).
Лицензирование LUNA CARS при установке с репликацией данных#
При установке LUNA CARS на множестве серверов с репликацией данных, необходимо обеспечить лицензирование каждого сервера.
Активация лицензии для каждого сервера происходит аналогично процессу, описанному в п.2.8.4.
Алгоритм установки и настройки#
Установка на целевой сервер#
После проверки выполнения всех условий необходимо выполнить настройку конфигурационного файла «hosts» для целевого сервера:
1․ В «hosts» необходимо для каждого компонента указать внешний IP-адрес целевого сервера, куда будет устанавливаться компонент, а также указать IP-адреса всех серверов, где будут установлены подсистемы CARS API и CARS Stream.
#CARS.Analytics
#Only 1 host
[frontend]
<IP_address>
#Only 1 host
[backend]
<IP_address>
#Only 1 host
[postgres]
<IP_address>
#Only 1 host
[redis]
<IP_address>
#CARS.API
#Multiple hosts allowed
[api]
<IP_address_1>
<IP_address_2>
<…>
<IP_address_#>
#Only 1 host
[nginx]
<IP_address>
#CARS.Stream
#Multiple hosts allowed
[stream]
<IP_address_1>
<IP_address_2>
<…>
<IP_address_#>
[Analytics_ALL:children]
frontend
backend
postgres
redis
[Api_ALL:children]
api
nginx
2․ После настройки файла выполните команду установки на целевом сервере:
ansible-playbook -i hosts install_analytics.yml install_api.yml install_stream.yml
Установка на дополнительные сервера#
1․ Сделайте копию файла «hosts», которая будет использована для установки системы на первый удаленный сервер. Присвойте файлу имя. Укажите IP-адрес этого удаленного сервера внутри файла для каждого компонента. 2․ После настройки файла выполните команду установки на удаленном сервере:
ansible-playbook -i <имя копии файла hosts> install_analytics.yml install_api.yml install_stream.yml
3․ При установке компонентов системы на множество дополнительных серверов, повторите шаги 1-3 данного пункта для каждого сервера.
Настройка репликации#
Для корректной работы репликации данных, на каждом сервере должны быть открыты порты PSQL. Порт по умолчанию – 5432. Изменения порта при необходимости могут быть внесены в файле «.env»
1․ После установки системы на каждый из серверов необходимо настроить связь БД между серверами. Для этого следует задать роли в файле инвентаризации «replica-hosts».
Файл «replica-hosts» находится в директории
/ansible
.
В данном файле указываются IP-адреса Postgres удаленного сервера, который должны передавать данные (master), и IP-адрес Postgres целевого сервера, который должен принимать данные (slave). За один раз необходимо прописать только одну пару master-slave во избежание ошибок.
[postgres-master]
IP_адрес1
[postgres-slave]
IP_адрес
2․ После конфигурации файла выполните из директории /ansible
следующую команду для запуска настройки:
ansible-playbook -i replica-hosts replica_conf.yml
Для всех дополнительных master-серверов нужно повторить шаги 1 и 2, указывая в replica-hosts IP-адрес следующего дополнительного master.
После добавления всех серверов, установка системы и настройка репликации завершена.
Для проверки работоспособности системы войдите в интерфейс CARS Analytics. Данные для входа в веб-интерфейс представлены в пункте 2.8.8.1.
Для корректной работы Системы следует запускать каждую копию Системы (т.е. каждый отдельный порт) в отдельном браузере.
При использовании LUNA CARS с настройкой репликации, для корректной работы системы необходимо обеспечить уникальность названий Камер на каждом сервере (подробнее см. «CARS Analytics. Руководство пользователя»).
Запуск нескольких экземпляров CARS Stream на одном сервере с помощью Docker#
Подключение нескольких экземпляров#
В CARS Installer реализована возможность запуска нескольких экземпляров CARS Stream на одном сервере с помощью Docker. Соответствующие настройки предусмотрены в файле «docker-compose.yml», находящемся в корневой папке инсталлятора.
При необходимости запустить несколько экземпляров CARS Stream на одном сервере, необходимо выполнить следующие команды.
Зайдите в корень дистрибутива:
cd cars-installer_v.*.*.*
Откройте файл настроек:
nano docker-compose.yml
В разделе «Stream» данного файла необходимо раскомментировать строки для каждого дополнительного экземпляра (напр. Stream 1, Stream 2 и т.д.). Пример закомментированных строк представлен ниже:
# stream2:
# image: ${DOCKER_REGISTRY}/stream:${STREAM_VERSION}
# hostname: stream2
# #deploy:
# # resources:
# # reservations:
# # devices:
# # - driver: nvidia
# ## count: all
# # device_ids: ['${STREAM_GPU2}']
# # capabilities: [gpu]
# restart: unless-stopped
# ports:
# - ${STREAM_PORT2}:34569
# - ${STREAM_HASP_PORT2}:1947
# environment:
# # NVIDIA_DRIVER_CAPABILITIES: all
# # NVIDIA_VISIBLE_DEVICES: all
# API_PORT: ${API_PORT}
# API_HOSTNAME: ${API_HOSTNAME}
# ANALYTICS_HOSTNAME: ${ANALYTICS_HOSTNAME}
# ANALYTICS_FRONTEND_PORT: ${ANALYTICS_FRONTEND_PORT}
# ANALYTICS_BACKEND_PORT: ${ANALYTICS_BACKEND_PORT}
# HASP_WAIT_TIME: ${HASP_WAIT_TIME}
# HASP_LICENSE_SERVER: ${HASP_LICENSE_SERVER}
# HASP_LICENSE_FILE: ${HASP_LICENSE_FILE}
# DEBUG_STREAM: ${DEBUG_STREAM}
# HEALTH_CHECK_MAX_ERROR_COUNT: ${HEALTH_CHECK_MAX_ERROR_COUNT}
# ENABLE_BODY_DETECTOR: ${ENABLE_BODY_DETECTOR}
# ENABLE_ANIMAL_DETECTOR: ${ENABLE_ANIMAL_DETECTOR}
# STREAM_PLATFORM: ${STREAM_PLATFORM2}
# volumes:
# # Example external video files for carstream
# - "${STREAM_VIDEO_DIR}:${STREAM_VIDEO_DIR}"
# - "${ANALYTICS_MEDIA_ROOT_FOLDER}:/srv/cars/back/media/"
# - "${STREAM_LICENSE_FILE}:/srv/cars/stream/bin/data/license.conf"
# - "${HASP_LICENSE_FILE}:/tmp/test.v2c"
По умолчанию CARS Installer может запустить до 4 копий CARS Stream. Все необходимые дополнительные настройки уже реализованы для данного количества экземпляров. В случае, если количество копий необходимо увеличить, следует добавить дополнительный раздел «Stream #» (аналогичный существующим) в файл «docker-compose.yml», а также выполнить настройку файла «.env».
В секции «Stream» необходимо добавить следующие параметры:
Параметр | Значение | Описание |
---|---|---|
STREAM_PLATFORM# | - cpu; | # должно соответствовать номеру дополнительного экземпляра |
- gpu | - gpu – обработка запросов на графическом процессоре; | |
- cpu – обработка запросов на центральном процессоре без поддержки инструкций AVX2 | ||
STREAM_PORT# | указать номер порта для дополнительного экземпляра | # должно соответствовать номеру дополнительного экземпляра |
STREAM_GPU# | 4…Количество ГП в контуре | # должно соответствовать номеру дополнительного экземпляра |
STREAM_HASP_PORT# | Доступные порты | # должно соответствовать номеру дополнительного экземпляра. После указания номера порта необходимо проверить, что данный порт не используется другими подсистемами (напр. CARS API) |
Запуск видеопотока на конкретном экземпляре CARS Stream#
Для запуска видеопотока на одном из нескольких экземпляров необходимо вручную прописать адрес до конкретной копии CARS Stream при подключении камеры в CARS Analytics UI.
Подробнее см. CARS Analytics. Руководство пользователя.
Повышение производительности обработки изображений#
CARS API – система обработки запросов на обработку изображения – является наиболее ресурсоемким в работе системы. Для обработки запросов реализован механизм постановки задачи и получения результата в синхронном режиме. В целях обеспечения масштабируемости подсистемы CARS API и ее отказоустойчивости следует применять внешний балансировщик http-запросов (Nginx).
Вертикальное масштабирование достигается методом запуска нескольких экземпляров CARS API на одном сервере и использования балансировщика запросов (Рисунок 9).
Для подключения нескольких экземпляров CARS API необходимо указать в конфигурационных файлах количество используемых копий CARS API:
- при установке через Docker необходимо внести изменения в переменные API_PORT и API_COUNT в файле «.env» (см. Приложение 2);
- при установке через ansible необходимо внести изменения в переменные API_PORT и API_COUNT в файле «all.yml» (см. Приложение 3).
Горизонтальное масштабирование и отказоустойчивость достигается аналогичной конфигурацией. Для этого необходимо запустить на нескольких серверах необходимое количество экземпляров CARS API.
Балансировка и перераспределение запросов в случае выхода из строя одного из серверов обеспечивается внешним балансировщиком http-запросов Nginx (Рисунок 10).