Перейти к содержанию

Дополнительная информация#

В данном разделе приводится следующая дополнительная информация:

Визуализация монтиторинга и логов с помощью Grafana#

Визуализация мониторинга выполняется за счет сервиса LUNA Dashboards, который содержит в себе платформу для визуализации данных мониторинга Grafana с настроенными дашбордами LUNA PLATFORM.

При необходимости можно отдельно установить настроенные дашборды для Grafana. См. дополнительную информацию в разделе "LUNA Dashboards" в руководстве администратора.

Вместе с Grafana можно использовать систему агрегации логов Grafana Loki, позволяющую гибко работать с логами LUNA PLATFORM. Для доставки логов LUNA PLATFORM в Grafana Loki используется агент Promtail (дополнительную информацию см. в разделе "Grafana Loki" в руководстве администратора).

LUNA Dashboards#

Примечание. Для работы с Grafana необходимо использовать InfluxDB версии 2.

Запуск контейнера LUNA Dashboards#

Используйте команду docker run со следующими параметрами для запуска LUNA Dashboards:

docker run \
--restart=always \
--detach=true \
--network=host \
--name=grafana \
-v /etc/localtime:/etc/localtime:ro \
dockerhub.visionlabs.ru/luna/luna-dashboards:v.0.0.9

Для использования веб-интерфейса Grafana нужно перейти по адресу "http://IP_ADDRESS:3000", при условии, что контейнеры LUNA Dashboards и InfluxDB были запущены.

Grafana Loki#

Примечание. Для запуска Grafana Loki требуется наличие запущенного сервиса LUNA Dashboards.

Запуск контейнера Grafana Loki#

Используйте команду docker run со следующими параметрами для запуска Grafana Loki:

docker run \
--name=loki \
--restart=always \
--detach=true \
--network=host \
-v /etc/localtime:/etc/localtime:ro \
dockerhub.visionlabs.ru/luna/loki:2.7.1

Запуск контейнера Promtail#

Используйте команду docker run со следующими параметрами для запуска Promtail:

docker run \
-v /var/lib/luna/current/example-docker/logging/promtail.yml:/etc/promtail/luna.yml \
-v /var/lib/docker/containers:/var/lib/docker/containers \
-v /etc/localtime:/etc/localtime:ro \
--name=promtail \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/promtail:2.7.1 \
-config.file=/etc/promtail/luna.yml -client.url=http://127.0.0.1:3100/loki/api/v1/push -client.external-labels=job=containerlogs,pipeline_id=,job_id=,version=

-v /var/lib/luna/current/example-docker/logging/promtail.yml:/etc/promtail/luna.yml - монтирование конфигурационного файла в контейнер Promtail

-config.file=/etc/promtail/luna.yml - флаг с адресом конфигурационного файла

-client.url=http://127.0.0.1:3100/loki/api/v1/push - флаг с адресом развернутой Grafana Loki

-client.external-labels=job=containerlogs,pipeline_id=,job_id=,version= - статические метки для добавления ко всем логам, отправляемым в Grafana Loki

Команды Docker#

Показать контейнеры#

Чтобы показать список запущенных Docker-контейнеров, используйте команду:

docker ps

Чтобы показать все имеющиеся Docker-контейнеры, используйте команду:

docker ps -a 

Копировать файлы в контейнер#

Можно переносить файлы в контейнер. Используйте команду docker cp для копирования файла в контейнер.

docker cp <file_location> <container_name>:<folder_inside_container>

Вход в контейнер#

Можно входить в отдельные контейнеры с помощью следующей команды:

docker exec -it <container_name> bash

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

exit

Имена образов#

Можно увидеть все имена образов с помощью команды

docker images

Удаление образа#

Если требуется удаление образа:

  • запустите команду docker images
  • найдите требуемый образ, например dockerhub.visionlabs.ru/luna/luna-image-store
  • скопируйте соответствующий ID образа из IMAGE ID, например, "61860d036d8c"
  • укажите его в команде удаления:
docker rmi -f 61860d036d8c

Удалите все существующие образы:

docker rmi -f $(docker images -q)

Остановка контейнера#

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

docker stop <container_name>

Остановить все контейнеры:

docker stop $(docker ps -a -q)

Удаление контейнера#

Если необходимо удалить контейнер:

  • запустите команду "docker ps"
  • остановите контейнер (см. Остановка контейнера)
  • найдите требуемый образ, например: dockerhub.visionlabs.ru/luna/luna-image-store
  • скопируйте соответствующий ID контейнера из столбца CONTAINER ID, например, "23f555be8f3a"
  • укажите его в команде удаления:
docker container rm -f 23f555be8f3a

Удалить все контейнеры:

docker container rm -f $(docker container ls -aq)

Проверка логов сервисов#

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

docker logs <container_name>

Описание параметров запуска#

При запуске Docker-контейнера для какого-либо из сервисов LUNA PLATFORM необходимо задать дополнительные параметры, требуемые для работы этого сервиса.

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

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

Параметры запуска сервисов#

Пример команды запуска контейнеров сервисов LP:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=<Port_of_the_launched_service> \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/<service>:/srv/logs/ \
--name=<service_container_name> \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/<service-name>:<version>

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

docker run - команда для запуска выбранного образа в качестве нового контейнера.

dockerhub.visionlabs.ru/luna/<service-name>:<version> - этот параметр задает образ, требуемый для запуска контейнера.

Ссылки для загрузки требуемых образов контейнера доступны в описании запуска соответствующего контейнера.

--network=host - этот параметр указывает, что отсутствует симуляция сети и используется серверная сеть. При необходимости изменить порт для сторонних контейнеров следует заменить эту строку на -p 5440:5432. Здесь первый порт 5440 - это локальный порт, а 5432 - это порт, используемый в контейнере. Пример приведен для PostgreSQL.

--env= - этот параметр задает переменные окружения, требуемые для запуска контейнера. Указываются следующие основные значения:

  • CONFIGURATOR_HOST=127.0.0.1 - хост, на котором запущен сервис Configurator. Локальный хост задается в случае, если контейнер запущен на том же сервере, где работает Configurator.

  • CONFIGURATOR_PORT=5070 - порт прослушивания для сервиса Configurator. По умолчанию используется порт 5070.

  • PORT=<Port_of_the_service> - порт, где сервис будет слушать.

  • WORKER_COUNT - задает количество "рабочих процессов" для сервиса.

  • RELOAD_CONFIG обеспечивает автоматическую перезагрузку конфигураций для сервиса, если значение равно "1". См. раздел "Автоматическая перезагрузка конфигураций" в руководстве администратора LUNA PLATFORM 5.

  • RELOAD_CONFIG_INTERVAL задает период проверки конфигураций (по умолчанию 10 секунд). См. раздел "Автоматическая перезагрузка конфигураций" в руководстве администратора LUNA PLATFORM 5.

--name=<service_container_name> - этот параметр задает имя запускаемого контейнера. Имя должно быть уникальным. Если уже существует контейнер с таким же именем, произойдет ошибка.

--restart=always - этот параметр определяет политику перезагрузки. Daemon всегда перезагружает контейнер вне зависимости от кода завершения.

--detach=true - запуск контейнера в фоновом режиме.

-v - параметр volume позволяет загружать содержимое серверной папки в объем контейнера. Таким образом содержимое синхронизируется. Загружаются следующие общие данные:

  • /etc/localtime:/etc/localtime:ro - задает текущий часовой пояс, используемый системой контейнера.

  • /tmp/logs/<service>:/srv/logs/ - позволяет копировать папку с записями (логами) сервиса на сервер в директорию /tmp/logs/<service>. Директорию для хранения логов можно изменить при желании.

Параметры создания баз данных#

Пример команды запуска контейнеров для миграции баз данных или их создания:

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/<service>:/srv/logs/ \
--rm \
--network=host \
dockerhub.visionlabs.ru/luna/<service-name>:<version> \
python3 ./base_scripts/db_create.py --luna-config http://localhost:5070/1

Следующие параметры используются при запуске контейнеров для миграции баз данных или их создания:

--rm - этот параметр указывает, удаляется ли контейнер после завершения обработки всех заданных скриптов.

python3 ./base_scripts/db_create.py - этот параметр содержит версию Python и скрипт db_create.py, запускаемый в контейнере. Этот скрипт используется для создания структуры базы данных.

--luna-config http://localhost:5070/1 - этот параметр указывает, откуда запущенный скрипт должен получать конфигурации. По умолчанию конфигурации запрашиваются сервисами от сервиса Configurator.

Способы изменения настроек сервисов#

Существует три основных способа изменения настроек, хранящихся в базе данных сервиса Configurator:

  • с помощью пользовательского интерфейса сервиса Configurator,
  • с помощью запросов API сервиса Configurator,
  • с помощью файла с настройками.

Настройки можно изменить после запуска сервиса Configurator.

Настройки самого сервиса Configurator хранятся в файле "luna_configurator_postgres.conf", который загружается в контейнер сервиса Configurator в процессе его запуска.

Интерфейс сервиса Configurator

Можно войти в пользовательский интерфейс сервиса Configurator и изменить требуемую настройку. По умолчанию используется следующий адрес на локальном хосте: <Configurator_server_address>:5070.

API сервиса Configurator

Для обновления настроек можно использовать API сервиса Configurator.

См. спецификацию OpenAPI сервиса Configurator.

Файл сброса

Можно получить файл сброса со всеми настройками сервисов LP. Используйте одну из следующих команд:

wget -O /var/lib/luna/settings_dump.json 127.0.0.1:5070/1/dump

или

curl 127.0.0.1:5070/1/dump > /var/lib/luna/settings_dump.json

Необходимо задать корректный адрес и порт сервиса Configurator.

Необходимо удалить из файла раздел "limitations". В противном случае будет невозможно применить обновление файла сброса.

    "limitations":[
      ...
    ],

Отредактируйте параметры в разделе "settings".

    "settings":[
      ...
    ],

Скопируйте файл с настройками в контейнер сервиса Configurator.

docker cp /var/lib/luna/settings_dump.json luna-configurator:/srv/

Используйте полученный файл:

docker exec luna-configurator python3 ./base_scripts/db_create.py --dump-file /srv/settings_dump.json

Запись логов на сервер#

Чтобы включить сохранение логов на сервер, необходимо:

  • создать директории для логов на сервере;
  • активировать запись логов и задать расположение хранения логов внутри контейнеров сервисов LP;
  • настроить синхронизацию директорий логов в контейнере с логами на сервере с помощью аргумента volume при старте каждого контейнера.

Создание директории логов#

Ниже приведены примеры команд для создания директорий для хранения логов и присвоения им прав для всех сервисов LUNA PLATFORM.

mkdir -p /tmp/logs/configurator /tmp/logs/image-store /tmp/logs/accounts /tmp/logs/faces /tmp/logs/licenses /tmp/logs/events /tmp/logs/python-matcher /tmp/logs/handlers /tmp/logs/remote-sdk /tmp/logs/tasks /tmp/logs/tasks-worker /tmp/logs/sender /tmp/logs/api /tmp/logs/admin /tmp/logs/backport3 /tmp/logs/backport4
chown -R 1001:0 /tmp/logs/configurator /tmp/logs/image-store /tmp/logs/accounts /tmp/logs/faces /tmp/logs/licenses /tmp/logs/events /tmp/logs/python-matcher /tmp/logs/handlers /tmp/logs/remote-sdk /tmp/logs/tasks /tmp/logs/tasks-worker /tmp/logs/sender /tmp/logs/api /tmp/logs/admin /tmp/logs/backport3 /tmp/logs/backport4

Если необходимо использовать сервис Python Matcher Proxy, то нужно дополнительно создать директорию /tmp/logs/python-matcher-proxy и установить ей разрешения.

Активация записи логов#

Активация записи логов сервисов LP#

Для активации записи логов в файл необходимо задать настройки log_to_file и folder_with_logs в секции <SERVICE_NAME>_LOGGER настроек каждого сервиса.

Автоматический способ (перед/после запуска Configurator)

Для обновления настроек ведения логов можно использовать файл настроек logging.json, предоставленный в комплекте поставки.

Выполните следующую команду после запуска сервиса Configurator:

docker cp /var/lib/luna/current/extras/conf/logging.json luna-configurator:/srv/luna_configurator/used_dumps/logging.json

Обновите настройки записи логов с помощью скопированного файла.

docker exec -it luna-configurator python3 ./base_scripts/db_create.py --dump-file /srv/luna_configurator/used_dumps/logging.json

Ручной способ (после запуска Configurator)

Перейдите в интерфейс сервиса Configurator (127.0.0.1:5070) и задайте путь расположения логов в контейнере в параметре folder_with_logs для всех сервисов, чьи логи необходимо сохранить. Например, можно использовать путь /srv/logs.

Установите параметр log_to_file как true чтобы активировать запись логов в файл.

Активация записи логов сервиса Configurator (перед/после запуска Configurator)#

Настроек сервиса Configurator нет в пользовательском интерфейсе Configurator, они расположены в следующем файле:

/var/lib/luna/current/example-docker/luna_configurator/configs/luna_configurator_postgres.conf

Следует изменить параметры логирования в этом файле перед запуском сервиса Configurator или перезапустить его после внесения изменений.

Задайте путь расположения логов в контейнере в параметре FOLDER_WITH_LOGS = ./ файла. Например, FOLDER_WITH_LOGS = /srv/logs.

Установите параметр log_to_file как true чтобы активировать запись логов в файл.

Монтирование директорий с логами при старте сервисов#

Директория с логами монтируется с помощью следующего аргумента при старте контейнера:

-v <server_logs_folder>:<container_logs_folder> \

где <server_logs_folder> директория, созданная на этапе создания директории логов, а <container_logs_folder> директория, созданная на этапе активации записи логов.

Пример команды запуска сервиса API с монтированием директории с логами:

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5000 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--name=luna-api \
--restart=always \
--detach=true \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/api:/srv/logs \
--network=host \
dockerhub.visionlabs.ru/luna/luna-api:v.6.19.4

Примеры команд запуска контейнеров в данной документации содержат эти аргументы.

Настройка ротации логов Docker#

Чтобы ограничить размер логов, генерируемых Docker, можно настроить автоматическую ротацию логов. Для этого необходимо добавить в файл /etc/docker/daemon.json следующие данные:

{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "100m",
        "max-file": "5"
    }
}

Это позволит Docker хранить до 5 файлов логов на контейнер, при этом каждый файл будет ограничен 100 Мб.

После изменения файла необходимо перезапустить Docker:

systemctl reload docker

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

Задание пользовательских настроек InfluxDB#

Для InfluxDB OSS 2 доступны следующие настройки:

"send_data_for_monitoring": 1,
"use_ssl": 0,
"flushing_period": 1,
"host": "127.0.0.1",
"port": 8086,
"organization": "<ORGANIZATION_NAME>",
"token": "<TOKEN>",
"bucket": "<BUCKET_NAME>",
"version": <DB_VERSION>

Можно обновить настройки InfluxDB для сервисов LP в сервисе Configurator, выполнив следующие действия:

  • откройте следующий файл:
vi /var/lib/luna/current/extras/conf/influx2.json
  • задайте необходимые данные;
  • сохраните изменения;
  • скопируйте файл в контейнер InfluxDB:
docker cp /var/lib/luna/current/extras/conf/influx2.json luna-configurator:/srv/
  • обновите настройки в сервисе Configurator.
docker exec -it luna-configurator python3 ./base_scripts/db_create.py --dump-file /srv/influx2.json

Также можно вручную обновить настройки в пользовательском интерфейсе сервиса Configurator.

Настройки сервиса Configurator задаются отдельно.

  • откройте файл с настройками Configurator:
vi /var/lib/luna/current/example-docker/luna_configurator/configs/luna_configurator_postgres.conf
  • задайте необходимые данные;
  • сохраните изменения;
  • перезапустите Configurator:
docker restart luna-configurator

Использование Python Matcher с Python Matcher Proxy#

Как было сказано ранее, вместе с сервисом Python Matcher можно дополнительно использовать сервис Python Matcher Proxy, который будет перенаправлять запросы сравнения либо сервису Python Matcher, либо плагинам сравнения. Использование плагинов может значительно ускорить выполнение запросов на сравнение. Например, с помощью плагинов возможно организовать хранение необходимых для выполнения операций сравнения данных и дополнительных полей объектов в отдельном хранилище, что позволит ускорить доступ к данным по сравнению с использованием стандартной БД LUNA PLATFORM.

Для использования сервиса Python Matcher с Python Matcher Proxy необходимо дополнительно запустить соответствующий контейнер, а затем выставить определенную настройку в сервисе Configurator. Выполняйте нижеперечисленные действия только если собираетесь использовать плагины сравнения.

См. описание и использование плагинов сравнения в руководстве администратора.

Запуск контейнера Python Matcher Proxy#

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

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5110 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
--env=SERVICE_TYPE="proxy" \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/python-matcher-proxy:/srv/logs \
--name=luna-python-matcher-proxy \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-python-matcher:v.1.6.19

После запуска контейнера необходимо выставить следующее значение в сервисе Configurator.

ADDITIONAL_SERVICES_USAGE = "luna_matcher_proxy":true

Масштабирование системы#

Все сервисы LP линейно масштабируемы и могут располагаться на нескольких серверах.

Можно запустить дополнительные контейнеры с сервисами LP для повышения производительности и отказоустойчивости. Количество сервисов и характеристики серверов зависят от решаемой задачи.

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

Для распределения запросов среди запущенных экземпляров сервисов используются балансировщики. Этот подход обеспечивает требуемую скорость обработки и требуемый уровень отказоустойчивости для конкретных задач клиента. В случае отказа узла система не остановится: запросы перераспределятся на другой узел.

На рисунке ниже показано, как два экземпляра сервиса Faces балансируются посредством Nginx. Nginx получает запросы на порту 5030 и направляет их экземплярам Faces. Сервисы Faces запущены на портах 5031 и 5032.

Балансирование сервиса Faces
Балансирование сервиса Faces

Крайне рекомендуется регулярно создавать резервные копии баз данных на отдельном сервере независимо от уровня отказоустойчивости системы. Это защитит от потери данных в непредвиденных случаях.

Очереди сообщений, базы данных и балансировщики, используемые LUNA PLATFORM - это продукты сторонних разработчиков. Их необходимо конфигурировать в соответствии с рекомендациями их поставщиков.

Сервисы Remote SDK и Python Matcher выполняют наиболее ресурсозатратные операции.

Сервис Remote SDK выполняет математическое преобразование изображений и извлечение биометрических шаблонов. Эти операции требуют значительных вычислительных мощностей. Для вычислений можно использовать как CPU, так и GPU.

Использование GPU предпочтительно, т.к. обработка запросов происходит эффективнее. Однако, поддерживаются не все типы видеокарт.

Сервис Python Matcher выполняет сравнение по спискам. Сравнение требует ресурсов CPU, однако также следует выделить максимально возможный объем оперативной памяти под каждый экземпляр Python Matcher. RAM используется для хранения биометрических шаблонов, полученных из базы данных. Таким образом, сервису Python Matcher не требуется запрашивать каждый БШ из базы данных.

При распределении экземпляров на нескольких серверах следует учитывать производительность каждого сервера. Например, если крупная задача выполняется несколькими экземплярами Python Matcher, а один из них находится на сервере с низкой производительностью, выполнение всей задачи в целом может замедлиться.

Обратите внимание, что для каждого экземпляра сервиса можно задать количество "рабочих процессов". Чем больше количество "рабочих процессов", тем больше ресурсов и памяти потребляется экземпляром сервиса. См. подробную информацию в разделе "Рабочие процессы" в руководстве администратора LUNA PLATFORM.

Nginx#

Nginx требуется при использовании нескольких экземпляров сервисов LUNA PLATFORM.

Конфигурация Nginx#

Конфигурационный файл Nginx включает в себя параметры для балансировки запросов в API, Faces, Image Store и Events.

Проверьте конфигурационный файл "/var/lib/luna/current/extras/conf/nginx.conf" перед запуском NGINX.

Nginx слушает запросы на указанных портах и отправляет запросы доступным экземплярам сервисов. В конфигурационном файле Nginx указаны следующие порты и серверы.

Имя сервиса Порт в Nginx Порты для запущенных сервисов
API 5000 5001-5004
Faces 5030 5031-5034
Image Store 5020 5021-5024
Events 5040 5041-5044

Запуск контейнера Nginx#

Примечание. Требуется сконфигурировать файл для использования с запущенными сервисами.

Используйте команду docker run со следующими параметрами для запуска контейнера Nginx:

docker run \
-v /etc/localtime:/etc/localtime:ro \
-v /var/lib/luna/current/extras/conf/nginx.conf:/etc/nginx/nginx.conf \
--name=nginx \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/nginx:1.17.4-alpine

-v /var/lib/luna/current/extras/conf/nginx.conf:/etc/nginx/nginx.conf - конфигурационный файл Nginx, используемый для запуска Nginx.

См. пример конфигурационного файла Nginx для запуска большего количества экземпляров сервисов здесь:

/var/lib/luna/current/extras/conf/nginx.conf

Запуск нескольких контейнеров#

Для запуска нескольких экземпляров одного и того же сервиса LP необходимо выполнить два шага.

  1. Запустить несколько контейнеров этого сервиса

Необходимо запустить требуемое количество сервисов, используя соответствующую команду для каждого сервиса.

Например, для сервиса API необходимо запустить следующую команду с обновленными параметрами.

docker run \
--env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=<port> \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/logs/<folder_name>:/srv/logs \
--name=<name> \
--restart=always \
--detach=true \
--network=host \
dockerhub.visionlabs.ru/luna/luna-api:v.6.19.4

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

--env=PORT=<port> - порты, указываемые для схожих контейнеров, должны быть разными. Необходимо задать доступный порт для экземпляра. Например, "5001", "5002". Порт "5000" будет задан для балансировщика Nginx.

/tmp/logs/<folder_name>:/srv/logs - папки для логов должны быть с разными именами, чтобы не смешивались записи разных экземпляров сервиса.

--name=<container_name> - запущенный контейнер должен иметь другое имя, т.к. нельзя запускать два контейнера с одним и тем же именем. Например, "api_1", "api_2".

--gpus device=0 - сервисы CORE обычно используют разные устройства GPU. Таким образом необходимо указывать разные номера устройств.

  1. Настройте балансировщик (например, Nginx) для маршрутизации запросов по сервисам.

Для каждого масштабированного сервиса LP необходимо задать порт, на котором Nginx будет слушать запросы сервисам и реальные порты каждого экземпляра сервиса, куда Nginx будет перенаправлять запросы.

Пример конфигурационного файла Nginx можно посмотреть здесь:

“/var/lib/luna/current/extras/conf/nginx.conf”.

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

Повышение производительности#

Следуйте этим шагам, если есть необходимость увеличить производительность LUNA PLATFORM в Docker-контейнерах.

Политики безопасности Docker накладывают ограничения на сетевое взаимодействие сервисов LP. При выполнении действий, приведенных ниже, и отключении этих политик новое сетевое соединение Docker-контейнеров будет устанавливаться приблизительно на 20% быстрее.

Изменение настроек может отрицательно сказаться на безопасности. Не изменяйте настройки, если плохо разбираетесь в работе Docker.

Перед выполнением приведенных ниже действий необходимо установить Docker. См. "Установка Docker".

1) Добавьте параметры --network=host --security-opt seccomp=unconfined к запуску каждого контейнера сервисов LP. Команды запуска описаны в разделе "Запуск сервисов"

Ниже приведен пример для сервиса Faces.

docker run --env=CONFIGURATOR_HOST=127.0.0.1 \
--env=CONFIGURATOR_PORT=5070 \
--env=PORT=5031 \
--env=WORKER_COUNT=1 \
--env=RELOAD_CONFIG=1 \
--env=RELOAD_CONFIG_INTERVAL=10 \
-v /etc/localtime:/etc/localtime:ro \
--name=luna-faces1 \
--restart=always \
--detach=true \
--network=host \
--security-opt seccomp=unconfined \
dockerhub.visionlabs.ru/luna/luna-faces:v.4.8.28

2) Добавьте "userland-proxy": false в конфигурацию Docker.

Создайте конфигурационный файл для Docker.

echo 'DOCKER_OPTS="--config-file=/etc/docker/daemon.json"' > /etc/default/docker

Создайте файл.

vi /etc/docker/daemon.json

Добавьте следующую опцию в открытый файл.

{
     "userland-proxy": false
}

Перезапустите Docker.

systemctl restart docker

Внешняя база данных#

В данном разделе описаны команды, необходимые для конфигурации внешней PostgreSQL для работы с LP. Внешний означает, что уже существует рабочая база данных и очередь сообщений, и их необходимо использовать в LP.

Необходимо указать внешнюю базу данных и очередь сообщений в конфигурациях сервисов LP.

Пропустите этот раздел, если используете PostgreSQL и RabbitMQ из Docker-контейнеров!

После того, как все команды из этого раздела будут выполнены, вернитесь к разделу "Configurator".

Пользователь базы данных и другие параметры могут различаться. Учитывайте это при выполнении команд.

В разделах ниже описано создание баз данных. Используйте скрипт "db_create.py" для создания структуры таблиц после создания самих таблиц. Запуск скрипта из контейнера описан для каждого сервиса в разделах выше. Например, см. раздел "Создание таблиц базы данных Faces".

Создание пользователя PostgreSQL#

Откройте директорию.

cd /var/

Создайте пользователя базы данных.

runuser -u postgres -- psql -c 'create role luna;'

Присвойте пользователю пароль.

runuser -u postgres -- psql -c "ALTER USER luna WITH PASSWORD 'luna';"

Создание базы данных Configurator#

Создайте базу данных для сервиса Configurator. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_configurator;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_configurator TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание базы данных Accounts#

Создайте базу данных для сервиса Accounts. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_accounts;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_accounts TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание базы данных Handlers#

Создайте базу данных для сервиса Handlers. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_handlers;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_handlers TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание базы данных Backport 3#

Создайте базу данных для сервиса Backport 3. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_backport3;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_backport3 TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание базы данных Faces#

Создайте базу данных для сервиса Faces. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_faces;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_faces TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание функции VLMatch для БД Faces#

Сервис Faces требует добавления дополнительной функции VLMatch к используемой базе данных. LUNA PLATFORM не может выполнять вычисления по сравнению биометрических шаблонов без этой функции.

Функцию VLMatch можно добавить в базу данных PostgreSQL или Oracle.

Библиотека VLMatch компилируется для конкретной версии базы данных.

Не используйте библиотеку, созданную для другой версии базы данных. Например, библиотеку, созданная для PostgreSQL версии 12 нельзя использовать для PostgreSQL версии 9.6.

В данном разделе описывается создание функции для PostgreSQL.

Инструкция для базы данных Oracle приведена в разделе "VLMatch для Oracle".

Компиляция VLMatch#

Все файлы, требуемые для компиляции расширения, заданного пользователем (UDx), в VLMatch, можно найти в следующей директории:

/var/lib/luna/current/extras/VLMatch/postgres/

В следующей инструкции описана установка для PostgreSQL 12.

Для компиляции функции VLMatch UDx необходимо:

  • убедиться в том, что PostgreSQL требуемой версии установлена и запущена.

  • установить llvm-toolset-7-clang, необходимый для postgresql12-devel, из репозитория centos-release-scl-rh.

yum -y install centos-release-scl-rh
yum -y --enablerepo=centos-sclo-rh-testing install llvm-toolset-7-clang
  • установить epel-release для доступа к расширенному репозиторию пакета
yum -y install epel-release
  • установить окружение для разработки.
yum -y install postgresql12-server postgresql12-devel 
  • установить пакет gcc-c++. Необходима версия 4.8 или выше.
yum -y install gcc-c++.x86_64 
  • установить CMAKE. Необходима версия 3.5 или выше.

  • открыть скрипт make.sh в текстовом редакторе. Он включает в себя пути к используемой на данный момент версии PostgreSQL. Измените следующие значения (при необходимости):

SDK_HOME задает путь к домашней директории PostgreSQL. По умолчанию это /usr/pgsql-12/include/server;

LIB_ROOT задает путь к библиотечной корневой директории PostgreSQL. По умолчанию это /usr/pgsql-12/lib.

Откройте директорию скрипта make.sh и запустите его:

cd /var/lib/luna/current/extras/VLMatch/postgres/ 
chmod +x make.sh
./make.sh

Добавление функции VLMatch в базу данных Faces#

Функцию VLMatch необходимо применить в базу данных PostgreSQL.

Определите функцию в базе данных Faces:

sudo -u postgres -h 127.0.0.1 -- psql -d luna_faces -c "CREATE FUNCTION VLMatch(bytea, bytea, int) RETURNS float8 AS 'VLMatchSource.so', 'VLMatch' LANGUAGE C PARALLEL SAFE;"

Протестируйте функцию, отправив следующий запрос в базу данных сервиса:

sudo -u postgres -h 127.0.0.1 -- psql -d luna_faces -c "SELECT VLMatch('\x1234567890123456789012345678901234567890123456789012345678901234'::bytea, '\x0123456789012345678901234567890123456789012345678901234567890123'::bytea, 32);"

База данных должна вернуть результат "0.4765625".

Создание базы данных Events#

Создайте базу данных для сервиса Events. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_events;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_events TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Создание функции VLMatch для БД Events#

Сервис Events требует добавления дополнительной функции VLMatch к используемой базе данных. LUNA PLATFORM не может выполнять вычисления по сравнению биометрических шаблонов без этой функции.

Функцию VLMatch можно добавить в базу данных PostgreSQL.

Библиотека VLMatch компилируется для конкретной версии базы данных.

Не используйте библиотеку, созданную для другой версии базы данных. Например, библиотеку, созданная для PostgreSQL версии 12 нельзя использовать для PostgreSQL версии 9.6.

В данном разделе описывается создание функции для PostgreSQL. Если используется база данных PostgreSQL, библиотека уже была создана и перемещена в процессе запуска сервиса Faces. См. раздел "VLMatch для PostgreSQL".

Добавление функции VLMatch в базу данных Events#

Функцию VLMatch необходимо применить в базе данных PostgreSQL.

Определите функцию в базе данных Events:

sudo -u postgres -h 127.0.0.1 -- psql -d luna_events -c "CREATE FUNCTION VLMatch(bytea, bytea, int) RETURNS float8 AS 'VLMatchSource.so', 'VLMatch' LANGUAGE C PARALLEL SAFE;"

Протестируйте функцию:

sudo -u postgres -h 127.0.0.1 -- psql -d luna_events -c "SELECT VLMatch('\x1234567890123456789012345678901234567890123456789012345678901234'::bytea, '\x0123456789012345678901234567890123456789012345678901234567890123'::bytea, 32);"

База данных должна вернуть результат "0.4765625".

Установка PostGIS для Events#

Сервис Events требует PostGIS для работы с координатами.

В данной инструкции описывается установка PostGIS для базы данных PostgreSQL 12. Версия PostGIS зависит от версии PostgreSQL.

  • Установите epel-release для доступа к расширенному репозиторию (необходимо для RabbitMQ и других зависимостей)
yum -y install epel-release
  • Установите PostGIS:
yum -y install postgis25_12
  • Активируйте PostGIS в базe данных:
sudo -u postgres -h 127.0.0.1 -- psql -d luna_events -c "CREATE EXTENSION postgis;"; 

См. дополнительную информацию о PostGIS на сайте:

https://postgis.net/

Создание базы данных Tasks#

Создайте базу данных для сервиса Tasks. Предполагается, что пользователь базы данных уже создан. Последовательность действий соответствует командам ниже:

  • Откройте директорию.
cd /var/
  • Создайте базу данных.

  • Присвойте привилегии пользователю базы данных.

  • Разрешите пользователю авторизацию в базе данных.

runuser -u postgres -- psql -c 'CREATE DATABASE luna_tasks;'
runuser -u postgres -- psql -c 'GRANT ALL PRIVILEGES ON DATABASE luna_tasks TO luna;'
runuser -u postgres -- psql -c 'ALTER ROLE luna WITH LOGIN;'

Компиляция библиотеки VLMatch для Oracle#

В данном разделе описано построение библиотеки VLMatch и создание новой функции в базе данных Oracle.

Для компиляции функции VLMatch UDx необходимо:

  • Установить требуемое окружение, см. требования:

  • Установите gcc/g++ 4.8 или выше

yum -y install gcc-c++.x86_64 
  • Поменяйте переменную SDK_HOME - oracle sdk root (по умолчанию $ORACLE_HOME/bin, проверьте, что переменная окружения $ORACLE_HOME задана) в makefile.
  • Откройте директорию и запустите файл "make.sh":

    • cd /var/lib/luna/current/extras/VLMatch/oracle/
    • chmod +x make.sh
    • ./make.sh
  • Определите библиотеку и функцию внутри базы данных (из консоли базы данных):

CREATE OR REPLACE LIBRARY VLMatchSource AS '$ORACLE_HOME/bin/VLMatchSource.so';
CREATE OR REPLACE FUNCTION VLMatch(descriptorFst IN RAW, descriptorSnd IN RAW, length IN BINARY_INTEGER)
  RETURN BINARY_FLOAT 
AS
  LANGUAGE C
  LIBRARY VLMatchSource
  NAME "VLMatch"
  PARAMETERS (descriptorFst BY REFERENCE, descriptorSnd BY REFERENCE, length UNSIGNED SHORT, RETURN FLOAT);

Протестируйте функцию посредством вызова (из консоли базы данных):

SELECT VLMatch(HEXTORAW('1234567890123456789012345678901234567890123456789012345678901234'), HEXTORAW('0123456789012345678901234567890123456789012345678901234567890123'), 32) FROM DUAL;

Результат должен быть равен "0.4765625".