Для перехода со схемы, использующей однохостовую установку, на схему с резервированием требуется выполнить миграцию данных БД. Это необходимо, т. к. контейнер БД PostgreSQL, предназначенный для работы в схеме с резервированием БД имеет отдельный образ, в состав которого включен "Replication manager for PostgreSQL clusters" (далее repmng).
Данная особенность образа БД, предназначенного для использования в схеме с резервированием, не позволяет выполнить прямую миграцию данных. Для этого требуется выполнить резервное копирование БД, развернуть БД с резервированием с "нуля" и выполнить восстановление БД.
| Версия NAICE | Название образа и версия |
|---|---|
| 0.8 | postgres: 0.8.4 |
| 0.8 | postgres-repmgr: 0.8.4 |
Переход БД с версии однохостовой установки на версию с резервированием включает в себя следующие этапы:
Этап 1. Выгрузка файла бэкапа текущих настроек БД.
Этап 2. Разворачивание на новых хостах кластера БД PostgreSQL.
Этап 3. Загрузка ранее выгруженного бэкапа данных в кластер БД PostgreSQL.
1. Зайти в контейнер postgres:
sudo docker exec -it naice-postgres bash |
2. Внутри контейнера выполнить команду:
/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/.
3. Выйти их контейнера и убедиться, что в папке присутствует файл с резервной копией БД с именем, которое отображалось в логах при создании резервной копии.
1. Установить кластер БД в соответствии с инструкцией v0.8_3.6 Резервирование в разделе Установка кластера СУБД PostgreSQL.
Внимание! Загрузка резервной копии данных в БД, использующую кластерную схему резервирования, возможна только на ноде, находящейся в состоянии Primary! |
1. Определить, какая нода находится в состоянии Primary (описано в v0.8_3.6 Резервирование в разделе Проверка состояния кластера PostgreSQL).
2. Перенести ранее выгруженный файл данных с сервера с однохостовой установкой на ноду кластера БД PostgreSQL в состоянии Primary.
3. Файл с резервной копией необходимо поместить в папку <путь к БД>/postgres/backups. Эта папка доступна пользователю с правами root.
$ 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 |
4. Зайти в контейнер кластера postgres.
Команда для ноды 1 кластера PostgreSQL:
sudo docker exec -it naice-postgres-1 bash |
Команда для ноды 2 кластера PostgreSQL:
sudo docker exec -it naice-postgres-2 bash |
5. Внутри контейнера выполнить команду:
/home/worker/scripts/backup/restore.sh |
В конце лога выполнения команды появится сообщение:
[RESTORE] [naice_2024-12-12_18-18-30_970] [19:00:33.78] INFO ==> Ok, restoring is completed |
6. Выйти из контейнера.
7. Выполнить установку сервисов NAICE в соответствии с инструкцией v0.8_3.6 Резервирование в разделе Установка кластера NAICE.