Обновление AW¶
Внимание Перед переходом на релиз 1.39 требуется изучить рекомендации по обновлению предыдущих версий (начиная от вашей текущей).
Внимание!!! Перед обновлением на версию 1.38 и старше необходимо обновиться на 1.37.4.
Внимание Перед переходом на релиз 1.39 настоятельно рекомендуется выполнить резервное копирование БД AW и проверить наличие свободного места на диске (см. ниже).
Технические изменения в выпуске AW 1.39.*¶
Обновление PostgreSQL до версии 18¶
Все базы данных PostgreSQL в составе AW (основная БД db, БД Airflow etl-airflow-db, БД MLflow etl-mlflow-db) переведены на PostgreSQL 18.
Перенос данных выполняется автоматически при первом запуске новой версии с помощью служебных одноразовых сервисов db-upgrade, etl-airflow-db-upgrade и etl-mlflow-db-upgrade. Сервисы баз данных запускаются только после успешного завершения соответствующего сервиса обновления — при ошибке обновления база не стартует, а приложение не увидит частично перенесённые данные.
Обновление выполняется в режиме копирования: данные каждой базы копируются в новый каталог, а старый каталог не изменяется и остаётся резервной копией.
| База данных | Старый каталог (резервная копия) | Новый каталог | Переменная |
|---|---|---|---|
| Основная БД (PostgreSQL 13) | ../db/postgres | ../db/postgres18 | AW_DB_POSTGRES18_DIR |
| БД Airflow (PostgreSQL 12) | ../db/airflow | ../db/airflow18 | AW_DB_AIRFLOW_POSTGRES18_DIR |
| БД MLflow (PostgreSQL 15) | ../db/mlflow | ../db/mlflow18 | ML_FLOW_POSTGRES18_DIR |
Внимание!! На время обновления на диске хранятся две копии каждой базы. Перед обновлением убедитесь, что на файловой системе нового каталога достаточно свободного места:
Например, для базы размером 40 ГиБ требуется около 60 ГиБ свободного места. Оценить размер баз и свободное место можно командами на серверах с соответствующими БД (из рабочей директории приложения, по умолчанию /opt/aw/app):
Если места недостаточно, обновление не начнется (сервис *-upgrade завершится с ошибкой, в его логе будет указано требуемое и доступное место). В этом случае освободите место на диске или укажите для нового каталога путь на другом диске с помощью переменных AW_DB_POSTGRES18_DIR, AW_DB_AIRFLOW_POSTGRES18_DIR, ML_FLOW_POSTGRES18_DIR в секции env соответствующего сервера в конфигурации профиля.
На большой базе первый запуск после обновления занимает больше времени, чем обычно, — в это время копируются данные. Ход обновления можно посмотреть в логе сервиса на сервере с БД:
Лог также сохраняется в файл pg-upgrade-to-18.log в новом каталоге базы. Повторный запуск безопасен: уже обновленные базы пропускаются.
После нескольких дней стабильной работы старые каталоги (../db/postgres, ../db/airflow, ../db/mlflow) можно удалить вручную, чтобы освободить место.
Откат. Так как старые каталоги не изменяются, для отката достаточно остановить AW и развернуть предыдущую версию. Данные, записанные после обновления, при откате будут потеряны, поэтому откат имеет смысл только сразу после обновления.
Переход на аутентификацию SCRAM¶
В PostgreSQL 18 метод шифрования паролей md5 объявлен устаревшим, поэтому AW переведен на scram-sha-256:
- pgbouncer обновлен до версии 1.25 и работает с
AUTH_TYPE: scram-sha-256; - при переносе базы пароль суперпользователя перешифровывается из md5 в
scram-sha-256(сам пароль не меняется, берется из переменных.env); - если в базе есть созданные вручную роли с md5-паролями, их список выводится в лог сервиса
db-upgrade. Пароли таких ролей рекомендуется перешифровать командойALTER ROLE ... WITH PASSWORD '...'.
Ошибка FATAL: server login failed: wrong password type в логах pgbouncer или приложения означает, что используется pgbouncer со старыми настройками. Убедитесь, что используется docker-compose.yml из нового релиза.
Изменения в конфигурации¶
Добавлены сервисы:
db-upgrade,etl-airflow-db-upgrade,etl-mlflow-db-upgrade— одноразовые сервисы обновления PostgreSQL до версии 18 (см. выше);code-model-changes— обработка изменений кодовых моделей;mcp— MCP-сервер AW, доступен по адресу<адрес AW>/mcp.
Внимание!! Если вы используете измененный конфигурационный файл web-сервера Nginx (по умолчанию /opt/aw/app/docker/nginx/nginx.conf на сервере с контейнером frontend) или внешний Nginx, добавьте в него проксирование на сервис mcp:
location ~ ^/mcp {
proxy_pass http://mcp;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
}
Добавлены переменные:
| Переменная | Описание | Значение по умолчанию |
|---|---|---|
| AW_DB_POSTGRES18_DIR | Каталог основной БД (PostgreSQL 18) | ../db/postgres18 |
| AW_DB_AIRFLOW_POSTGRES18_DIR | Каталог БД Airflow (PostgreSQL 18) | ../db/airflow18 |
| ML_FLOW_POSTGRES18_DIR | Каталог БД MLflow (PostgreSQL 18) | ../db/mlflow18 |
| AW_WIDGET_MAX_RESULT_BYTES | Предел объема результата запроса виджета в ClickHouse, байт. 0 — лимит выключен | 268435456 (256 МиБ) |
| AW_WIDGET_MAX_MEMORY_USAGE | Предел памяти одного запроса виджета в ClickHouse, байт. 0 — действует профиль пользователя ClickHouse | 0 |
| AW_WIDGET_PHP_MEMORY_LIMIT | Предел памяти процесса PHP на время запроса виджета (-1 — без предела) | 2G |
| MLFLOW_SERVER_ALLOWED_HOSTS | Разрешенные значения заголовка Host для MLflow (список через запятую, * — проверка отключена) |
* |
| MLFLOW_AUTH_DB_URI | URI БД прав доступа MLflow | postgresql://mlflow:mlflow@etl-mlflow-db:5432/mlflow_permissions |
Лимиты AW_WIDGET_* применяются только к интерактивному получению данных виджета (данные, шапка, итоги) и не затрагивают экспорт и синхронизацию. При срабатывании лимита пользователь получает ошибку, усеченные данные не отображаются и не кэшируются.
Автоматизированное обновление конфигурационного файла профиля¶
Команда update. awctl update - анализирует текущий конфигурационный файл профиля, генерирует конфигурационный файл для новый версии AW и переносит все изменения сделанные в старом конфигурационном файле.
Обновление конфигурации профиля AW¶
Выполняем команду:
- /opt/awctl/awctl update --version <номер новой версии AW> <имя профиля>
Результатом выполнениия команды станет новый конфигурационный файл профиля с перенесенными изменениями из старого. Рез. копия старого конфигурационного профиля сохраняется под именем config.<старая версия AW>.yml.
- рекомендуется проверить новый конфигурационный файл - корректность переноса секций env, настроек aw_host, aw_user и т.п.
- выполнить команду gen -
/opt/awctl/awctl gen <имя профиля> - выполнить команду install -
/opt/awctl/awctl install <имя профиля> - выполнить команду migrate -
/opt/awctl/awctl migrate <имя профиля>
Ручное обновление конфигурационного файла профиля¶
Подготовка нового конфигурационного файла профиля¶
Т.к. кол-во сервисов в составе AW может меняться от версии к версии, при обновлении распределенной установки требуется сгенерировать распределение сервисов по серверам заново:
/opt/awctl/awctl init --preset <кол-во серверов> --release-path <путь к архиву с релизом AW> <имя профиля>
- aw_home, aw_host, aw_ssh_host, aw_user, aw_ssh_user, aw_ssh_password и т.п. для каждого сервера
- секцию env для каждого сервера, если используется
- значения with_extra_hosts, with_traefik из секции aw
Сделать это можно с помощью любого удобного текстового редактора.
Обновление AW¶
Для обновления установки AW выполните следующие действия:
-
Генерируем конфигурационные файлы для серверов:
-
При обновлении с версия 1.2* - останавливаем AW:
Удаляем содержимое директории db/rabbitmq
-
Выполняем установку AW:
Если установка выполняется из полного релизного архива (release-<версия AW>.tar), то выполнение команды может занять длительное время. -
Выполняем миграции: