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

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування реплікації Master-Master для бази даних веб-застосунку
Складна
~3-5 робочих днів
Часті питання

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

Етапи розробки

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

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

Налаштування репліцирування Master-Master для баз даних веб-програм

Репліцирування Master-Master (Multi-Primary) — схема, при якій запис можливий на кількох вузлах одночасно. Складніша ніж Master-Slave, вирішує завдання географічно розподілених записів та high availability з негайним failover.

Коли обґрунтована Master-Master

Більшість веб-програм нормально працюють на Master-Slave. Master-Master потрібна, коли:

  • Програми в різних регіонах повинні писати в локальну БД з подальшою синхронізацією
  • Потрібне нульове время переключення при сбої одного мастера
  • Запис не можна направити через єдину точку без неприйнятних затримок

MySQL: Galera Cluster

Galera — синхронна multi-primary репліцирування для MySQL/MariaDB. Усі вузли приймають запис, транзакції застосовуються на всіх вузлах до commit.

# /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"

Ініціалізація кластера на першому вузлі:

galera_new_cluster
# На інших вузлах — звичайний запуск
systemctl start mysql

Перевірка статусу:

SHOW STATUS LIKE 'wsrep_%';
-- wsrep_cluster_size повинен показати кількість вузлів
-- wsrep_ready повинен бути ON

PostgreSQL: BDR (Bi-Directional Replication)

BDR — розширення від pgEdge, підтримує async multi-master для PostgreSQL:

-- Підключення розширення
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'
);

Альтернатива — Patroni + Postgres у режимі синхронної репліцирування. Це не істинний multi-master, але забезпечує автоматичний failover з промоцією реплік у мастер за секунди.

Розв'язання конфліктів запису

Головна складність Master-Master — конфлікти, коли два вузли одночасно змінили один запис.

Стратегії разрешення:

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

Для більшості випадків краще запобігати конфліктам: кожен регіон пише свої дані (різні таблиці або row-level partitioning за region_id).

Nginx/HAProxy для балансування запису

upstream mysql_masters {
    server 192.168.1.10:3306 weight=1;
    server 192.168.1.11:3306 weight=1;
}

Для Galera: усі три вузли приймають запис, ProxySQL справляється з розподілом:

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);

Моніторинг Galera

-- Черга застосування вхідних транзакцій (повинна бути мала)
SHOW STATUS LIKE 'wsrep_local_recv_queue_avg';

-- Конфлікти сертифікації (повинні бути близьки до нуля)
SHOW STATUS LIKE 'wsrep_local_cert_failures';

-- Статус вузлів
SHOW STATUS LIKE 'wsrep_cluster_size';

Обмеження

  • Galera не підтримує MyISAM та MEMORY таблиці
  • AUTO_INCREMENT вимагає innodb_autoinc_lock_mode=2 + wsrep_auto_increment_control=ON
  • DDL-операції (ALTER TABLE) блокують кластер — використовуйте pt-online-schema-change або gh-ost
  • Затримка між вузлами безпосередньо впливає на продуктивність запису в Galera

Тривалість

Налаштування Galera Cluster на трьох вузлах з ProxySQL — 3–4 робочих дні. Включаючи нагрузочне тестування та настройку моніторинга.