Настройка Aurora PostgreSQL для CDC
Aurora PostgreSQL vs стандартный PostgreSQL
Amazon Aurora PostgreSQL — это облачная версия PostgreSQL, оптимизированная для AWS. Для настройки CDC в Aurora есть несколько критических отличий от стандартного PostgreSQL:
| Аспект | PostgreSQL | Aurora PostgreSQL |
|---|---|---|
| Конфигурация WAL | postgresql.conf | DB Cluster Parameter Group |
| Включение логической репликации | wal_level = logical | rds.logical_replication = 1 |
| Применение изменений | Перезапуск сервиса | Reboot инстанса (обязательно!) |
| Права доступа | Superuser | rds_superuser role |
| Плагин вывода | Любой (pgoutput, wal2json) | pgoutput (wal2json предустановлен) |
Ключевое отличие: В Aurora нельзя напрямую редактировать конфигурационные файлы. Все параметры настраиваются через Parameter Groups в AWS Console или CLI.
DB Cluster Parameter Group vs DB Instance Parameter Group
В Aurora существует два типа parameter groups. Для логической репликации критически важно использовать правильный тип:
Warning:
rds.logical_replicationдоступен только в DB Cluster Parameter Group. Если вы создадите DB Instance Parameter Group и попытаетесь добавить этот параметр — вы его не найдете!
Проверка знанийИнженер ищет параметр rds.logical_replication в DB Instance Parameter Group, но не находит его. В чём ошибка?
Процесс настройки Aurora для Debezium
Настройка состоит из пяти этапов. Каждый этап обязателен:
Parameter Group
параметры
к кластеру
Writer Instance
конфигурацию
SHOW wal_level; покажет replica вместо logicalDebezium выдаст ошибку: "wal_level must be logical to use logical replication"
Необходимые параметры
| Параметр | Значение | Описание |
|---|---|---|
rds.logical_replication | 1 | Включает логическую репликацию (изменяет wal_level на logical) |
max_replication_slots | 10 | Максимум слотов репликации (минимум 1 на коннектор) |
max_wal_senders | 10 | Максимум соединений для чтения WAL |
max_logical_replication_workers | 10 | Воркеры для логической репликации |
max_worker_processes | 30 | Должен быть >= сумме всех worker-параметров |
Настройка через AWS Console
Шаг 1: Создание Parameter Group
- Откройте AWS Console → RDS → Parameter groups
- Нажмите Create parameter group
- Заполните форму:
- Parameter group family:
aurora-postgresql15(или ваша версия) - Type:
DB Cluster Parameter Group(не DB Parameter Group!) - Group name:
debezium-logical-replication - Description:
Logical replication for Debezium CDC
- Parameter group family:
Шаг 2: Настройка параметров
- Выберите созданную группу → Edit
- Найдите и измените параметры:
rds.logical_replication = 1
max_replication_slots = 10
max_wal_senders = 10
max_logical_replication_workers = 10
max_worker_processes = 30
- Нажмите Save changes
Шаг 3: Применение к кластеру
- Перейдите в RDS → Databases
- Выберите ваш Aurora кластер → Modify
- В секции Additional configuration:
- DB cluster parameter group: выберите
debezium-logical-replication
- DB cluster parameter group: выберите
- Apply immediately (для dev/test) или schedule maintenance window
- Нажмите Modify cluster
Шаг 4: Reboot Writer Instance
CRITICAL: Изменения параметров НЕ применяются автоматически. Без reboot
wal_levelостанетсяreplica, и Debezium не сможет подключиться!
- В списке инстансов кластера найдите Writer
- Actions → Reboot
- Дождитесь статуса Available (3-5 минут)
Проверка знанийПосле применения parameter group к кластеру, SHOW wal_level; возвращает 'replica'. Какой шаг был пропущен?
Шаг 5: Проверка конфигурации
Подключитесь к базе данных и выполните:
-- Проверка wal_level (должен быть 'logical')
SHOW wal_level;
-- Ожидаемый результат: logical
-- Проверка rds.logical_replication
SHOW rds.logical_replication;
-- Ожидаемый результат: on
-- Проверка лимитов
SHOW max_replication_slots;
-- Ожидаемый результат: 10 (или ваше значение)
SHOW max_wal_senders;
-- Ожидаемый результат: 10 (или ваше значение)
Если wal_level показывает replica — вы забыли выполнить reboot!
Настройка через AWS CLI
Для автоматизации используйте AWS CLI. Это рекомендуемый подход для production и CI/CD:
#!/bin/bash
# Aurora PostgreSQL CDC Setup Script
# Переменные
CLUSTER_ID="debezium-aurora-cluster"
PARAM_GROUP_NAME="debezium-logical-replication"
REGION="us-east-1"
PG_FAMILY="aurora-postgresql15"
# 1. Создать DB Cluster Parameter Group
aws rds create-db-cluster-parameter-group \
--db-cluster-parameter-group-name $PARAM_GROUP_NAME \
--db-parameter-group-family $PG_FAMILY \
--description "Logical replication for Debezium CDC" \
--region $REGION
echo "Parameter group created: $PARAM_GROUP_NAME"
# 2. Настроить параметры для логической репликации
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name $PARAM_GROUP_NAME \
--parameters \
"ParameterName=rds.logical_replication,ParameterValue=1,ApplyMethod=pending-reboot" \
"ParameterName=max_replication_slots,ParameterValue=10,ApplyMethod=pending-reboot" \
"ParameterName=max_wal_senders,ParameterValue=10,ApplyMethod=pending-reboot" \
"ParameterName=max_logical_replication_workers,ParameterValue=10,ApplyMethod=pending-reboot" \
--region $REGION
echo "Parameters configured for logical replication"
# 3. Применить parameter group к кластеру
aws rds modify-db-cluster \
--db-cluster-identifier $CLUSTER_ID \
--db-cluster-parameter-group-name $PARAM_GROUP_NAME \
--apply-immediately \
--region $REGION
echo "Parameter group applied to cluster: $CLUSTER_ID"
# 4. Получить имя Writer Instance
WRITER_INSTANCE=$(aws rds describe-db-clusters \
--db-cluster-identifier $CLUSTER_ID \
--region $REGION \
--query 'DBClusters[0].DBClusterMembers[?IsClusterWriter==`true`].DBInstanceIdentifier' \
--output text)
echo "Writer instance: $WRITER_INSTANCE"
# 5. Reboot Writer Instance (ОБЯЗАТЕЛЬНО!)
aws rds reboot-db-instance \
--db-instance-identifier $WRITER_INSTANCE \
--region $REGION
echo "Rebooting writer instance..."
# 6. Дождаться завершения reboot
aws rds wait db-instance-available \
--db-instance-identifier $WRITER_INSTANCE \
--region $REGION
echo "Writer instance is available"
echo "Configuration complete! Verify with: SHOW wal_level;"
Aurora Serverless: Ограничения
Не все версии Aurora Serverless поддерживают логическую репликацию:
| Версия | Поддержка CDC |
|---|---|
| Aurora Serverless v1 | НЕ поддерживается |
| Aurora Serverless v2 | Поддерживается |
| Aurora Provisioned | Поддерживается |
Warning: Если вы используете Aurora Serverless v1, миграция на v2 или Provisioned обязательна для работы с Debezium.
Права доступа: rds_superuser
В Aurora PostgreSQL нет роли superuser. Вместо нее используется rds_superuser:
-- Создание пользователя для Debezium
CREATE USER debezium_user WITH PASSWORD 'secure_password';
-- Назначение rds_superuser (требуется для репликации)
GRANT rds_superuser TO debezium_user;
-- Или более ограниченный вариант:
GRANT rds_replication TO debezium_user;
-- Права на чтение таблиц (для всех таблиц в public)
GRANT SELECT ON ALL TABLES IN SCHEMA public TO debezium_user;
Troubleshooting
Проблема: “wal_level must be logical”
Симптом: Debezium connector не может подключиться, в логах ошибка:
wal_level must be logical to use logical replication
Причина: Reboot не был выполнен после изменения параметров.
Решение:
- Проверьте статус в AWS Console — если pending-reboot, выполните reboot
- После reboot проверьте:
SHOW wal_level;
Проблема: Параметр rds.logical_replication не найден
Симптом: При поиске параметра в parameter group он отсутствует.
Причина: Вы создали DB Instance Parameter Group вместо DB Cluster Parameter Group.
Решение: Создайте новую parameter group с типом DB Cluster Parameter Group.
Проблема: permission denied for replication
Симптом: Debezium не может создать replication slot.
Причина: Пользователь не имеет прав на репликацию.
Решение:
GRANT rds_replication TO your_debezium_user;
-- или
GRANT rds_superuser TO your_debezium_user;
Чеклист настройки Aurora CDC
Используйте этот чеклист для проверки конфигурации:
- Создан DB Cluster Parameter Group (не DB Instance!)
-
rds.logical_replication = 1 -
max_replication_slots >= 10 -
max_wal_senders >= 10 - Parameter group применен к кластеру
- Writer instance перезагружен
-
SHOW wal_level;возвращаетlogical - Пользователь Debezium имеет
rds_superuserилиrds_replication
Что дальше?
После настройки Aurora для логической репликации важно понимать поведение системы при failover. В следующем уроке мы разберем критическую особенность Aurora: replication slots не синхронизируются при failover, что может привести к потере данных. Вы узнаете, как настроить heartbeat для детектирования таких ситуаций.
Проверьте понимание
Закончили урок?
Отметьте его как пройденный, чтобы отслеживать свой прогресс