0

Миграция данных в Облако репликацией

26.04.2022

Предположим, вы решили перенести БД в сервис управляемых БД PostgreSQL. Для этого придётся выполнить логическую репликацию:

  1. Настроить сервер с источником данных.
  2. Экспортировать схему БД из источника.
  3. Создать кластер Managed Service for PostgreSQL и восстановить схему БД.
  4. Создать публикации и подписки.
  5. Перенести PostgreSQL-sequences после репликации.
  6. Отключить репликацию и перенести нагрузки.

Как видите, процесс довольно трудоёмкий. Разберём его по шагам.1. Настройка сервера с источником данныхЧтобы перенести данные с помощью репликации, настройте PostgreSQL на сервере-источнике. Измените настройки SSL и WAL (Write Ahead Log) в файле postgresql.conf (в Ubuntu путь к нему по умолчанию — /etc/postgresql/10/main/postgresql.conf).Для переноса данных используйте SSL: это поможет не только зашифровать данные, но и сжать их. Подробнее читайте в документации PostgreSQL: разделы SSL Support и Database Connection Control Functions.Включите использование SSL:

SSL=ON 

Измените уровень логирования для WAL, чтобы добавить в него информацию для логической репликации. В файле postgresql.conf найдите строку с настройкой wal_level, раскомментируйте её при необходимости и установите значение logical:

wal_level=logical 

Теперь настройте аутентификацию хостов в источнике: внесите хосты кластера в облаке в файл pg_hba.conf (в Debian и Ubuntu путь к нему по умолчанию — /etc/postgresql/10/main/pg_hba.conf). Добавьте в файл строки, которые разрешат входящие соединения к БД с указанных хостов.Если вы используете SSL:

hostssl    all            all             <адрес хоста>      md5
hostssl    replication    all             <адрес хоста>      md5          
  

Если вы не используете SSL:

host    all            all             <адрес хоста>      md5
host    replication    all             <адрес хоста>      md5 

Если на сервере-источнике работает фаервол, разрешите входящие соединения с хостов кластера Managed Service for PostgreSQL. Например, для Ubuntu 18:

sudo ufw allow from <адрес хоста> to any port 5432 

Перезагрузите сервер БД, чтобы применить настройки:

sudo systemctl restart postgresql 

После перезапуска проверьте статус PostgreSQL с помощью команды:

sudo systemctl status postgresql 

2. Экспорт схемы БД из источникаС помощью утилиты pg_dump создайте файл со схемой БД, которую нужно применить в кластере Managed Service for PostgreSQL.

 
pg_dump -h <адрес сервера СУБД> \
    -U <имя пользователя> \
    -p <порт> \
    --schema-only \
    --no-privileges \
    --no-subscriptions \
    -d <имя базы данных> -Fd -f /tmp/db_dump
 

В этой команде при экспорте исключаются все данные, которые связаны с привилегиями и ролями. Это необходимо, чтобы не возникало конфликтов с настройками БД в Yandex.Cloud. Если базе нужны дополнительные пользователи, создайте их.3. Создание кластера Managed Service for PostgreSQL и восстановление схемы БДЕсли у вас ещё нет PostgreSQL-кластера в Yandex.Cloud, создайте его. При создании кластера укажите то же имя БД, что и на сервере-источнике.Восстановите схему в созданном кластере:

 
pg_restore -Fd -v --single-transaction -s --no-privileges \
          -h <адрес приемника> \
          -U <имя пользователя> \
          -p 6432 \
          -d <имя базы данных> /tmp/db_dump
 
 

4. Создание публикаций и подпискиОпределите публикацию (группу логически реплицируемых таблиц) на сервере-источнике и подписку (описание соединения с другой базой) на сервере-приёмнике.На сервере-источнике создайте публикацию для всех таблиц БД. Если переносите несколько баз — для каждой сделайте свою публикацию.Чтобы создать публикации для всех таблиц, потребуются права суперпользователя. Чтобы перенести выбранные таблицы, права не нужны. Воспользуйтесь запросом:

CREATE PUBLICATION p_data_migration FOR ALL TABLES; 

На хосте кластера Managed Service for PostgreSQL создайте подписку со строкой подключения к публикации. Подробности о создании подписок смотрите в документации PostgreSQL (раздел Create subscription).Запрос с включённым SSL:

 
CREATE SUBSCRIPTION s_data_migration CONNECTION 'host=<адрес сервера-источника> port=<порт> user=<имя пользователя> sslmode=verify-full dbname=<имя базы данных>' PUBLICATION p_data_migration;
  

Без SSL:

 
CREATE SUBSCRIPTION s_data_migration CONNECTION 'host=<адрес сервера-источника> port=<порт> user=<имя пользователя> sslmode=disable dbname=<имя базы данных>' PUBLICATION p_data_migration;
  

Следите за статусом репликации через каталоги pg_subscription_rel. Общий статус репликации на приёмнике можно получить через pg_stat_subscription, на источнике — через pg_stat_replication.

select * from pg_subscription_rel; 

Важно следить за статусом репликации на приёмнике по полю srsubstate. Значение r в поле srsubstate говорит о том, что синхронизация завершилась и базы готовы к репликации.5. Перенос PostgreSQL-sequences после репликацииЧтобы завершить синхронизацию источника и приёмника, запретите запись данных на сервере-источнике и перенесите PostgreSQL-sequences в кластер Managed Service for PostgreSQL.Экспортируйте PostgreSQL-sequences из источника:

 
pg_dump -h <адрес сервера СУБД> \
    -U <имя пользователя> \
    -p <порт> -d <имя базы данных> \
    --data-only -t '*.*_seq' > /tmp/seq-data.sql
  

Обратите внимание на паттерн: если в переносимой БД есть sequences, которые не соответствуют паттерну *.*_seq, то для их выгрузки укажите другой паттерн. Подробная информация о паттернах приводится в документации PostgreSQL.Восстановите sequences на хосте Managed Service for PostgreSQL:

 
psql -h <адрес сервера СУБД> \
    -U <имя пользователя> -p 6432 \
    -d <имя базы данных> \
    < /tmp/seq
 

6. Отключение репликации и перенос нагрузкиПосле того как репликация завершилась и вы перенесли sequences, удалите подписку на сервере-приёмнике (в кластере Managed Service for PostgreSQL):

DROP SUBSCRIPTION s_data_migration; 

После этого можно переносить нагрузку на сервер-приёмник.

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

Настройка репликации MYSQL

При работе с базами данных может быть полезно иметь несколько копий своих данных. Это обеспечивает избыточность на случай отказа одного из серверов,
mikrotik
Previous Story

Настройка выборочного доступа к сайтам через VPN на роутерах Mikrotik

Next Story

Введение. Несколько слов о NoSQL

Latest from Blog

Поиск и замена URL в MYSQL

Используйте сценарии MySQL для поиска и замены URL-адресов в базе данных Другой способ поиска и замены старых URL-адресов в базе данных – использование сценариев MySQL. Этот метод очень полезен, если у вас

POSTGRESQL 16 + CЕРВЕР 1С X64 И 1С 8.3.24

Для начала, в какой среде будем работать: Наша задача: Предполагается, что Debian на который мы установим как PostgreSQL так и Сервер 1С установлен (Установка по умолчанию). Для начала проверим «локаль»: Как видим

HADOOP

Hабор инструментов для разработки программ и обеспечения среды для их запуска в распределенной среде. Позволяет создавать большие кластеры и упрощает процесс управления ими. Является одним из элементов конвейеров обработки больших данных. Разработан на Java фондом Apache

Обновление mySQL с версии 5.7 до 8.0

Сами процедуры могут немного различаться в зависимости от операционной системы, поэтому приведенные ниже шаги ориентированы на общую схему и могут потребовать некоторых адаптаций. Создание резервной копии данных в MySQL можно выполнить с

11 советов по настройке файла wp-config.php

Скорость: Отключите сохраненные версии… Сейчас! Функция сохранения версий записей включена по умолчанию, но может привести к значительному “раздуванию” базы данных. Сохраненные версии существуют для того, чтобы вы могли откатиться к предыдущей версии записи,
Go toTop

Don't Miss

Настройка репликации MYSQL

При работе с базами данных может быть полезно иметь несколько