PostgreSQL RTO и RPO: настройка отказоустойчивости с Patroni

Отметим: когда сервис лежит час, а recovery занимает сутки — это катастрофа. Платёжный шлюз, обрабатывающий 10 000 транзакций в минуту, при простое в 30 минут теряет не только выручку, но и доверие клиентов. Средняя стоимость часа простоя для e-commerce — более 1 000 000 рублей. [RTO](https://en.wik

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
PostgreSQL RTO и RPO: настройка отказоустойчивости с Patroni
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    983
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    998

Отметим: когда сервис лежит час, а recovery занимает сутки — это катастрофа. Платёжный шлюз, обрабатывающий 10 000 транзакций в минуту, при простое в 30 минут теряет не только выручку, но и доверие клиентов. Средняя стоимость часа простоя для e-commerce — более 1 000 000 рублей. RTO (Recovery Time Objective) и RPO (Recovery Point Objective) — параметры, которые определяют, как быстро вы встанете после сбоя и сколько данных потеряете. Мы настраиваем инфраструктуру PostgreSQL так, чтобы эти метрики соответствовали бизнес-требованиям: от cold standby до multi-region active-active. Наши инженеры имеют более 10 лет опыта в PostgreSQL и более 50 успешных проектов по внедрению отказоустойчивых кластеров.

Какие проблемы решаем

  • Неопределённые SLA. Без формальных RTO/RPO вы не можете гарантировать клиентам время восстановления. Штрафы по договорам растут, а репутация страдает.
  • Ручное восстановление. При сбое администратор вручную поднимает реплику — это часы простоя. Автоматический failover сокращает RTO до секунд.
  • Потеря данных. Редкие бэкапы (раз в сутки) означают RPO = 24 часа. При сбое вы теряете дневные транзакции. WAL-архивирование каждые 5 минут снижает RPO до 5 минут.
  • Избыточные затраты. Погоня за нулевым RTO без анализа бизнеса приводит к переплате. Мы помогаем найти баланс стоимость/надёжность.

Как определить RTO и RPO для вашего бизнеса?

Первый шаг — оценка стоимости простоя. Используем простой калькулятор:

class RtoCalculator: def calculate_downtime_cost(self, hourly_revenue, churn_per_hour, penalty, clv, customers): costs = { 'lost_revenue': hourly_revenue, 'churn': (churn_per_hour/100)*customers*clv, 'sla_penalties': penalty, 'labor': 500 } total = sum(costs.values()) if total > 100000: return '< 5 min (active-active)' elif total > 10000: return '< 15 min (hot standby)' else: return '< 1 h (warm standby)' 
RTO RPO Архитектура Уровень затрат
24ч 24ч Ежедневный backup на S3 Низкий
Hourly backup + cold standby Средний
15мин Streaming replication + manual failover Средний+
15мин 5мин Patroni + pgBackRest + WAL archiving Высокий
5мин 0 Multi-region active-active Очень высокий

Почему Patroni — лучший выбор для PostgreSQL?

Patroni с etcd обеспечивает failover за 30 секунд — в 10 раз быстрее ручного восстановления. Он управляет конфигурацией, автоматически переключает трафик и не теряет данные при правильной настройке синхронной репликации. Это стандарт для High Availability в PostgreSQL.

Как мы это делаем

Кейс: Корпоративная CRM на PostgreSQL 15. Требовались RTO < 30 минут и RPO < 5 минут. Развернули Patroni на трёх нодах, pgBackRest для WAL-архивирования в S3, HAProxy для маршрутизации. После тестового сбоя (kill primary) failover занял 18 секунд, потеря данных — 0 (синхронная репликация). Документация по восстановлению была передана команде.

Конфигурация PostgreSQL и pgBackRest для RPO = 5 минут
# postgresql.conf wal_level = replica archive_mode = on archive_command = 'pgbackrest --stanza=main archive-push %p' checkpoint_timeout = 5min max_wal_senders = 10 wal_keep_size = 1GB # pgbackrest.conf [global] repo1-type=s3 repo1-s3-bucket=myapp-wal-archive repo1-retention-full=4 repo1-retention-diff=14 [main] pg1-path=/var/lib/postgresql/data 

Patroni: автоматический failover (RTO < 30 сек)

# patroni.yml scope: postgres-cluster name: pg-node-1 restapi: listen: 0.0.0.0:8008 etcd3: hosts: etcd1:2379,etcd2:2379,etcd3:2379 bootstrap: dcs: ttl: 30 loop_wait: 10 max_lag_on_failover: 1048576 postgresql: parameters: wal_level: replica hot_standby: on archive_command: 'pgbackrest --stanza=main archive-push %p' 

HAProxy: маршрутизация с учётом роли

frontend postgres_write bind *:5432 default_backend postgres_primary backend postgres_primary option httpchk GET /master server pg-node-1 check port 8008 frontend postgres_read bind *:5433 default_backend postgres_replicas backend postgres_replicas balance roundrobin option httpchk GET /replica server pg-node-1 check port 8008 

Как мониторить RTO/RPO?

Мониторинг — ключ к соблюдению SLA. В таблице приведены метрики, которые нужно отслеживать:

Метрика Инструмент Порог алерта
Lag реплики (bytes) pg_stat_replication > 50 MB
Время последнего успешного бэкапа pgBackRest info > 1 hour
Размер WAL-файлов pg_ls_waldir > 10 GB
Доступность primary (check) HAProxy stats < 100%
Время отклика Patroni API curl /health > 5 sec

Настраиваем Prometheus + alertmanager. При нарушении RPO дежурная команда получает уведомление. Это позволяет реагировать до того, как сбой повлияет на бизнес.

Что делать при нарушении RPO?

Типичные ошибки при проектировании отказоустойчивости:

  • Отсутствие тестов failover. Мы проводим хаос-инжиниринг: симулируем отказ ноды, сети, диска. Только так можно подтвердить реальные RTO/RPO.
  • Игнорирование задержек репликации. При синхронном режиме latency между дата-центрами не должна превышать 10 мс.
  • Неправильная ротация бэкапов. pgBackRest с retention (full/diff) гарантирует, что старые бэкапы не перезаписываются. Восстановление на любую точку во времени.

Мы составляем чек-лист для дежурных: действия при сбое, порядок promotion, контакты вендора.

Процесс работы

  1. Аудит — инвентаризация текущей инфраструктуры, нагрузка, бюджет.
  2. Расчёт — определяем целевые RTO/RPO вместе с вами.
  3. Проектирование — выбираем архитектуру (Patroni + etcd, pgBackRest, HAProxy).
  4. Реализация — развёртывание, конфигурация, тестирование failover.
  5. Тест — симулируем сбои, измеряем реальные RTO/RPO.
  6. Документация и обучение — runbook по инцидентам, обучение дежурных.

Что входит в настройку под ключ

  • Настройка Patroni с etcd/Consul для автоматического failover
  • pgBackRest — full/differential backup, WAL-архивирование в S3 или локальное хранилище
  • HAProxy — интеллектуальная маршрутизация (write/read split)
  • Мониторинг — Prometheus экспортер для lag, алерты при нарушении RPO
  • Документация — план восстановления, конфиги, проверочные листы
  • Обучение — 2 часа workshop для вашей команды

Сроки и гарантии

Настройка под ключ для типового кластера (3 ноды) занимает 3–5 рабочих дней. Результат — достижение целевых RTO/RPO, подтверждённое нагрузочным тестированием. Мы сертифицированные инженеры с более чем 10 годами опыта в PostgreSQL. Гарантируем SLA на время восстановления.

Экономия от внедрения автоматического failover может составлять от 100 000 до 500 000 рублей в месяц за счёт предотвращения простоев. Свяжитесь с нами для расчёта вашего случая. Закажите консультацию — мы подберём оптимальную архитектуру под ваш бюджет и требования.