Миграция БД Платформы
При развёртывании Платформы СУБД PostgreSQL развёртывается на том же узле (при одноузловой установке) или группе узлов (при кластерной установке).
Установщик создаёт в СУБД пользователя platform и служебные БД auth_db и authz_db.
Эта инструкция описывает миграцию служебных БД auth_db и authz_db из сервера PostgreSQL, развёрнутого вместе с Платформой, на внешний сервер или в отказоустойчивый кластер, развёрнутый средствами дистрибутива.
Далее сервер PostgreSQL, развёрнутый на узлах Платформы, называется сервером-источником, а сервер, на который выполняется миграция — сервером-приёмником.
|
На период миграции работа Платформы будет приостановлена. |
Перед началом работы
Чтобы сократить время миграции, подготовьте сервер-приёмник заранее:
-
Убедитесь, что сервер имеет виртуальный IP-адрес или доменное имя, всегда указывающие на мастер.
-
Убедитесь, что мастер доступен из сети Платформы по указанному виртуальному IP-адресу или доменному имени.
-
Создайте в СУБД роль для пользователя, который будет владеть служебными БД Платформы. Рекомендуется использовать название
platform:CREATE ROLE platform WITH LOGIN PASSWORD '<password>'; -
Создайте две БД для хранения служебных данных Платформы.
В качестве названий рекомендуется использовать
auth_dbиauthz_db. Владельцем обеих БД должен быть созданный ранее пользователь.CREATE DATABASE <db_name> OWNER platform ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0;
Миграция
На установочном узле Платформы выполните следующие действия:
-
Остановите сервисы:
docker service scale platform-frontend=0 docker service scale api-gateway=0 docker service scale auth-service=0 docker service scale authz-service=0 -
Убедитесь, что все указанные сервисы остановлены:
docker service lsСервис считается остановленным, если в колонке REPLICAS для него выводится значение
0/0.Пример вывода при успешной остановке сервисовID NAME MODE REPLICAS IMAGE PORTS x4g5fw593oc8 api-gateway replicated 0/0 api-gateway:2.179.8 *:3000->3000/tcp huyidwt6leec auth-service replicated 0/0 auth-service:2.179.8 ax0wrrtr1bj0 authz-service replicated 0/0 authz-service:2.179.8 yun0zvik7110 foliage-service replicated 1/1 foliage-service:2.179.8 vtz4c6t0kpiu mgmt replicated 1/1 mgmt-genomu:2.179.8 *:48805->48805/tcp yk4kp3fhvel5 platform-frontend replicated 0/0 platform-frontend:2.179.8 *:80->80/tcp, *:443->443/tcp 0x0omy92690x postgres replicated 1/1 postgres:2.179.8 *:5432->5432/tcp qwz6w2a07wv3 tunnel-service replicated 1/1 tunnel-service:2.179.8 *:15000-15500->15000-15500/tcp, *:48806->48806/tcp qg6vm8egqxfd wssh replicated 1/1 wssh-genomu:2.179.8 *:2222->22/tcp -
Создайте директорию для хранения дампов БД, например:
mkdir -p /opt/skala-r/backups -
В директории с дистрибутивом найдите файл с актуальными параметрами развёртывания. Как правило, он имеет название
platform-config-<version>-<date>-<time>.yml. -
Извлеките параметры развёртывания, определяющие настройки хранения служебных БД и подключения к ним.
-
Если для подключения к БД используются одни и те же учётные данные, используйте значения параметров:
-
common.postgres_password; -
common.postgres_username.
-
-
Если для подключения к каждой БД используется свой набор учётных данных, используйте значения параметров:
-
auth_service.db.password; -
auth_service.db.username; -
authz_service.db.password; -
authz_service.db.username.
-
-
-
Определите идентификатор контейнера, в котором выполняется экземпляр PostgreSQL:
docker ps --filter name=postgres --format '{{.Names}}' | head -1 -
Создайте дампы баз
auth_dbиauthz_db:docker -exec -i <pg_id> env PGPASSWORD=<password> \ pg_dump \ --host 127.0.0.1 \ --user "<user>" \ --no-password \ --format=custom \ --compress=6 \ <db_name> > /opt/skala-r/backups/<db_name>.dumpЗдесь:
-
<pg_id>— идентификатор контейнера, в котором выполняется экземпляр PostgreSQL; -
<password>— пароль пользователя-владельца соответствующей БД; -
<user>— название учётной записи пользователя-владельца соответствующей БД; -
<db_name>— название БД.
При успешном выполнении этой операции в директории
/opt/skala-r/backups/появятся файлыauth_db.dumpиauthz_db.dump. -
-
Измените режим доступа к файлам дампов на 600:
chmod 600 /opt/skala-r/backups/*.dump -
Восстановите данные из дампов на сервере-приёмнике:
pg_restore -h <server> -p 5432 -U platform -d auth_db /opt/skala-r/backups/auth_db.dump pg_restore -h <server> -p 5432 -U platform -d authz_db /opt/skala-r/backups/authz_db.dumpЗдесь
<server>— виртуальный IP-адрес или доменное имя, указывающие на мастер сервера-приёмника. -
Перейдите в директорию с файлами дистрибутива Платформы.
-
В параметрах развёртывания:
-
укажите учётные данные для подключения к новому серверу PostgreSQL;
-
параметру
common.postgres_installприсвойте значениеfalse.
-
-
Запустите скрипт
start.shс аргументом-f, в значении которого укажите путь к файлу конфигурации развёртывания, например:./start.sh -f platform-config-2.2.1-20260904-101203.yml
Проверка корректности
Чтобы убедиться в корректности миграции:
-
Проверьте статусы служб, использующих служебные БД:
docker service lsДля всех служб значения в колонке REPLICAS должны отличаться от
0/0, например:ID NAME MODE REPLICAS IMAGE PORTS x4g5fw593oc8 api-gateway replicated 1/1 api-gateway:2.179.8 *:3000->3000/tcp huyidwt6leec auth-service replicated 1/1 auth-service:2.179.8 ax0wrrtr1bj0 authz-service replicated 1/1 authz-service:2.179.8 yun0zvik7110 foliage-service replicated 1/1 foliage-service:2.179.8 vtz4c6t0kpiu mgmt replicated 1/1 mgmt-genomu:2.179.8 *:48805->48805/tcp yk4kp3fhvel5 platform-frontend replicated 1/1 platform-frontend:2.179.8 *:80->80/tcp, *:443->443/tcp 0x0omy92690x postgres replicated 1/1 postgres:2.179.8 *:5432->5432/tcp qwz6w2a07wv3 tunnel-service replicated 1/1 tunnel-service:2.179.8 *:15000-15500->15000-15500/tcp, *:48806->48806/tcp qg6vm8egqxfd wssh replicated 1/1 wssh-genomu:2.179.8 *:2222->22/tcp -
Авторизуйтесь в веб-интерфейсе Геном и убедитесь в доступности всех необходимых разделов.