PostgreSQL RTO і RPO: налаштування відмовостійкості з Patroni

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

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, 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
    Розробка веб-сайту для компанії ФІКСПЕР
    997

Зауважимо: коли сервіс лежить годину, а 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 Низький
4год 1год Hourly backup + cold standby Середній
1год 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 гривень на місяць за рахунок запобігання простоям. Зв'яжіться з нами для розрахунку вашого випадку. Замовте консультацію — ми підберемо оптимальну архітектуру під ваш бюджет та вимоги.