Миграция кластера PostgreSQL
Чтобы перенести вашу базу данных в сервис Yandex Managed Service for PostgreSQL, нужно непосредственно перенести данные, закрыть старую базу данных на запись и переключить нагрузку на кластер БД в Yandex Cloud.
Важно
Пользователи автоматически не переносятся в кластер Managed Service for PostgreSQL. Их нужно создать в новом кластере заново.
Миграция с помощью Data Transfer позволяет:
- обойтись без создания промежуточной виртуальной машины или разрешения доступа к вашему кластеру-приемнику Managed Service for PostgreSQL из интернета;
- минимизировать время недоступности базы данных при миграции;
- мигрировать со старых версий PostgreSQL на более новые.
Подробнее см. в разделе Какие задачи решает сервис Yandex Data Transfer.
Чтобы использовать эти способы миграции, разрешите подключение к кластеру-источнику из интернета.
Перенос данных
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for PostgreSQL: использование хостов БД и дискового пространства (см. тарифы Managed Service for PostgreSQL).
- Плата за использование публичных IP-адресов, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Плата за трансфер: использование вычислительных ресурсов и количество переданных строк данных (см. тарифы Data Transfer).
Перенесите данные
-
Подготовьте инфраструктуру:
ВручнуюTerraform-
Создайте кластер-приемник Managed Service for PostgreSQL любой подходящей конфигурации. При этом:
- Версия PostgreSQL должна быть не ниже, чем в кластере-источнике. Миграция с понижением версии PostgreSQL невозможна.
- При создании кластера укажите то же имя базы данных, что и в кластере-источнике.
- Включите те же расширения PostgreSQL, что и в кластере-источнике.
-
Создайте эндпоинт для источника со следующими параметрами:
- Тип базы данных —
PostgreSQL. - Параметры эндпоинта → Настройки подключения —
Пользовательская инсталляция.
Укажите параметры подключения к кластеру-источнику.
- Тип базы данных —
-
Создайте эндпоинт для приемника со следующими параметрами:
- Тип базы данных —
PostgreSQL. - Параметры эндпоинта → Настройки подключения —
Кластер Managed Service for PostgreSQL.
Укажите идентификатор кластера-приемника.
- Тип базы данных —
-
Создайте трансфер типа Копирование и репликация, использующий созданные эндпоинты.
-
Важно
Избегайте любых изменений в схеме данных в кластере-источнике и кластере-приемнике во время работы трансфера. Подробнее см. в разделе Работа с базами данных во время трансфера.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации data-transfer-pgsql-mpg.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности и правило, необходимое для подключения к кластеру;
- кластер-приемник Managed Service for PostgreSQL;
- эндпоинт для источника;
- эндпоинт для приемника;
- трансфер.
-
Укажите в файле
data-transfer-pgsql-mpg.tf:-
pg-extensions– список расширений PostgreSQL в кластере-источнике; -
параметры кластера-приемника, которые используются и как параметры эндпоинта-приемника:
target_pgsql_version— версия PostgreSQL, она должна быть не ниже, чем в кластере-источнике;target_userиtarget_password— имя и пароль пользователя-владельца базы данных.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
.Трансфер активируется автоматически после создания.
-
-
-
Дождитесь перехода трансфера в статус Реплицируется.
-
Переведите кластер-источник в режим
только чтение
. -
На странице мониторинга трансфера дождитесь снижения до нуля характеристики Maximum data transfer delay. Это значит, что на кластер-приемник перенесены все изменения, произошедшие в кластере-источнике после завершения копирования данных.
-
Деактивируйте трансфер и дождитесь его перехода в статус Остановлен.
Подробнее о статусах трансфера см. в разделе Жизненный цикл трансфера.
-
Переключите нагрузку на кластер-приемник.
-
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
Ресурсы созданы вручнуюРесурсы созданы с помощью Terraform- Удалите кластер Managed Service for PostgreSQL.
- Удалите остановленный трансфер.
- Удалите эндпоинты для источника и приемника.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
Упрощенный перенос данных в новый кластер
После создания кластера Managed Service for PostgreSQL вы можете сразу перенести в него данные из другого кластера Managed Service for PostgreSQL или пользовательской инсталляции базы данных.
При таком способе миграции:
- Трансфер и эндпоинты создаются автоматически.
- С источника на приемник однократно переносится снапшот данных.
Необходимые платные ресурсы
В стоимость поддержки описываемого решения входят:
- Плата за кластер Managed Service for PostgreSQL: использование хостов БД и дискового пространства (см. тарифы Managed Service for PostgreSQL).
- Плата за использование публичных IP-адресов (см. тарифы Virtual Private Cloud).
- Плата за трансфер: использование вычислительных ресурсов и количество переданных строк данных (см. тарифы Data Transfer).
Перенесите данные
-
Откройте страницу Обзор нового кластера Managed Service for PostgreSQL.
-
В верхней части экрана нажмите кнопку Мигрировать данные.
-
Задайте настройки источника:
Пользовательская инсталляцияКластер Managed Service for PostgreSQL-
Подключение:
-
Выбрать существующее — выберите, чтобы использовать существующее подключение.
-
Идентификатор подключения — выберите подключение Yandex Connection Manager.
-
База данных — введите имя БД.
-
-
Создать новое — выберите, чтобы создать новое подключение.
-
Хосты — укажите IP-адрес или FQDN хоста-мастера. Если на хостах открыты разные порты для подключения, то вы можете задать несколько значений хостов в формате
хост:порт, при этом значение поля Порт не будет учитываться. -
Имя пользователя — введите имя пользователя для подключения к БД.
-
Пароль — введите пароль для доступа к БД.
-
База данных — введите имя БД.
-
TLS — включите, чтобы использовать TLS-соединение.
- Сертификат CA — добавьте содержимое файла сертификата.
-
-
-
Подключение:
-
Выбрать существующее — выберите, чтобы использовать существующее подключение.
-
Идентификатор кластера — выберите кластер, к которому необходимо подключиться.
-
Идентификатор подключения — выберите подключение Yandex Connection Manager.
-
База данных — укажите имя БД в выбранном кластере.
-
-
Создать новое — выберите, чтобы создать новое подключение.
-
Идентификатор кластера — выберите кластер, к которому необходимо подключиться.
-
Имя пользователя — введите имя пользователя для подключения к БД кластера.
-
Пароль — введите пароль пользователя для доступа к БД кластера.
-
База данных — укажите имя БД в выбранном кластере.
-
-
Важно
Чтобы использовать подключение из Connection Manager, у пользователя должны быть права доступа не ниже
connection-manager.userк этому подключению. -
-
Задайте настройки приемника:
-
Идентификатор подключения — выберите подключение Connection Manager.
-
База данных — укажите имя БД в кластере-приемнике.
-
-
(Опционально) Задайте дополнительные настройки:
-
Политика очистки — выберите способ очистки данных в базе-приемнике:
-
Drop— полное удаление таблиц, участвующих в трансфере (вариант по умолчанию). -
Truncate— удалить только данные из таблиц, участвующих в трансфере, но оставить схему.
-
-
Список включённых таблиц — будут передаваться данные только из таблиц этого списка.
-
Список исключённых таблиц — данные таблиц из этого списка передаваться не будут.
Списки включают имя схемы
(описание содержания, структуры и ограничений целостности базы данных) и имя таблицы. Для обоих списков поддерживаются выражения вида:<имя_схемы>.<имя_таблицы>— полное имя таблицы;<имя_схемы>.*— все таблицы в указанной схеме.
Имена таблиц должны соответствовать регулярному выражению:
^"?[-_a-zA-Z0-9.]+"?\\."?[$-_a-zA-Z0-9.*]+"?$Двойные кавычки внутри имени таблицы не поддерживаются. Внешние кавычки используются только как разделители и будут удалены при обработке путей.
-
Перенос схемы — выберите элементы схемы БД, которые будут перенесены в процессе активации или деактивации трансфера.
-
-
Нажмите кнопку Создать, чтобы создать трансфер и эндпоинты.
-
Активируйте трансфер.
-
Дождитесь перехода трансфера в статус Завершен.
-
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите кластер Managed Service for PostgreSQL, если данные переносились из него.
- Удалите трансфер.
- Удалите эндпоинты для источника и приемника.
Перенос таблиц с типами данных из расширений PostgreSQL
Сервис Data Transfer поддерживает копирование таблиц, содержащих столбцы с типами данных, определенных в расширениях PostgreSQL, а также копирование таблиц с производными типами (массивами таких типов и композитными типами с полями таких типов). Однако на данный момент есть ограничение — тип данных должен реализовывать функции двоичного ввода и вывода. То есть, для типа данных в системной таблице pg_typetypsend и typreceive должны быть отличны от нуля.
Например, для расширения PostGISGEOMETRYGEOMETRY_DUMPGEOGRAPHYBOX2DBOX3D
См. также
Другие способы миграции описаны в документации Yandex Managed Service for PostgreSQL.