Миграция базы данных
Ниже описаны действия по обновлению или переносу базы данных.
Миграция в рамках кластера Patroni
Процесс данной миграции включает в себя перенос БД из одного кластера СУБД на базе продукта Patroni + etcd + PostgreSQL (старой версии) на другой кластер СУБД на базе Patroni + etcd + PostgreSQL (новой версии).
Для использования такого подхода необходимо развернуть новый кластер СУБД (минимум 3 сервера) и установить новую версию PostgreSQL, etcd и Patroni.
Пошаговая инструкция
Для миграции базы данных в рамках кластера Patroni выполните следующие действия:
-
Проверьте, что новый сервер СУБД настроен в соответствии с требованиями Termit. Подробнее в разделе.
-
Завершите работу сервисов Termit на всех активных брокерах с помощью команды:
sudo docker stop $(sudo docker ps -q) -
Определите текущий мастер в кластере старой версии Patroni с помощью команды:
patronictl -c %config_file_path% listГде:
%config_file_path%- путь к файлу конфигурации Patroni. -
Выполните экспорт БД на мастер сервере кластера Patroni старой версии PostgreSQL с помощью команды:
pg_dump -U %username% -h %db_host% -p %db_port% -F c -b -v -f %backup_file% %db_name%Где:
-
%username%- имя пользователя с необходимыми правами; -
%db_host%- FQDN имя или IP-адрес текущего мастер-сервера; -
%db_port%- используемый TCP-порт (по умолчанию 5432); -
%backup_file%- имя файла, который будет создан при экспорте с расширением.dump; -
%db_name%- имя базы данных для экспорта.
-
-
Скопируйте экспортированную базу данных на целевой сервер с помощью команды:
scp %backup_file% %target_os_username%@%target_db_host%:%db_file_path%Где:
-
%backup_file%- файл БД для копирования на целевой сервер; -
%target_os_username%- имя пользователя для подключения на целевом сервере СУБД; -
%target_db_host%- FQDN-имя или IP-адрес целевого сервера СУБД; -
%db_file_path%- путь к файлу БД на целевом сервере.
-
-
Определите текущий мастер в кластере новой версии Patroni с помощью команды:
patronictl -c %config_file_path% listГде:
%config_file_path%— путь к файлу конфигурации Patroni. -
Перед выполнением импорта БД, проверьте, что на мастер сервере кластера:
-
создана пустая база данных;
-
для учетной записи назначены соответствующие права (OWNER).;
-
соответствующие права назначены (OWNER) для учетной записи.
-
-
Выполните импорт базы данных на новый мастер сервер с помощью команды:
pg_restore -U %target_db_username% -h %target_db_host% -p %db_port% -d %db_name% -v %backup_file%Где:
-
%backup_file%- файл БД для импорта на целевой сервер; -
%target_db_username%- имя пользователя для подключения на целевом сервере СУБД; -
%db_port%- используемый TCP-порт (по умолчанию 5432); -
%target_db_host%- FQDN имя или IP-адрес целевого сервера СУБД (определен на шаге 6).
При выполнении команды будет запрошен пароль от используемой учетной записи. -
-
Проверьте статус репликации между узлами Patroni на целевом сервере с помощью команды::
patronictl -c /etc/patroni.yml list -
Последовательно внесите изменения в конфигурационный файл Termit
/etc/termit/configна каждом брокере, указав новый сервер СУБД в значении переменнойTERMIT_BROKER_DB_HOST. -
Запустите сервисы Termit с помощью команды:
sudo docker start $(sudo docker ps -a -q) -
Проверьте статус сервисов Termit с помощью команды:
sudo docker psВсе контейнеры должны быть в статусе healthy. -
Перезагрузите брокер Termit.
Миграция в рамках одного сервера
Данный процесс включает перенос базы данных с одного экземпляра PostgreSQL (старой версии) на другой экземпляр той же операционной системы (например, в ОС РедОС), но с обновлённой версией PostgreSQL.
Для использования такого подхода необходимо установить новую версию PostgreSQL и назначить для использования порт, отличающийся от 5432.
Пошаговая инструкция
Для миграции базы данных в рамках одного сервера выполните следующие действия:
-
Установите второй экземпляр СУБД и подготовьте его в соответствии с требованиями Termit. Подробнее в разделе.
Обратите внимание, для одновременной работы двух экземпляров СУБД необходимо в файле конфигурации /var/lib/pgsql/15/data/postgresql.confизменить порт по умолчанию c 5432 на другой доступный, например 5433. -
Завершите работу сервисов Termit на всех активных брокерах с помощью команды:
sudo docker stop $(sudo docker ps -q) -
Выполните экспорт БД на сервере СУБД с помощью команды:
pg_dump -U %username% -h %db_host% -p %db_port% -F c -b -v -f %backup_file% %db_name%Где:
-
%username%- имя пользователя с необходимыми правами; -
%db_host%- FQDN имя или IP-адрес текущего мастер сервера; -
%db_port%- используемый TCP-порт (по умолчанию 5432); -
%backup_file%- имя файла, который будет создан при экспорте с расширением.dump; -
%db_name%- имя базы данных для экспорта.При выполнении команды будет запрошен пароль от используемой учетной записи.
-
-
Перед выполнением импорта базы данных, убедитесь, что:
-
создана пустая база данных
%target_db_name%; -
создана учетная запись, которая будет использована для Termit
%target_db_username%;; -
для учетной записи назначены соответствующие права (OWNER).
-
-
Выполните импорт базы данных на целевой сервер с помощью команды:
pg_restore -U %target_db_username% -h %db_host% -p %db_port% -d %target_db_name% -v %backup_file%Где:
-
%target_username%- имя пользователя на новом экземпляре PostgreSQL, который будет владельцем новой базы; -
%db_host%- FQDN-имя или IP-адрес сервера СУБД; -
%db_port%- TCP-порт нового экземпляра PostgreSQL (например, 5433); -
%target_db_name%- имя базы данных для импорта; -
%backup_file%- имя файла дампа, созданного при экспорте базы с расширением.dump.При выполнении команды будет запрошен пароль от используемой учетной записи.
-
-
Последовательно внесите изменения в конфигурационный файл Termit
/etc/termit/configна каждом брокере, указав новый порт для подключения СУБД (например,TERMIT_BROKER_DB_PORT=5433). -
Запустите сервисы Termit с помощью команды:
sudo docker start $(sudo docker ps -a -q) -
Проверьте статус сервисов Termit с помощью команды:
sudo docker psВсе контейнеры должны быть в статусе healthy. -
Перезагрузите брокер Termit.
Миграция в рамках разных серверов
Данный процесс миграции состоит из переноса БД с одной виртуальной машины (сервера) PostgreSQL (старой версии) на другую виртуальную машину (сервер) PostgreSQL (новой версии).
Для использования такого подхода необходимо создать новую виртуальную машину и установить новую версию PostgreSQL.
Пошаговая инструкция
Для миграции базы данных в рамках разных серверов выполните следующие действия:
-
Установите второй экземпляр СУБД и подготовьте его в соответствии с требованиями Termit. Подробнее в разделе.
-
Завершите работу сервисов Termit на всех активных брокерах с помощью команды:
sudo docker stop $(sudo docker ps -q) -
Выполните экспорт БД на исходном сервере СУБД с помощью команды:
pg_dump -U %username% -h %db_host% -p %db_port% -F c -b -v -f %backup_file% %db_name%Где:
-
%username%- имя пользователя с необходимыми правами; -
%db_host%- FQDN-имя или IP-адрес исходного сервера СУБД; -
%db_port%- используемый TCP-порт (по умолчанию 5432); -
%backup_file%- имя файла для экспорта с расширением.dump; -
%db_name%- имя базы данных для экспорта.При выполнении команды будет запрошен пароль от используемой учетной записи.
-
-
Скопируйте экспортированную базу данных на целевой сервер с помощью команды:
scp %backup_file% %target_os_username%@%target_db_host%:%db_file_path%Где:
-
%backup_file%- файл БД для копирования на целевой сервер; -
%target_os_username%- имя пользователя для подключения на целевом сервере СУБД; -
%target_db_host%- FQDN имя или IP-адрес целевого сервера СУБД; -
%db_file_path%- путь к файлу БД на целевом сервере.При выполнении команды будет запрошен пароль от используемой учетной записи.
-
-
Перед выполнением импорта базы данных, убедитесь, что:
-
создана пустая база данных на целевом сервере
%db_name%; -
создана учетная запись, которая будет использована для Termit
%db_username%;; -
для учетной записи назначены соответствующие права (OWNER)
%db_username%.
-
-
Выполните импорт базы данных на целевом сервере с помощью команды:
pg_restore -U %db_username% -h %target_db_host% -p %db__port% -d %db_name% -v %backup_file%Где:
-
%username%- имя пользователя с необходимыми правами; -
target_%db_host%- FQDN-имя или IP-адрес целевого сервера; -
%db_port%- используемый TCP-порт (по умолчанию 5432); -
%db_name%- имя базы данных для экспорта; -
%backup_file%- имя файла для экспорта с расширением.dump.При выполнении команды будет запрошен пароль от используемой учетной записи.
-
-
Последовательно внесите изменения в конфигурационный файл Termit
/etc/termit/configна каждом брокере, указав новый сервер СУБД в значении переменнойTERMIT_BROKER_DB_HOST. -
Запустите сервисы Termit с помощью команды:
sudo docker start $(sudo docker ps -a -q) -
Проверьте статус сервисов Termit с помощью команды:
sudo docker psВсе контейнеры должны быть в статусе healthy. -
Перезагрузите брокер Termit.