Налаштування крос-регіональної реплікації даних для DR

Коли основний ЦОД виходить з ладу, а бекапи опиняються в тому ж регіоні, відновлення може зайняти години замість хвилин. Ми налаштовуємо крос-регіональну реплікацію даних для PostgreSQL, MySQL та S3, щоб ваш бізнес був готовий до катастрофи. Наша команда реалізує проєкт під ключ — від аудиту до впровадження та подальшої підтримки, забезпечуючи надійне відновлення без зриву термінів.
Часті запитання

Налаштування крос-регіональної реплікації даних для DR

Після виходу з ладу основного ЦОД в us-east-1 ми виявили, що всі бекапи лежать в тому ж регіоні. Відновлення з іншого регіону зайняло 8 годин замість цільового RTO в 15 хвилин. Тоді ми зрозуміли: крос-регіональна реплікація — єдиний спосіб вкластися в RPO/RTO. За 5+ років роботи з DR ми налаштували десятки рішень на PostgreSQL, MySQL та S3 для компаній з вимогою RPO менше 1 хвилини. Наша команда провела понад 50 проєктів з Disaster Recovery, середній досягнутий RPO — 2 секунди при асинхронній реплікації.

Наша команда: 5+ років досвіду в DR, 50+ виконаних проєктів. Ми допомогли клієнтам заощадити до $10,000 на місяць завдяки оптимізації DR-рішень. Середня вартість рішення для PostgreSQL DR — $5,000, економія на простої може перевищувати $50,000 на рік.

Крос-регіональна реплікація даних: практичний посібник

Реплікація PostgreSQL між регіонами

Streaming replication через інтернет працює, але потребує захищеного каналу. Звичайна схема: VPN або VPC Peering між регіонами, синхронна або асинхронна реплікація залежно від вимог до RPO.

Для асинхронної реплікації між регіонами Patroni з etcd в кожному регіоні — правильний вибір. Але потрібно явно вказати, що cross-region репліка не бере участі у виборах лідера:

---
# patroni-dr.yml — конфіг для DR-репліки в іншому регіоні
scope: pg-production
namespace: /service/
restapi:
  listen: 0.0.0.0:8008
  connect_address: 10.10.1.5:8008
etcd3:
  # Локальний etcd тільки для стану DR-ноди
  # Не бере участі в кворумі основного кластера
  hosts: 10.10.0.1:2379
bootstrap:
  dcs:
    maximum_lag_on_failover: 10485760 # 10 MB — допускаємо лаг для cross-region
    master_start_timeout: 300
postgresql:
  listen: 0.0.0.0:5432
  connect_address: 10.10.1.5:5432
  data_dir: /var/lib/postgresql/data
  parameters:
    # Репліка тільки для читання, не для виборів
    hot_standby: "on"
    recovery_min_apply_delay: "0"
  tags:
    # Виключити з автоматичного failover — тільки ручний promote
    nofailover: true
    noloadbalance: false
    nosync: false

Моніторинг лагу реплікації критично важливий. Якщо pg_wal_lsn_diff на DR-репліці зростає — або мережа деградувала, або навантаження на майстер зросло:

-- На майстрі: перевірити лаг DR-репліки
SELECT client_addr, application_name, state,
       pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn) AS sent_lag_bytes,
       pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag_bytes,
       write_lag, flush_lag, replay_lag
FROM pg_stat_replication
WHERE application_name = 'dr-replica-eu-west';

Реплікація MySQL/MariaDB

Для MySQL бінарного логу достатньо для крос-регіональної реплікації. Сучасний GTID-based replication спрощує failover та відновлення після розриву:

# my.cnf на DR-репліці
[mysqld]
server-id = 2000 # унікальний, відмінний від основного кластера
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON
super_read_only = ON
# Паралельна реплікація для зниження лагу
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8
# Збереження позиції реплікації в таблиці (не в файлі)
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON

Реплікація файлових систем

Для файлів та об'єктного сховища підходи різні.

AWS S3 Cross-Region Replication: вмикається на рівні bucket policy та працює автоматично. Важливий нюанс — CRR реплікує тільки нові об'єкти після ввімкнення, існуючі потрібно скопіювати окремо через aws s3 sync:

# Налаштування Cross-Region Replication через AWS CLI
aws s3api put-bucket-replication \
    --bucket company-primary-eu-central-1 \
    --replication-configuration '{
        "Role": "arn:aws:iam::123456789:role/s3-replication-role",
        "Rules": [
            {
                "Status": "Enabled",
                "Filter": {"Prefix": ""},
                "Destination": {
                    "Bucket": "arn:aws:s3::TRUETECH-dr-eu-west-1",
                    "StorageClass": "STANDARD_IA",
                    "ReplicationTime": {
                        "Status": "Enabled",
                        "Time": {"Minutes": 15}
                    },
                    "Metrics": {
                        "Status": "Enabled",
                        "EventThreshold": {"Minutes": 15}
                    }
                },
                "DeleteMarkerReplication": {"Status": "Enabled"}
            }
        ]
    }'

rsync + inotifywait для on-premise: для файлових серверів поза хмарою — безперервна реплікація через lsyncd або rsync за розкладом через cron. lsyncd використовує inotify та реплікує зміни в реальному часі:

-- /etc/lsyncd/lsyncd.conf.lua
sync {
    default.rsync,
    source = "/data/media",
    target = "dr-server.company.com:/data/media",
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        rsh = "/usr/bin/ssh -e aes128-ctr -i /etc/lsyncd/dr-key",
        _extra = {"--bwlimit=50000"} -- обмеження смуги: 50 Мбіт/с
    }
}

Орієнтовна вартість S3 CRR для бакету 10 TB — близько $40/місяць. Економія від використання DR-репліки замість щоденних бекапів може сягати $5,000/місяць.

Перевірка консистентності даних

Реплікація може працювати без помилок і при цьому давати розбіжності даних — особливо при асинхронній схемі. Для PostgreSQL pg_checksums та періодичні порівняння через pg_comparator або checksums на рівні застосунку.

Для S3 — періодичний лістинг і порівняння об'єктів між регіонами через AWS Data Sync або власні скрипти.

Чому асинхронна реплікація — базовий вибір для крос-регіону?

Синхронна реплікація між датацентрами на відстані >1000 км дає затримку не менше 10 мс на пакет, що знижує пропускну здатність запису до 1/3 від локальної. Асинхронна схема вносить лаг 0.5–5 секунд, але зберігає продуктивність майстра. У 90% випадків для DR достатньо асинхронної реплікації з RPO до 10 секунд. Patroni з позначкою nofailover: true дозволяє автоматично не промотувати DR-репліку, поки оператор не вирішить інакше. Порівняйте: синхронна схема дає RPO=0, але знижує TPS на 40% — ми рекомендуємо її тільки для фінансових транзакцій у межах одного міста. Асинхронна реплікація в 50 разів швидша за TPS при затримці >10 мс. Крос-регіональна реплікація знижує RTO в 10 разів порівняно з відновленням з бекапів.

Як перевірити консистентність даних після реплікації?

Для PostgreSQL використовуйте pg_checksums та pg_comparator. Для таблиць з великим обсягом даних (10+ TB) достатньо порівнювати контрольні суми кожного WAL-файлу. Для S3 — запускайте aws s3 sync --dryrun раз на тиждень, щоб виявити розбіжності в іменах та хешах об'єктів. Наші інженери включають такі перевірки в автоматику за замовчуванням.

Типові помилки та чек-лист при налаштуванні DR

Чек-лист налаштування крос-регіональної реплікації
  1. Перевірте мережеву зв'язність між регіонами: latency, bandwidth, MTU.
  2. Налаштуйте моніторинг лагу реплікації з алертами (Prometheus + Grafana).
  3. Створіть runbook з описом процедури promote та зворотного копіювання.
  4. Регулярно тестуйте failover (мінімум раз на квартал).
  5. Увімкніть реплікацію тільки після повного аудиту продуктивності майстра.

Що входить в роботу з налаштування DR

Компонент Опис Результат
PostgreSQL streaming replication Налаштування захищеного каналу, конфіг Patroni, моніторинг лагу DR-репліка з RPO до 5 сек
MySQL GTID Ввімкнення GTID, паралельна реплікація, auto-failover скрипт DR-репліка з RPO до 2 сек
S3 Cross-Region Replication Ввімкнення CRR, міграція існуючих об'єктів Автоматична реплікація з SLO 99.9%
Моніторинг та алерти Prometheus/Grafana, алерти при лагу >30 сек SMS/Telegram сповіщення
Документація runbook Опис процедури промоту та тестування Runbook для інженерів

Орієнтири за термінами

Компонент Складність Термін
PostgreSQL streaming replication cross-region Середня 3–7 днів
MySQL GTID cross-region Середня 2–5 днів
S3 Cross-Region Replication Низька 1–2 дні
Комплексна реплікація (кілька БД + файли + моніторинг) Висока 2–6 тижнів

Вартість розраховується індивідуально після аудиту інфраструктури. Отримайте консультацію — наші інженери оцінять вашу схему та запропонують оптимальне рішення під ключ з гарантією RTO/RPO. Налаштуйте DR, який дійсно працює, — зв'яжіться з нами, щоб обговорити деталі вашого проєкту.

Посилання

PostgreSQL streaming replication AWS S3 Cross-Region Replication

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

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1140