Как вы обеспечивали репликацию баз данных в последнем проекте?

«Как вы обеспечивали репликацию баз данных в последнем проекте?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В последнем проекте на основе PostgreSQL была настроена асинхронная потоковая репликация (Streaming Replication) для повышения отказоустойчивости и распределения нагрузки на чтение.

Архитектура:

  • 1 мастер-сервер (принимает запись).
  • 2 реплики (standby) в режиме hot_standby (доступны для запросов SELECT).

Ключевые шаги настройки:

  1. Конфигурация мастера (postgresql.conf):
    wal_level = replica
    max_wal_senders = 3
    wal_keep_size = 1GB
  2. Настройка аутентификации (pg_hba.conf):
    host replication replica_user 192.168.1.0/24 md5
  3. Создание реплики: Базовый бэкап с pg_basebackup и настройка recovery.conf (или postgresql.auto.conf в PG12+).

Мониторинг:

-- Проверка состояния репликации
SELECT client_addr, application_name, state, sync_state, replay_lag 
FROM pg_stat_replication;

Оркестрация: Для автоматического переключения при сбое (failover) использовался Patroni с хранилищем конфигурации etcd, что позволило создать самоуправляемый кластер.