Ответ
В 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', ...;
Основные проблемы и нюансы:
- Разрешение конфликтов: Главная сложность. Что делать, если одна и та же строка изменена одновременно на обоих мастерах?
- Согласованность данных: Возможны временные расхождения данных между мастерами.
- Сложность в масштабировании: Добавление третьего и более мастеров значительно усложняет топологию и управление.