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

Распределенная установка AW

Особенности

При распределенной установке AW на несколько серверов необходимо предоставить общий доступ к директории file_storage сервисам, работающим на разных серверах. Для этого один из серверов назначают сервером NFS и настраивают доступ для директории file_storage для остальных серверов.

Системные требования

Убедитесь в том что подготовленные сервера удовлетворяют системным требованиям:

Подготовка

Установка зависимостей

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

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

Инструкция по настройке пользователя.

1. Установка и настройка серверов

Устанавливаем на сервера выбранный дистрибутив Linux, выполняем установку docker и docker compose (или docker-compose-plugin) согласно документации.

2. Установка 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>'

Учетные данные для загрузки дистрибутива совпадают с логином и паролем выданным при заключении договора.

3. Создаем профиль awctl

Профиль - именованная экземпляр конфигурации установки AW.

Для создания начальной конфигурации нужно выполнить следующие подготовительные шаги:

  1. Загрузить установочный архив AW на управляющую машину.
  2. Инициализировать профиль с указанием пути к установочному архиву: /opt/awctl/awctl init --preset <кол-во серверов> --release-path <путь_к_архиву> <имя_профиля>

Далее редактируем конфигурационный файл профиля:

  1. Открываем файл $HOME/.awctl/profiles/<имя_профиля>/config.yml для редактирования
  2. Настраиваем секцию aw (устанавливаем значение переменных aw_version, aw_home),
  3. Добавляем в секцию hosts сервера и распределяем сервисы (См. пример),
  4. К серверам добавляем секцию env и задаем значение различных параметров:

    1. Адрес Системы:FRONTEND_URL;
    2. Настоятельно рекомендуется изменить пароль для БД и другие переменные отвечающие за авторизацию сервисов:

    # Токен авторизации для внутренних коммуникаций системы
    INTERNAL_API_TOKEN: 1
    # Пароль пользователя
    DB_PASSWORD: enter4z
    # Логин и пароль пользователя-администратора Airflow. С таким пользователем в UI Airflow
    # ходят пользователи, которые являются админами в AW
    ETL_AIRFLOW_USER: admin
    ETL_AIRFLOW_PASSWORD: 1
    # Логин и пароль пользователя Airflow, под которым в UI Airflow ходят обычные пользователи
    # (не админы)
    ETL_AIRFLOW_AW_USER: aw
    ETL_AIRFLOW_AW_PASSWORD: 1
    # JWT secret, используемый для генерации токенов доступа к внутренним ресурсам
    AUTH_BRIDGE_SECRET: a7f67106d9234324b3a28cb618e78fc0
    
    Новые значения следует поместить в конфигурационный файл профиля в секцию env для каждого сервера.

  5. Сохраняем изменения,

  6. Генерируем .env и docker-compose файлы с помощью команды /opt/awctl/awctl gen <имя_профиля>

4. Создаем необходимые директории

Выполняем команду /opt/awctl/awctl md <имя_профиля> для создания необходимой структуры каталогов.

5. Выполняем установку 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 
Скачиваю образы
....

6. Выполняем миграции AW

Выполняем миграции с помощью команды /opt/awctl/awctl migrate <имя_профиля>

7. Окончание установки.

В окне интернет браузера переходим по адресу, указанному в переменной `FRONTEND_URL`.
В случае успешной установки отобразится интерфейс AW, пройти аутентификацию в только что установленной системе можно специальным пользователем:

```
Имя пользователя: tech_admin
Пароль по умолчанию: 123456
```

Примеры конфигурации 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.

---
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
      INTERNAL_API_TOKEN: MySuperSecretToken
      DB_PASSWORD: SuperDBPassword!
      ETL_AIRFLOW_USER: admin
      ETL_AIRFLOW_PASSWORD: SecrureAirflowAdminPass
      ETL_AIRFLOW_AW_USER: aw
      ETL_AIRFLOW_AW_PASSWORD: SecureAirflowUserPass
      AUTH_BRIDGE_SECRET: aedf85f86fee4b25aca9466a7de25c06
    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
    env:
      INTERNAL_API_TOKEN=: ySuperSecretToken
      DB_PASSWORD: SuperDBPassword!
      ETL_AIRFLOW_USER: admin
      ETL_AIRFLOW_PASSWORD: SecrureAirflowAdminPass
      ETL_AIRFLOW_AW_USER: aw
      ETL_AIRFLOW_AW_PASSWORD: SecureAirflowUserPass
      AUTH_BRIDGE_SECRET: aedf85f86fee4b25aca9466a7de25c06
    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