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

Распределенная установка 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 согласно документации

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/ для продолжения установки нужно выполнить следующие подготовительные шаги.

  1. Загрузить устаноочный архив AW на управляющую машину.
  2. Инициализировать профиль с указанием пути к установочному архиву: /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