Захват изменений PostgreSQL и поставка в YDS
Важно
Этот документ не применим для пользователей Yandex Cloud в регионе Казахстан. См. полный перечень поддерживаемых эндпоинтов в Data Transfer.
Вы можете отслеживать изменения данных в кластере-источнике Managed Service for PostgreSQL и отправлять их в кластер-приемник Data Streams с помощью технологии Change Data Capture (CDC).
Чтобы настроить CDC с использованием сервиса Data Transfer:
Если созданные ресурсы вам больше не нужны, удалите их.
Необходимые платные ресурсы
-
Кластер Managed Service for PostgreSQL: выделенные хостам вычислительные ресурсы, объем хранилища и резервных копий (см. тарифы Managed Service for PostgreSQL).
-
Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
-
База данных Managed Service for YDB (см. тарифы Managed Service for YDB). Стоимость зависит от режима использования:
- Для бессерверного режима — оплачиваются операции с данными, объем хранимых данных и резервных копий.
- Для режима с выделенными инстансами — оплачивается использование выделенных БД вычислительных ресурсов, объем хранилища и резервные копии.
-
Сервис Data Streams (см. тарифы Data Streams). Стоимость зависит от режима тарификации:
- По выделенным ресурсам — оплачивается фиксированная почасовая ставка за установленный лимит пропускной способности и срок хранения сообщений, а также дополнительно количество единиц фактически записанных данных.
- По фактическому использованию (On-demand) — оплачиваются выполненные операции записи и чтения данных, объем считанных/записанных данных, а также объем фактически используемого хранилища для сообщений, по которым не истек срок хранения.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте кластер-источник Managed Service for PostgreSQL любой подходящей конфигурации с хостами в публичном доступе и следующими настройками:
- Имя БД —
db1. - Имя пользователя —
pg-user.
- Имя БД —
-
Настройте группы безопасности и убедитесь, что они допускают подключение к кластеру.
-
Выдайте роль
mdb_replicationпользователюpg-user. -
Создайте базу данных Managed Service for YDB с именем
ydb-exampleлюбой подходящей конфигурации. -
Создайте сервисный аккаунт с именем
yds-saи рольюyds.editor. Трансфер будет использовать его для доступа к Data Streams.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации postgresql-yds.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности, необходимая для подключения к кластеру;
- кластер-источник Managed Service for PostgreSQL;
- база данных Managed Service for YDB;
- сервисный аккаунт, который будет использоваться для доступа к Data Streams;
- эндпоинт для источника;
- трансфер.
-
Укажите в файле
postgresql-yds.tfпароль пользователя PostgreSQL. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте трансфер
-
Создайте поток данных Data Streams с именем
mpg-stream. -
Подключитесь к кластеру Managed Service for PostgreSQL, создайте в базе данных
db1таблицуmeasurementsи заполните ее данными:CREATE TABLE measurements ( device_id varchar(200) NOT NULL, datetime timestamp NOT NULL, latitude real NOT NULL, longitude real NOT NULL, altitude real NOT NULL, speed real NOT NULL, battery_voltage real, cabin_temperature real NOT NULL, fuel_level real, PRIMARY KEY (device_id) ); INSERT INTO measurements VALUES ('iv9a94th6rzt********', '2022-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 17, NULL), ('rhibbh3y08qm********', '2022-06-06 09:49:54', 55.71294467, 37.66542005, 429.13, 55.5, NULL, 18, 32); -
Создайте эндпоинт-приемник типа
Data Streamsсо следующими настройками:- База данных —
ydb-example. - Поток —
mpg-stream. - Сервисный аккаунт —
yds-sa.
- База данных —
-
Создайте эндпоинт-источник и трансфер:
ВручнуюTerraform-
Создайте эндпоинт-источник типа
PostgreSQLи укажите в нем параметры подключения к кластеру:- Тип инсталляции —
Кластер Managed Service for PostgreSQL. - Кластер Managed Service for PostgreSQL —
<имя_кластера-источника_PostgreSQL>из выпадающего списка. - База данных —
db1. - Пользователь —
pg-user. - Пароль — пароль пользователя
pg-user.
- Тип инсталляции —
-
Создайте трансфер типа Репликация, использующий созданные эндпоинты.
-
Укажите в файле
postgresql-yds.tfпеременные:yds_endpoint_id— значение идентификатора эндпоинта для приемника;transfer_enabled– значение1для создания трансфера.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Активируйте трансфер
-
Активируйте трансфер и дождитесь его перехода в статус Реплицируется.
-
Проверьте, что в поток данных Data Streams перенеслись данные из источника:
Консоль управленияAWS CLI- В консоли управления
выберите сервис Data Streams. - Выберите поток-приемник из списка и перейдите в раздел
Просмотр данных. - Убедитесь, что в сегменте
shard-000000появились сообщения, содержащие строки таблицы из источника. Чтобы рассмотреть сообщения подробнее, нажмите на значок .
-
Настройте окружение для Data Streams.
-
Прочитайте данные из потока с помощью:
- В консоли управления
Проверьте работу репликации
-
Подключитесь к кластеру-источнику.
-
Добавьте в таблицу
measurementsновую строку:INSERT INTO measurements VALUES ('ad02l5ck6sdt********', '2022-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 19, 45); -
Убедитесь, что новая строка отобразилась в потоке данных Data Streams.
Удалите созданные ресурсы
Примечание
Перед тем как удалить созданные ресурсы, деактивируйте трансфер.
Чтобы снизить потребление ресурсов, которые вам не нужны, удалите их:
-
Остальные ресурсы удалите в зависимости от способа их создания:
ВручнуюTerraform-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-
-