Настройка репликации Master-Master для базы данных веб-приложения

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

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка репликации Master-Master для базы данных веб-приложения
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка репликации 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
  • Latency между узлами напрямую влияет на производительность записи в Galera

Срок выполнения

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