Master-Master репликация в MySQL используется для распределения нагрузки на базу данных между несколькими серверами.
Хотя Master-Slave репликация намного популярнее и проще, Master-Master репликация может быть полезной.
Настройка Master-Master репликации — это настройка обычной Master-Slave репликации, только в обе стороны (каждый сервер является и Master и Slave одновременно). Мы будем использовать два сервера с адресами:
Master сервер 1, 10.10.0.1
Master сервер 2, 10.10.0.2
Шаг 1. Настройка Master-1
На Master-1 необходимо внести такие изменения в конфигурацию my.cnf
:
(ID сервера выбираем произвольно начиная с 1)
server-id = 1 |
Перезапускаем MySQL:
/etc/init.d/mysql restart |
Шаг 2. Пользователь для репликации
Теперь необходимо создать пользователя, из-под которого будет происходить репликация:
(Создаем пользователя replicator
с паролем password
)
create user 'replicator'@'%' identified by 'password'; |
Шаг 3. Статус репликации
Проверим статус репликации:
show master status; |
Далее мы будем использовать некоторые из этих данных:
+------------------+----------+--------------+------------------+ |
Шаг 4. Настройка Master-2
На Master-2 необходимо внести такие изменения в конфигурацию my.cnf
:
(ID сервера выбираем следующим за первым и указываем нужный IP-адрес)
server-id = 2 |
Перезапускаем MySQL:
/etc/init.d/mysql restart |
Шаг 5. Создание базы и пользователя
На Master-2 необходимо создать такого же пользователя и базу данных, как и Master-1:
create user 'replicator'@'%' identified by 'password'; |
Шаг 6. Включение репликации на Master-2
Теперь на Master-2 нам необходимо запустить репликацию с Master-1. Для этого мы используем информацию о позиции и названии лога, которую запомнили на Шаге 3:
slave stop; |
Шаг 7. Включение репликации на Master-1
Теперь необходимо выполнить то же самое для Master-1. На Master-2 запомним статус:
SHOW MASTER STATUS; |
+------------------+----------+--------------+------------------+ |
После этого на Master-1 запустим репликацию:
slave stop; |
Тестирование
Для проверки репликации достаточно создать таблицу на любом из серверов и убедиться, что она стала доступна на втором.