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

Миграция базы данных

Ниже описаны действия по обновлению или переносу базы данных.

Миграция в рамках кластера Patroni

Процесс данной миграции включает в себя перенос БД из одного кластера СУБД на базе продукта Patroni + etcd + PostgreSQL (старой версии) на другой кластер СУБД на базе Patroni + etcd + PostgreSQL (новой версии).

Для использования такого подхода необходимо развернуть новый кластер СУБД (минимум 3 сервера) и установить новую версию PostgreSQL, etcd и Patroni.

Пошаговая инструкция

Для миграции базы данных в рамках кластера Patroni выполните следующие действия:

  1. Проверьте, что новый сервер СУБД настроен в соответствии с требованиями Termit. Подробнее в разделе.

  2. Завершите работу сервисов Termit на всех активных брокерах с помощью команды:

    sudo docker stop $(sudo docker ps -q)
  3. Определите текущий мастер в кластере старой версии Patroni с помощью команды:

    patronictl -c %config_file_path% list

    Где: %config_file_path% - путь к файлу конфигурации Patroni.

  4. Выполните экспорт БД на мастер сервере кластера 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% - имя базы данных для экспорта.

  5. Скопируйте экспортированную базу данных на целевой сервер с помощью команды:

    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% - путь к файлу БД на целевом сервере.

  6. Определите текущий мастер в кластере новой версии Patroni с помощью команды:

    patronictl -c %config_file_path% list

    Где: %config_file_path% — путь к файлу конфигурации Patroni.

  7. Перед выполнением импорта БД, проверьте, что на мастер сервере кластера:

    1. создана пустая база данных;

    2. для учетной записи назначены соответствующие права (OWNER).;

    3. соответствующие права назначены (OWNER) для учетной записи.

  8. Выполните импорт базы данных на новый мастер сервер с помощью команды:

    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).

    При выполнении команды будет запрошен пароль от используемой учетной записи.
  9. Проверьте статус репликации между узлами Patroni на целевом сервере с помощью команды::

    patronictl -c /etc/patroni.yml list
  10. Последовательно внесите изменения в конфигурационный файл Termit /etc/termit/config на каждом брокере, указав новый сервер СУБД в значении переменной TERMIT_BROKER_DB_HOST.

  11. Запустите сервисы Termit с помощью команды:

    sudo docker start $(sudo docker ps -a -q)
  12. Проверьте статус сервисов Termit с помощью команды:

    sudo docker ps
    Все контейнеры должны быть в статусе healthy.
  13. Перезагрузите брокер Termit.

Миграция в рамках одного сервера

Данный процесс включает перенос базы данных с одного экземпляра PostgreSQL (старой версии) на другой экземпляр той же операционной системы (например, в ОС РедОС), но с обновлённой версией PostgreSQL.

Для использования такого подхода необходимо установить новую версию PostgreSQL и назначить для использования порт, отличающийся от 5432.

Пошаговая инструкция

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

  1. Установите второй экземпляр СУБД и подготовьте его в соответствии с требованиями Termit. Подробнее в разделе.

    Обратите внимание, для одновременной работы двух экземпляров СУБД необходимо в файле конфигурации /var/lib/pgsql/15/data/postgresql.conf изменить порт по умолчанию c 5432 на другой доступный, например 5433.
  2. Завершите работу сервисов Termit на всех активных брокерах с помощью команды:

    sudo docker stop $(sudo docker ps -q)
  3. Выполните экспорт БД на сервере СУБД с помощью команды:

    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% - имя базы данных для экспорта.

      При выполнении команды будет запрошен пароль от используемой учетной записи.
  4. Перед выполнением импорта базы данных, убедитесь, что:

    1. создана пустая база данных %target_db_name%;

    2. создана учетная запись, которая будет использована для Termit %target_db_username%;;

    3. для учетной записи назначены соответствующие права (OWNER).

  5. Выполните импорт базы данных на целевой сервер с помощью команды:

    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.

      При выполнении команды будет запрошен пароль от используемой учетной записи.
  6. Последовательно внесите изменения в конфигурационный файл Termit /etc/termit/config на каждом брокере, указав новый порт для подключения СУБД (например,TERMIT_BROKER_DB_PORT=5433).

  7. Запустите сервисы Termit с помощью команды:

    sudo docker start $(sudo docker ps -a -q)
  8. Проверьте статус сервисов Termit с помощью команды:

    sudo docker ps
    Все контейнеры должны быть в статусе healthy.
  9. Перезагрузите брокер Termit.

Миграция в рамках разных серверов

Данный процесс миграции состоит из переноса БД с одной виртуальной машины (сервера) PostgreSQL (старой версии) на другую виртуальную машину (сервер) PostgreSQL (новой версии).

Для использования такого подхода необходимо создать новую виртуальную машину и установить новую версию PostgreSQL.

Пошаговая инструкция

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

  1. Установите второй экземпляр СУБД и подготовьте его в соответствии с требованиями Termit. Подробнее в разделе.

  2. Завершите работу сервисов Termit на всех активных брокерах с помощью команды:

    sudo docker stop $(sudo docker ps -q)
  3. Выполните экспорт БД на исходном сервере СУБД с помощью команды:

    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% - имя базы данных для экспорта.

      При выполнении команды будет запрошен пароль от используемой учетной записи.
  4. Скопируйте экспортированную базу данных на целевой сервер с помощью команды:

    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% - путь к файлу БД на целевом сервере.

      При выполнении команды будет запрошен пароль от используемой учетной записи.
  5. Перед выполнением импорта базы данных, убедитесь, что:

    1. создана пустая база данных на целевом сервере %db_name%;

    2. создана учетная запись, которая будет использована для Termit %db_username%;;

    3. для учетной записи назначены соответствующие права (OWNER) %db_username%.

  6. Выполните импорт базы данных на целевом сервере с помощью команды:

    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.

      При выполнении команды будет запрошен пароль от используемой учетной записи.
  7. Последовательно внесите изменения в конфигурационный файл Termit /etc/termit/config на каждом брокере, указав новый сервер СУБД в значении переменной TERMIT_BROKER_DB_HOST.

  8. Запустите сервисы Termit с помощью команды:

    sudo docker start $(sudo docker ps -a -q)
  9. Проверьте статус сервисов Termit с помощью команды:

    sudo docker ps
    Все контейнеры должны быть в статусе healthy.
  10. Перезагрузите брокер Termit.