Обновление системы с помощью Docker¶
Совет
Ниже приведен пример обновления системы с версии 2.9 на 2.10
Предварительные условия¶
Сервер, на котором размещена обновляемая версия Юниверс DG, имеет доступ к интернету.
Установлен Git.
Установлен Docker Compose (версия выше 1.29).
Проект Юниверс DG был клонирован на сервер.
Обновление системы¶
Предупреждение
Начиная с версии 2.5 был осуществлен переход с Elasticsearch на OpenSearch. Если обновлять ветку, имея поднятый docker, то старый контейнер elasticsearch будет препятствовать дальнейшим запускам. Поэтому рекомендуется выполнить нижеописанные действия
Предупреждение
В версии 2.10 произошло обновление PostgreSQL. Для обновления необходимо выполнить следующие действия.
Примечание
В версии 2.10 произошло обновление Opensearch с версии 2.7.0 на версию 2.14.0. Обновление произойдет автоматически при запуске через обновленный репозитории, предоставленный менеджером компании Юниверс.
Перед обновлением остановите работу образа Docker Compose через команду
docker-compose down
Поднять контейнеры после обновления возможно через команду: docker-compose up --force-recreate -d --remove-orphans. Последняя опция очищает Elasticsearch контейнер
Войдите в репозиторий Gitlab (доступ к репозиторию с дистрибутивом вашего продукта должен быть получен заранее согласно договору поставки).
Переключитесь на ветку release/2.10
Извлеките проект. Команда
git pull
При необходимости, выполните миграцию на Opensearch с потерей или сохранением данных (см. инструкцию ниже).
Перейдите в каталог с кодом. Пример команды:
cd universe-dg-deploy
При необходимости в файле .env, расположенном в корне проекта, измените параметры для БД и параметры портов. Пример параметров ниже.
Для запуска системы используйте команду:
docker-compose up -d
Пример файла .env см. в статье.
Миграция и обновление БД TimescaleDB¶
Создание дампа БД¶
Создайте дамп БД:
sudo docker exec unidata-dg-deploy-postgres-dg-1 pg_dump -U postgres -Fc -d postgres -f tsdb.dump sudo docker cp unidata-dg-deploy-postgres-dg-1:./tsdb.dump ./
Миграция БД на другой сервер¶
Произведите миграцию дампа БД на другой сервер:
docker exec unidata-dg-deploy-postgres-dg-1 dropdb --if-exists -U postgres postgres docker exec unidata-dg-deploy-postgres-dg-1 createdb -U postgres postgres docker cp tsdb.dump unidata-dg-deploy-postgres-dg-1:./tsdb.dump docker exec unidata-dg-deploy-postgres-dg-1 psql -U postgres -d postgres -c "SELECT timescaledb_pre_restore();" docker exec unidata-dg-deploy-postgres-dg-1 pg_restore -U postgres -d postgres --exit-on-error tsdb.dump docker exec unidata-dg-deploy-postgres-dg-1 psql -U postgres -d postgres -c "SELECT timescaledb_post_restore();"
Примечания:
Версия TimescaleDB на целевом сервере должна быть как в исходном.
Обновление версии Postgresql должно проводиться через восстановление дампа БД.
Необходимо запускать только контейнер Postgresql
docker-compose up -d postgres-dg
.Перед импортом дампа необходимо выполнить:
'SELECT timescaledb_pre_restore();' после 'SELECT timescaledb_post_restore();'
.
Обновление TimescaleDB¶
Последовательность обновления: timescale/timescaledb:2.7.0-pg12 -> timescale/timescaledb:2.11.2-pg12 -> timescale/timescaledb:2.11.2-pg15 -> timescale/timescaledb:2.15.0-pg15
Запустите контейнер с последней версией Timescaledb для установленного Postgresql (docker compose up -d postgres-dg).
Выберите желаемую версию TimescaleDB.
Выберите доступный образ.
Сверьтесь с таблицей совместимости версий.
Запустите контейнер с новой версией образа.
Выполните переход на новую версию Timescaledb до подключения к БД:
psql -U postgres -d unidata_dg -c 'ALTER EXTENSION timescaledb UPDATE;'
Создайте дамп БД.
Переименуйте/удалите папку с БД.
Запустите контейнер postgres с новой версией postgres и версией timescaledb как в дампе.
Выполните миграцию БД.
При необходимости используйте вспомогательные запросы:
Доступные версии:
SELECT name, version, installed FROM pg_available_extension_versions WHERE name = 'timescaledb';
Понизить версию:
CREATE EXTENSION timescaledb WITH VERSION '2.7.2';
Проверить версию через psql:
\dx select version();
Обновление PostgreSQL¶
Примечание
Ниже приведен пример обновления PostgreSQL с версии 12 на версию 16.3. Вы также можете воспользоваться официальной документацией PostgreSQL.
Совет
Обратите внимание, что команды должны выполняться из директории, где находится файл docker-compose.yml.
Создайте резервную копию базы данных:
$ docker exec -t unidata-dg-deploy-postgres-dg-1 pg_dump -U postgres -d postgres -F c -b -v -f /backup.dump
Создайте копию в формате sql (на всякий случай):
$ docker exec -t unidata-dg-deploy-postgres-dg-1 pg_dump -U postgres -d postgres > backup.sql
Скопируйте файл дампа из контейнера на хост:
$ docker cp unidata-dg-deploy-postgres-dg-1:/backup.dump ./backup.dump $ docker cp unidata-dg-deploy-postgres-dg-1:/backup.sql ./backup.sql
где:
-U postgres — пользователь базы данных; -d your_database_name — имя базы данных; -F c — формат дампа (custom); -b — включает большие объекты в дамп; -v — включает подробный вывод; -f backup.dump — имя файла дампа.
Остановите и удалите контейнеры:
$ docker-compose down
Удалите старый том данных PostgreSQL:
$ docker volume rm unidata-dg-deploy_dg-postgres-data
Обновите систему.
Восстановите базу данных - запустите только контейнер postgres:
$ docker-compose up -d postgres-dg
Скопируйте файл дампа в контейнер PostgreSQL 16.3:
$ docker cp ./backup.dump unidata-dg-deploy-postgres-dg-1:/backup.dump
Восстановите базу данных из дампа:
$ docker exec -i unidata-dg-deploy-postgres-dg-1 pg_restore -U postgres -d postgres -v /backup.dump
Запустите контейнеры с обновленной конфигурацией:
$ docker-compose up -d
Переход с ElasticSearch на OpenSearch¶
Примечание
Шаги по переходу на OpenSearch требуются, если система Юниверс DG обновляется с версии 2.4 и старше на версию 2.5 и новее. Если переход уже был выполнен - шаги пропускаются
Переход на OpenSearch с потерей данных¶
Поскольку данные не будут перенесены, выполните операцию переиндексации данных, а при наличии правил качества - операцию переприменения данных.
Важные примечания:
Если в качестве хранилища для аудита выбран поисковой движок, журнал событий будет утерян — его невозможно восстановить из БД, даже если она также указана в качестве хранилища.
Переход на OpenSearch с переносом данных¶
В docker-compose конфигурации контейнера Opensearch укажите существующий volume с данными Elasticsearch — dg-elasticsearch-data:/usr/share/opensearch/data.
В случае если необходимо избавиться от упоминания Elastic, то можно оставить volume по умолчанию (dg-opensearch-data), выполнив одно из двух действий:
Клонировать volume. Пример:
docker run --rm \ -v unidata-dg-deploy_dg-elasticsearch-data:/original \ -v unidata-dg-deploy_dg-opensearch-data:/migration \ ubuntu:latest \ bash -c "cp -R /original/* /migration/"
Переименовать volume:
mv /var/lib/docker/volumes/unidata-dg-deploy_dg-elasticsearch-data /var/lib/docker/volumes/unidata-dg-deploy_dg-opensearch-data