Налаштування Master-Master реплікації для веб-застосунків

Уявіть: ваш інтернет-магазин працює в Європі та Азії. Запис до бази даних з Азії йде через Європу із затримкою понад 100 мс — це критично для роботи каталогу та кошика. Ми зіткнулися з таким завданням у проекті з онлайн-рітейлером на 500 тис. товарів і вирішили його впровадженням **Master-Master реп

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

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування Master-Master реплікації для веб-застосунків
Складний
~3-5 днів

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

Часті запитання

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

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

Уявіть: ваш інтернет-магазин працює в Європі та Азії. Запис до бази даних з Азії йде через Європу із затримкою понад 100 мс — це критично для роботи каталогу та кошика. Ми зіткнулися з таким завданням у проекті з онлайн-рітейлером на 500 тис. товарів і вирішили його впровадженням Master-Master реплікації. Технологія multi-master реплікації дозволяє писати локально в кожному регіоні, а дані синхронізуються між вузлами без втрат. Ми виконали 30+ проектів з високою складністю, маючи понад 5 років досвіду.

Чому Master-Master, а не Master-Slave?

Master-Slave — це класика: один вузол пише, інші читають. Але коли застосунок працює в розподіленому середовищі, latency запису стає вузьким місцем. Master-Master знімає це обмеження: кожен вузол може приймати запис. Згідно з документацією Galera, синхронна реплікація multi-master забезпечує строгу консистентність і нульовий час перемикання при збої. Galera Cluster забезпечує перемикання за <1 сек — це в 10 разів швидше, ніж ручний failover на Master-Slave.

Коли потрібна Master-Master реплікація?

  • Застосунки в різних регіонах повинні писати локально з синхронізацією.
  • Потрібна відмовостійкість без єдиної точки відмови.
  • Затримка запису через єдиний майстер перевищує допустимі 50 мс.
  • Окупність такого рішення — 2–3 місяці при навантаженні від 10 тис. запитів на секунду.

Як налаштувати Galera Cluster на трьох вузлах

  1. Встановіть Galera на всі вузли (наприклад, Ubuntu 22.04).
  2. Налаштуйте /etc/mysql/conf.d/galera.cnf як показано нижче.
  3. Ініціалізуйте перший вузол командою galera_new_cluster.
  4. Запустіть MySQL на інших вузлах — вони приєднаються автоматично.
  5. Перевірте стан: SHOW STATUS LIKE 'wsrep_cluster_size'; — має бути 3.
# /etc/mysql/conf.d/galera.cnf [mysqld] binlog_format = ROW default_storage_engine = InnoDB innodb_autoinc_lock_mode = 2 bind-address = 0.0.0.0 # Galera Provider wsrep_on = ON wsrep_provider = /usr/lib/galera/libgalera_smm.so wsrep_cluster_name = "production_cluster" wsrep_cluster_address = "gcomm://192.168.1.10,192.168.1.11,192.168.1.12" wsrep_sst_method = rsync # Унікально для кожного вузла wsrep_node_address = "192.168.1.10" wsrep_node_name = "node1" 
Деталі конфігурації SST Для SST можна використовувати rsync або xtrabackup. У production рекомендуємо xtrabackup — він не блокує таблиці під час повної синхронізації.

Як уникнути втрати даних при реплікації?

Втрата даних у multi-master можлива при збої вузла до синхронізації. Для мінімізації ризиків використовуйте синхронну реплікацію (Galera) з автоматичним відновленням після збою. У BDR налаштуйте слоти реплікації із затримкою не більше 1 секунди. Регулярне створення бекапів за допомогою xtrabackup або pg_dump знижує втрати до 1 хвилини при повній відмові кластера.

Налаштування PostgreSQL BDR

BDR (Bi-Directional Replication) — розширення для асинхронної multi-master реплікації в PostgreSQL. Воно підходить для завдань, де допустима eventual consistency (затримка синхронізації до 1–2 с).

-- Підключення розширення CREATE EXTENSION bdr; -- Ініціалізація першого вузла SELECT bdr.bdr_group_create( local_node_name := 'node1', node_external_dsn := 'host=192.168.1.10 port=5432 dbname=myapp' ); -- Приєднання другого вузла SELECT bdr.bdr_group_join( local_node_name := 'node2', node_external_dsn := 'host=192.168.1.11 port=5432 dbname=myapp', join_using_dsn := 'host=192.168.1.10 port=5432 dbname=myapp' ); 

Порівняння Galera та BDR

Параметр Galera Cluster PostgreSQL BDR
Тип реплікації Синхронна Асинхронна
Консистентність Строга Підсумкова
Latency запису Висока (залежить від мережі) Низька
Підтримка DDL Блокує кластер Не блокує
Ліцензія GPL PostgreSQL license

Вирішення конфліктів запису

Конфлікти виникають, коли два вузли одночасно змінюють один запис. У проекті з рітейлером ми застосували розбиття за регіонами — кожна таблиця відповідає за свій географічний сегмент. Це виключило перетинання та знизило конфлікти на 95%.

Стратегія Принцип Застосування
Last Write Wins Перемагає останній timestamp Некритичні дані, IoT
Origin wins Перемагає вузол-джерело Регіональні дані
Custom resolver Бізнес-логіка злиття Складні агрегати
Application-level Детерміновані ключі Потребує архітектурного опрацювання

Балансування та моніторинг

Для рівномірного розподілу запитів використовуємо ProxySQL балансування. ProxySQL здатний обробляти до 100 тис. запитів/с. Конфігурація проста:

INSERT INTO mysql_servers(hostgroup_id, hostname, port, weight) VALUES (10, '192.168.1.10', 3306, 1), (10, '192.168.1.11', 3306, 1), (10, '192.168.1.12', 3306, 1); 

Моніторинг ведемо через Prometheus + Grafana. Ключові метрики: wsrep_local_recv_queue_avg (черга застосування транзакцій має бути <1) та wsrep_local_cert_failures (конфлікти сертифікації близькі до нуля).

Обмеження та підводні камені

  • Galera не підтримує MyISAM та MEMORY таблиці.
  • AUTO_INCREMENT потребує innodb_autoinc_lock_mode=2.
  • DDL блокує кластер — застосовуйте pt-online-schema-change.
  • Затримка між вузлами >5 мс знижує продуктивність запису на 30–40%. Для low-latency мереж використовуйте виділені канали.

Комплексне налаштування під ключ

Пропонуємо налаштування під ключ за 3–4 робочі дні. Напишіть нам для консультації — оцінимо ваш проект безкоштовно.

Що входить у роботу:

  • Аналіз навантаження та вибір рішення.
  • Розгортання 3 вузлів Galera Cluster.
  • Налаштування ProxySQL балансування.
  • Моніторинг Prometheus+Grafana.
  • Навантажувальне тестування.
  • Документація та навчання команди.
  • Гарантійна підтримка 1 місяць.

Вартість налаштування тривузлового Galera Cluster — від $1500. Економія на інфраструктурі до 40% за рахунок використання власних серверів.

Додаткову інформацію можна знайти в статті Galera Cluster.