Что такое репликация Master-Master и сколько узлов обычно в ней участвует?

Ответ

В Master-Master репликации (также известной как двунаправленная репликация) обычно участвуют два сервера (мастера). Ключевая особенность этой архитектуры в том, что оба сервера могут принимать запросы на запись и реплицировать свои изменения друг на друга.

Это повышает доступность системы: если один мастер выходит из строя, второй может продолжать обрабатывать все запросы.

Пример базовой настройки в MySQL:

Для предотвращения конфликтов первичных ключей (primary key) часто используют настройки auto_increment_increment и auto_increment_offset.

-- На первом сервере (Master 1)
-- Генерировать ID: 1, 3, 5, ...
SET GLOBAL auto_increment_increment=2;
SET GLOBAL auto_increment_offset=1;
CHANGE MASTER TO MASTER_HOST='master2_ip', ...;

-- На втором сервере (Master 2)
-- Генерировать ID: 2, 4, 6, ...
SET GLOBAL auto_increment_increment=2;
SET GLOBAL auto_increment_offset=2;
CHANGE MASTER TO MASTER_HOST='master1_ip', ...;

Основные проблемы и нюансы:

  • Разрешение конфликтов: Главная сложность. Что делать, если одна и та же строка изменена одновременно на обоих мастерах?
  • Согласованность данных: Возможны временные расхождения данных между мастерами.
  • Сложность в масштабировании: Добавление третьего и более мастеров значительно усложняет топологию и управление.