Распределенная установка AW
Общие сведения
Форма распространения
Продукт AW состоит из множества взаимодейcтвующих сервисов. Форма распространения docker-образы и docker-compose файлы. AW рассчитан на функционирование в окружении ОС Linux.
Особенности
При распределенной установке AW на несколько серверов необходимо предоставить общий доступ к директории file_storage сервисам, работающим на разных серверах. Для этого один из серверов назначают сервером NFS и настраивают доступ для директории file_storage для остальных серверов.
Список сервисов
Сервисы входящие в состав AW:
- frontend - UI-интерфейс пользователя (javascript приложение)
- backend - серверная часть приложения, необходимая для функционирования работы системы
- widget-export - выгрузка данных виджетов в различные форматы (csv, xlsx и др.)
- model-changes - обработка изменений в структуре модели, если они имеются
- model-sync - пост-обработка синхронизаций модели
- websocket - отправка уведомлений пользователям
- clear-storage - очистка архивных данных
- puppeteer - выполнение скриншотов объектов системы (для отправки на почту или альтернативного отображения списка объектов)
- cron - выполнение фоновых задач по расписанию
- db - основная СУБД, содержащая мета-данные объектов системы
- pgbouncer - пуллер соединений для сервиса db
- clickhouse-server - аналитическая СУБД, которая хранит синхронизированные данные моделей
- rabbitmq - брокер сообщений, используемый для общения между сервисами
- memcached - кеширование различной информации используемой системой
- etl-broker - брокер сообщений, используемый для общения между сервисами ETL
- etl-airflow-db - база данных для Apache Airflow
- etl-airflow - UI и API сервер Apache Airflow
- etl-spark - сервер и воркеры Apache Spark
- etl-api - управление и взаимодействие с Apache Airflow
- etl-data-preview - сервис отображения данных моделей
- java-puller - обработка и извлечение данных из различных СУБД
- odata-puller - обработка и извлечение данных по протоколу ODATA
- file-puller - обработка и извлечение данных из файловых источников
- etl-pusher - загрузка конечных данных модели из parquet-файлов в ClickHouse
- etl-tasks - выполнение фоновых задач etl-сервисов
- etl-stats - получение статистики по моделям, необходимых для оптимизации работы системы
- etl-mlflow - инструменты mlflow
- etl-mlflow-db - бд для инструметнов mlflow
- auth-bridge - прозрачная аутентификация между компонентами системы
- data-master - интеграционный сервис для внутренних нужд системы
- minio - s3 совместимое хранилище для хранения данных и их передачи между компонентами системы
- minio-init - ининциализация политик (правил доступа) для minio
- diag - сервис диагностики, позволяющий определить доступность и правильность работы сервисов
- clickhouse-parser - сервис трансформации формул виджетов в sql-выражения
- preview - сервис формирования превью изображений объектов системы (для альтернативного отображения списка объектов)
- sender - сервис обработки запросов на формирование и отправку email.
Подготовка
Установка зависимостей
Для работы AW необходимо установить компоненты Docker и docker compose согласно документации
- Установка Docker
- Установка docker compose
- Для распределенной установки AW: установка компонентов NFS
1. Установка и настройка серверов
Устанавливаем на сервера выбранный дистрибутив Linux, выполняем установку docker и docker compose (или docker-compose-plugin) согласно документации.
На сервер BACKEND выполняем установку компонентов NFS-сервера согласно документации.
2. Установка awctl
Выполняем установку awctl согласно документации ( документация awctl распространяется вместе с дистрибутивом утилиты). Редактируем файл $HOME/.awctl.yml:
aw_registry: registry.analyticworkspace.ru/aw
registry_user: '<username>'
registry_password: '<userpass>'
download_url: https://registry.analyticworkspace.ru/release/
download_user: '<username>'
download_password: '<userpass>'
Учетные данные для загрузки дистрибутива можно получить у менеджера.
2.1 Автономная установка с использованием awctl
В случае отсутствия доступа к https://registry.analyticworkspace.ru/release/ для продолжения установки нужно выполнить следующие подготовительные шаги.
- Загрузить устаноочный архив AW на управляющую машину.
- Инициализировать профиль с указанием пути к установочному архиву:
/opt/awct/awctl init --release-path <путь_к_архиву> <имя_профиля>
3. Создаем профиль awctl
Профиль - именованная экземпляр конфигурации установки AW.
Выполняем команду /opt/awctl/awctl init --version <версия_AW> --preset <кол-во сервереов от 1 до 3> <имя_профиля> для создания начальной конфигурации 1. Открываем файл $HOME/.awctl/profiles/<имя_профиля>/config.yml для редактирования 2. Настраиваем секцию aw (устанавливаем значение переменных aw_version, aw_home), 3. Добавляем в секцию hosts сервера и распределяем сервисы (См. Пример, 4. Сохраняем изменения, 5. Генерируем .env и docker-compose файлы с помощью команды /opt/awctl/awctl gen <имя_профиля>
4. Создаем необходимые директории
Выполняем команду /opt/awctl/awctl md <имя_профиля> для создания необходимой структуры каталогов.
5. Настраиваем NFS
Выполняем настройку NFS сервера и клиента (нижепреведенные команды рассчитаны для случая установки AW в директорию /opt/aw, значение aw_home: /opt/aw/app):
-
на сервере BACKEND (он же сервер NFS) добавляем в /etc/exports строку вида:
/opt/aw/file_storage IP_адрес_nfs_клиента(rw,sync,no_root_squash,no_subtree_check)
сохраняем изменения, выполняем командуsudo exportfs -ra
-
на сервере etl монтируем NFS, добавляем в /etc/fstab строку вида:
IP_адрес_сервера_NFS:/opt/aw/file_storage /opt/aw/file_storage nfs defaults 0 0
, сохраняем изменения и далее выполняем командуsudo mount /opt/aw/file_storage
.
6. Выполняем установку AW
Выполняем установку компонентов AW с помощью команды /opt/awctl/awctl install <имя_профиля>.
Пример вывода работы команды (вывод сокрашен):
/opt/awctl/awctl install myaw
Check if all requred files is available
docker-compose.yml is on place
docker-compose.prod.yml is on place
.env is on place
Release is on place
Начинаю установку на AW на хост: backend
Create AW home dir: /opt/aw/app for host: backend
Create a backup for configuration files in: /opt/aw/app for host: backend
Backup AW configuration from: /opt/aw/app for host: backend
tar: Removing leading `/' from member names
Копирую файлы...
Выполняю авторизацию в docker registry - registry.analyticworkspace.ru/aw
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/bars/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Создаю необходимые директории...
Create file_storage dir
Create db dir
Create logs dir
Create jars dir
Скачиваю образы
....
....
Останавливаю контейнеры если есть запущенные
....
Check if all requred files is available
docker-compose.yml is on place
docker-compose.prod.yml is on place
.env is on place
Release is on place
Начинаю установку на AW на хост: etl
Create AW home dir: /opt/aw/app for host: etl
Create a backup for configuration files in: /opt/aw/app for host: etl
Backup AW configuration from: /opt/aw/app for host: etl
tar: Removing leading `/' from member names
Копирую файлы...
Выполняю авторизацию в docker registry - registry.analyticworkspace.ru/aw
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/bars/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Создаю необходимые директории...
Create file_storage dir
Create db dir
Create logs dir
Create jars dir
Скачиваю образы
....
7. Выполняем миграции AW
Выполняем миграции с помощью команды /opt/awctl/awctl migrate <имя_профиля>
Примеры конфигурации awctl для распределенной установки
Пример распределения сервисов при распределенной установки AW на 2 сервера:
- backends, с IP адресом 192.168.0.110, пользователь для доступа по ssh - awuser, порт 22, директория для установки /opt/aw/app.
- etl, с IP адресом 192.168.0.120, пользователь для доступа по ssh - awuser, порт 22, директория для установки /opt/aw/app.
В качестве имени профиля будем использовать myaw. В качестве NFS сервера будет выступать сервер backends а в качестве клиента etl.
---
aw:
aw_version: 1.30
aw_compose_file: docker-compose.yml:docker-compose.prod.yml
aw_docker_compose_separator: ':'
aw_home: /opt/aw/app
hosts:
backend:
aw_ssh_user: awuser
aw_home: '/opt/aw/app'
aw_host: 192.168.0.110
dns:
- 77.88.8.8
- 77.88.8.1
env:
FRONTEND_URL: http://aw.example.ru
services:
- frontend
- backend
- widget-export
- clear-storage
- model-changes
- model-sync
- websocket
- puppeteer
- db
- pgbouncer
- rabbitmq
- memcached
- auth-bridge
- data-master
- minio
- minio-init
- diag
- clickhouse-parser
- preview
- sender
- file-builder
- cron
- swagger
- clickhouse-server
etl:
aw_host: 192.168.0.120
aw_home: '/opt/aw/app'
aw_ssh_user: awuser
aw_ssh_port: 22
services:
- etl-broker
- etl-airflow-db
- etl-airflow
- etl-spark
- etl-api
- etl-data-preview
- etl-tasks
- java-puller
- file-puller
- odata-puller
- etl-pusher
- etl-stats
- etl-mlflow
- etl-mlflow-db
Распределение сервисов при распределенной установке на 2 сервера
BACKEND:
- frontend
- backend
- widget-export
- clear-storage
- model-changes
- model-sync
- websocket
- puppeteer
- db
- pgbouncer
- rabbitmq
- memcached
- auth-bridge
- data-master
- minio
- minio-init
- diag
- clickhouse-parser
- preview
- sender
- file-builder
- cron
- swagger
- clickhouse-server
ETL:
- etl-broker
- etl-airflow-db
- etl-airflow
- etl-spark
- etl-api
- etl-data-preview
- etl-tasks
- java-puller
- file-puller
- odata-puller
- etl-pusher
- etl-stats
- etl-mlflow
- etl-mlflow-db
Распределение сервисов дри распределенной установке на 3 сервера
BACKEND:
- frontend
- backend
- widget-export
- clear-storage
- model-changes
- model-sync
- websocket
- puppeteer
- db
- pgbouncer
- rabbitmq
- memcached
- auth-bridge
- data-master
- minio
- minio-init
- diag
- clickhouse-parser
- preview
- sender
- file-builder
- cron
- swagger
ETL:
- etl-broker
- etl-airflow-db
- etl-airflow
- etl-spark
- etl-api
- etl-data-preview
- etl-tasks
- java-puller
- file-puller
- odata-puller
- etl-pusher
- etl-stats
- etl-mlflow
- etl-mlflow-db
DB (ClickHouse):
- clickhouse-server