Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

2

Общее описание

Переход со схемы использующей однохостовую установку на схему с резервированием требуется выполнить миграцию данных БД, т.к. контейнер БД PostgreSQL предназначенный для работы в схеме с резервированием БД имеет отдельный образ, в состав которого включен "Replication manager for PostgreSQL clusters" (далее "repmng"). Данная особенность образа БД, предназначенного для использования в схеме с резервированием не позволяет выполнить прямую миграцию данных: требуется выполнить резервное копирование БД, развернуть БД с резервированием с "нуля" и выполнить восстановление БД.

Версия NAICEНазвание образа и версия
0.7postgres:0.7.2
0.7postgres-repmgr: 0.7.3

Порядок миграции БД

Переход БД с версии однохостовой установки на версию с резервированием включает в себя следующие этапы:

Этап 1. Выгрузка файла бэкапа текущих настроек БД

  • выгрузка скриптом резервной копии БД (скрипты включены в образ БД).

Этап 2. Разворачивание на новых хостах кластера БД PostgreSQL

Этап 3. Загрузка ранее выгруженного бэкапа данных в кластер БД PostgreSQL

  • Загрузка ранее выгруженного бэкапа данных БД скриптом;
  • Установка сервисов NAICE.

Выполнение миграции БД

Этап 1. Выгрузка файла бэкапа текущих данных БД однохостовой установки

Зайти в контейнер postgres:

sudo docker exec -it naice-postgres bash

Внутри контейнера выполнить команду:

/scripts/backup/backup.sh
Пример успешного выполнение команды на создание резервной копии
$ sudo docker exec -it naice-postgres bash
root@9c81c1aa5f79:/# /scripts/backup/backup.sh
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.97] INFO  ==> Validation required env variables for backup
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.97] INFO  ==> Checking variables..
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.98] DEBUG ==>   'BACKUPS_DIR' = /var/backups
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.98] DEBUG ==>   'URSUS_POSTGRES_USERNAME' = ursus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.98] DEBUG ==>   'URSUS_POSTGRES_PASSWORD' = ursus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.99] DEBUG ==>   'URSUS_POSTGRES_DB' = ursus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:30.99] DEBUG ==>   'LEPUS_POSTGRES_USERNAME' = lepus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.00] DEBUG ==>   'LEPUS_POSTGRES_PASSWORD' = lepus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.00] DEBUG ==>   'LEPUS_POSTGRES_DB' = lepus
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.01] INFO  ==> Ok, all required variables are set
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.01] INFO  ==> Directory for backups from env. variable '$BACKUPS_DIR:/var/backups'
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.01] INFO  ==> Creating directory '/var/backups'
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.02]
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.03] INFO  ==> ok, directory is created
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.03] INFO  ==> Starting backup of database 'ursus' to /var/backups/ursus_2024-12-12_18-18-30_970.sql..
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.03] DEBUG ==> Call 'PGPASSWORD=ursus pg_dump -U ursus -d ursus -f /var/backups/ursus_2024-12-12_18-18-30_970.sql --inserts -c --if-exists'
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.20]
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.20] INFO  ==> Ok, backup is created.
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.20] INFO  ==> Starting backup of database 'lepus' to /var/backups/lepus_2024-12-12_18-18-30_970.sql..
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.21] DEBUG ==> Call 'PGPASSWORD=lepus pg_dump -U lepus -d lepus -f /var/backups/lepus_2024-12-12_18-18-30_970.sql --inserts -c --if-exists'
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.31]
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.32] INFO  ==> Ok, backup is created.
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.32] INFO  ==> Start compressing backups to file naice_2024-12-12_18-18-30_970.tar.gz
[BACKUP] [2024-12-12_18-18-30_970] [18:18:31.33] INFO  ==> The backup was successfully compressed to '/var/backups/naice_2024-12-12_18-18-30_970.tar.gz'

Выгрузка резервной копии БД выполняется на хост в папку "<путь установки NAICE>/backups". По умолчанию это папка "/etc/docker-naice/backups/"

Выйти их контейнера и убедиться, что в папке присутствует файл с резервной копией БД с именем, которое отображалось в логах при создании резервной копии.

Этап 2. Разворачивание на новых хостах кластера БД PostgreSQL

Установить кластер БД в соответствии с инструкцией v0.7_3.6 Резервирование в разделе "Установка кластера СУБД PostgreSQL".

Этап 3. Загрузка ранее выгруженного бэкапа данных в кластер БД PostgreSQL

Внимание! Загрузка резервной копии данных в БД использующую кластерную схему резервирования возможна только на ноде находящейся в состоянии "Primary"!

Определить какая нода находиться в состоянии "Primary" (описано в v0.7_3.6 Резервирование в разделе "Проверка состояния кластера PostgreSQL").

Перенести ранее выгруженный файл данных с сервера с однохостовой установкой на ноду кластера БД PostgreSQL в состоянии "Primary".

Файл с резервной копией необходимо поместить в папку "<путь к БД>/postgres/backups". Эта папка доступна пользователю с правами root.

Пример переноса архива данных БД при выполнении на хосте, где работает нода кластера PostgreSQL
$ sudo scp tester@100.110.2.202:/etc/docker-naice/backups/naice_2024-12-12_18-18-30_970.tar.gz /etc/docker-naice/postgres/backups
The authenticity of host '100.110.2.202 (100.110.2.202)' can't be established.
ED25519 key fingerprint is SHA256:4YUjqgXmieg9JM9kU49/yk5BA9+ndhEK78sX8flb2+w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '100.110.2.202' (ED25519) to the list of known hosts.
tester@100.110.2.202's password:
naice_2024-12-12_18-18-30_970.tar.gz                                                                                                                                  100%   21KB   8.3MB/s   00:00

Зайти в контейнер кластера postgres.

Команда для ноды 1 кластера PostgreSQL:

sudo docker exec -it naice-postgres-1 bash

Команда для ноды 2 кластера PostgreSQL:

sudo docker exec -it naice-postgres-2 bash

Внутри контейнера выполнить команду:

/home/worker/scripts/backup/restore.sh

В конце лога выполнения команды появится сообщение:

[RESTORE] [naice_2024-12-12_18-18-30_970] [19:00:33.78] INFO  ==> Ok, restoring is completed

Выйти из контейнера.

Выполнить установку сервисов NAICE в соответствие с инструкцией v0.7_3.6 Резервирование в разделе "Установка кластера NAICE".

  • Нет меток