PostgreSQL replication на VPS: streaming replica и failover — иллюстрация к статье Storm Cloud Blog, категория DevOps
PostgreSQL replication на VPS: streaming replica и failover — иллюстрация к статье Storm Cloud Blog, категория DevOps
DevOps·2 мин··

PostgreSQL replication на VPS: streaming replica и failover

Настройка PostgreSQL streaming replication на VPS: primary/replica, pg_basebackup, мониторинг lag. High availability для малого проекта.

Краткий ответ: Primary принимает записи, replica — read-only копия через WAL streaming. Два VPS или primary + replica на разных AZ — защита от падения диска/сервера.

Не заменяет полноценный Patroni-кластер, но для SaaS на 2 VPS — must-have step перед ростом.


Архитектура

App → Primary (read/write)
         ↓ WAL stream
      Replica (read-only, backup)

Тюнинг primary — PostgreSQL tuning. Выбор БД — MySQL vs PostgreSQL.


Primary: postgresql.conf

wal_level = replica
max_wal_senders = 3
wal_keep_size = 1GB
# pg_hba.conf — разрешить replica IP
host replication replicator REPLICA_IP/32 scram-sha-256
CREATE USER replicator WITH REPLICATION PASSWORD 'secret';

Replica: pg_basebackup

sudo systemctl stop postgresql
sudo rm -rf /var/lib/postgresql/16/main/*
sudo -u postgres pg_basebackup -h PRIMARY_IP -D /var/lib/postgresql/16/main -U replicator -P -R
sudo systemctl start postgresql

Флаг -R создаёт standby.signal и primary_conninfo.


Проверка lag

-- на primary
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn
FROM pg_stat_replication;
-- на replica
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();

Алерты — Prometheus + Alertmanager.


Read-only на replica

-- replica по умолчанию hot standby
SELECT pg_is_in_recovery(); -- true

Приложение: read queries → replica, writes → primary. Laravel/Django — database routing.


Failover (ручной)

  1. Promote replica: pg_ctl promote или pg_promote()
  2. Переключить DNS/apps на новый primary
  3. Старый primary — rebuild как replica

Автоматический failover — Patroni/etcd (отдельная тема, 3+ nodes).


Бэкапы

Replica — удобно для pg_dump без нагрузки на primary. Плюс Restic WAL archive (опционально).


Итог

PostgreSQL streaming replication на двух VPS — первый шаг к HA. Primary + replica, мониторинг lag, plan ручного failover.

VPS 2× — StormNet Cloud. Балансировка — HAProxy. VPN между серверами — WireGuard.

Частые вопросы

Нужна ли replica PostgreSQL на одном VPS?

Нет — replica на том же диске не защитит от hardware failure. Нужен второй VPS или другой AZ.

Streaming replication или logical replication?

Streaming — полная копия БД, проще для HA и read replica. Logical — выборочные таблицы, миграции между версиями.