Skip to content
Learning Platform
Intermediate
25 minutes
aurora aws parameter-groups rds-logical-replication

Настройка Aurora PostgreSQL для CDC

Aurora PostgreSQL vs стандартный PostgreSQL

Amazon Aurora PostgreSQL — это облачная версия PostgreSQL, оптимизированная для AWS. Для настройки CDC в Aurora есть несколько критических отличий от стандартного PostgreSQL:

АспектPostgreSQLAurora PostgreSQL
Конфигурация WALpostgresql.confDB Cluster Parameter Group
Включение логической репликацииwal_level = logicalrds.logical_replication = 1
Применение измененийПерезапуск сервисаReboot инстанса (обязательно!)
Права доступаSuperuserrds_superuser role
Плагин выводаЛюбой (pgoutput, wal2json)pgoutput (wal2json предустановлен)

Ключевое отличие: В Aurora нельзя напрямую редактировать конфигурационные файлы. Все параметры настраиваются через Parameter Groups в AWS Console или CLI.

DB Cluster Parameter Group vs DB Instance Parameter Group

В Aurora существует два типа parameter groups. Для логической репликации критически важно использовать правильный тип:

DB Cluster Parameter GroupRecommended
Применяется ко ВСЕМ инстансам кластера
rds.logical_replication = 1
max_replication_slots = 10
max_wal_senders = 10
DB Instance Parameter Group
Применяется к конкретному инстансу
shared_buffers
work_mem
maintenance_work_mem
Aurora Cluster Instances
Writer Instance
Reader Instance 1
Reader Instance 2
Cluster Parameter Group применяется ко ВСЕМ инстансам

Warning: rds.logical_replication доступен только в DB Cluster Parameter Group. Если вы создадите DB Instance Parameter Group и попытаетесь добавить этот параметр — вы его не найдете!

Проверка знаний
Инженер ищет параметр rds.logical_replication в DB Instance Parameter Group, но не находит его. В чём ошибка?
Ответ
rds.logical_replication доступен только в DB Cluster Parameter Group, а не в DB Instance Parameter Group. Это критическое различие в Aurora: параметры уровня кластера (WAL, репликация) управляются через кластерную группу параметров.

Процесс настройки Aurora для Debezium

Настройка состоит из пяти этапов. Каждый этап обязателен:

Шаг 1Создать
Parameter Group
Шаг 2Изменить
параметры
Шаг 3Применить
к кластеру
Шаг 4 CRITICALReboot
Writer Instance
Шаг 5Проверить
конфигурацию
Критическое предупреждение
Шаг 4 (Reboot) обязателен!
Без reboot Writer Instance параметры НЕ применяются.
SHOW wal_level; покажет replica вместо logical
Debezium выдаст ошибку: "wal_level must be logical to use logical replication"
Проверка после настройки
SHOW wal_level; -- должен быть 'logical'
SHOW rds.logical_replication; -- должен быть 'on'
SHOW max_replication_slots; -- минимум 10
SHOW max_wal_senders; -- минимум 10

Необходимые параметры

ПараметрЗначениеОписание
rds.logical_replication1Включает логическую репликацию (изменяет wal_level на logical)
max_replication_slots10Максимум слотов репликации (минимум 1 на коннектор)
max_wal_senders10Максимум соединений для чтения WAL
max_logical_replication_workers10Воркеры для логической репликации
max_worker_processes30Должен быть >= сумме всех worker-параметров

Настройка через AWS Console

Шаг 1: Создание Parameter Group

  1. Откройте AWS ConsoleRDSParameter groups
  2. Нажмите Create parameter group
  3. Заполните форму:
    • Parameter group family: aurora-postgresql15 (или ваша версия)
    • Type: DB Cluster Parameter Group (не DB Parameter Group!)
    • Group name: debezium-logical-replication
    • Description: Logical replication for Debezium CDC

Шаг 2: Настройка параметров

  1. Выберите созданную группу → Edit
  2. Найдите и измените параметры:
rds.logical_replication = 1
max_replication_slots = 10
max_wal_senders = 10
max_logical_replication_workers = 10
max_worker_processes = 30
  1. Нажмите Save changes

Шаг 3: Применение к кластеру

  1. Перейдите в RDSDatabases
  2. Выберите ваш Aurora кластер → Modify
  3. В секции Additional configuration:
    • DB cluster parameter group: выберите debezium-logical-replication
  4. Apply immediately (для dev/test) или schedule maintenance window
  5. Нажмите Modify cluster

Шаг 4: Reboot Writer Instance

CRITICAL: Изменения параметров НЕ применяются автоматически. Без reboot wal_level останется replica, и Debezium не сможет подключиться!

  1. В списке инстансов кластера найдите Writer
  2. ActionsReboot
  3. Дождитесь статуса Available (3-5 минут)
Проверка знаний
После применения parameter group к кластеру, SHOW wal_level; возвращает 'replica'. Какой шаг был пропущен?
Ответ
Writer Instance не был перезагружен. В Aurora изменения parameter group требуют reboot для применения. Без него старые параметры остаются активными. Это самая частая ошибка при настройке CDC на Aurora.

Шаг 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 не был выполнен после изменения параметров.

Решение:

  1. Проверьте статус в AWS Console — если pending-reboot, выполните reboot
  2. После 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 для детектирования таких ситуаций.

Check Your Understanding

Score: 0 of 0
Conceptual
Question 1 of 4. В чём ключевое различие между DB Cluster Parameter Group и DB Instance Parameter Group в Amazon Aurora PostgreSQL?

Finished the lesson?

Mark it as complete to track your progress