Миграция PostgreSQL на AWS Aurora
Дано 2 железки, на каждой PostgreSQL 9.6, на одной общий размер баз около 100гб, из всех выделяются 2 на 70гб и 20гб, второй хост мелкий, сумарно бд около 6гб.
Цель - перенести все на Aurora и "снять" управление/бекапы с админов, освободившиеся инстансы выкинуть.
Было известно, что для переноса есть такой сервис как AWS Database Migration Service, позволяющий переносить данные с последующей репликацией.
Однако, сам AWS DMS переносит только данные - sequences/view/triggers и тп не будут перенесены, для этого есть AWS Schema Conversion Tool.
В случае с большими базами алгоритм следующий:
Теперь подробней о моих костылях:
migrate_pgsql2aurora_cdc.sh
Скрипт должен содержать информацию о подключении к бд исходнике и назначении, пользователь должен иметь все необходимые права.
Должен быть создана реплика инстанс с именем replication-instance-1, так же есть проблема с тем что один инстанс для переноса может запускать лимитированое количество задач.
Все базы которые необходимо перенести должны быть указаны в файле db_list.
На каждую базу создается по 2 endpoint'a один на src, второй на dst, после создается задача репликации, у которой есть откуда и куда, а так же хост, он же реплика инстанс.
Плюс ко всему есть несолько типов миграции:
task-settings.json
table-mappings.json
В первом указаны параметры, так же не забываем про LOB'ы из коробки, они ограничены и есть шанс получить невалидные данные, которые просто обрежутся, советую почитать про параметры данного файла. Из полезного это валидация, LOB'ы и логирование, если установлен FullLobMode, то перенос займет значительное время.
Во втором какие схемы/таблицы переносить. Плюс надо удостовериться что replica instance сможет достучаться как до исходника так и до назначения, а так же в пункте назначения должны быть созданы бд.
pg_backup_copy.sh
Данный файл запускать на хосте источнике, дергает все бд и начинает заливать.
set_owner.sh
Смена владельца на таблицах, sequences и view
Список баз на которые необходимо установить права в файле db_list, из которого по циклу применяются изменения, в моем случае имя пользователя у каждого сервиса с приставкой _user
В случае с большими базами алгоритм следующий:
- Создаем нужные бд
- Запускаем DMS в режиме репликации, для этого должен быть создан инстанс посредник, который берет из источника и кладет в место назначения, скрипт для этого дела тут
- Выставляем MT и тушим приложение
- Переносим мелкие бд через pg_dump, я для этого написал скриптик
- Запускаем последующий скрипт, который выставляет права на все объекты
- Меняем в приложении как обращаться к бд
- Запускаем приложение
- Выставляем MT
- Запускаем скрипт который переносит все бд
- Меняем в приложении как обращаться к бд
- Запускаем приложение
Теперь подробней о моих костылях:
migrate_pgsql2aurora_cdc.sh
Скрипт должен содержать информацию о подключении к бд исходнике и назначении, пользователь должен иметь все необходимые права.
Должен быть создана реплика инстанс с именем replication-instance-1, так же есть проблема с тем что один инстанс для переноса может запускать лимитированое количество задач.
Все базы которые необходимо перенести должны быть указаны в файле db_list.
На каждую базу создается по 2 endpoint'a один на src, второй на dst, после создается задача репликации, у которой есть откуда и куда, а так же хост, он же реплика инстанс.
Плюс ко всему есть несолько типов миграции:
- full-load - Только миграция
- cdc - Репликация, при наличии всех данных
- full-load-and-cdc - Миграция с последующей репликацией.
task-settings.json
table-mappings.json
В первом указаны параметры, так же не забываем про LOB'ы из коробки, они ограничены и есть шанс получить невалидные данные, которые просто обрежутся, советую почитать про параметры данного файла. Из полезного это валидация, LOB'ы и логирование, если установлен FullLobMode, то перенос займет значительное время.
Во втором какие схемы/таблицы переносить. Плюс надо удостовериться что replica instance сможет достучаться как до исходника так и до назначения, а так же в пункте назначения должны быть созданы бд.
pg_backup_copy.sh
Данный файл запускать на хосте источнике, дергает все бд и начинает заливать.
set_owner.sh
Смена владельца на таблицах, sequences и view
Список баз на которые необходимо установить права в файле db_list, из которого по циклу применяются изменения, в моем случае имя пользователя у каждого сервиса с приставкой _user