Для чего нужна репликация Master-Master Print

  • репликация, мастер, мастер-мастер, master-master, master
  • 0

Репликация типа Мастер-Мастер для баз данных увеличивает скорость доступа к данным и повышает избыточность для действующих сайтов. Использование репликации хотя бы двух серверов MySQL которые будут работать как кластер очень полезно для сайтов с требованиями high-availability.

Как настроить репликацию базы данных типа Master-Master

Для того чтобы настроить репликацию типа Master-Slave необходимо выполнить следующие шаги:

Конфигурация первого сервера Master

Отредактировать конфигурационный файл /etc/mysql/my.cnf внеся в него следующие изменения: 

  • В строку bind-address указать адрес Master сервера;

  • Убедиться что раскомментирована строка server-id
    можно использовать любое уникальное значение, но проще всего оставить 1

  • Раскомментировать строку log_bin указав файл из которого Slave будет копировать все изменения репликации

  • Наконец, раскомментировать строку binlog_do_db и указать имя БД что будет реплицироваться, в случае если будет производиться репликация нескольких БД то необходимо указать несколько соответствующих строк.

После чего можно сохранить изменения и закрыть конфигурационный файл.

При одновременном добавлении новых строк, содержащих автоинкрементные поля, на разные мастер-сервера может возникнуть конфликт. Чтобы такого не происходило, необходимо изменить шаг последовательности автоинкрементов на серверах БД:

auto_increment_increment - определяет шаг изменения AUTO_INCREMENT.

auto_increment_offset  - определяет начальное значение инкремента

Далее проводится работа из командной строки MySQL

Выполняем вход в root нашего MySQL сервера:

mysql -u root -p

Создаём пользователя который будет использоваться для репликации БД:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; 

Далее назначаем привилегии Slave пользователю который будет использоваться для репликации БД:

GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';

После чего применяем изменения привилегий:
FLUSH PRIVILEGES;

Далее переключаемся на нужную БД:

USE DATABASE;

Проверяем:
SHOW MASTER STATUS;

Получаем примерно такой вывод:

Эти значения являются позицией где БД второго Master-сервера начнёт реплицироваться. Необходимо записать значения File и Position так как они нам понадобятся в дальнейшем.

На этом настройка первого Master-сервера завершена.

Конфигурация второго сервера Master

Для настройки второго Master-сервера необходимо провести те же самые действия что и на первом Master-сервере вплоть до команды use database; включительно, только лишь применив иное значение server-id в конфигурационном файле  /etc/mysql/my.cnf 

После выполненных действий необходимо ввести следующие команды: 

CHANGE MASTER TO MASTER_HOST = 'address of master1', MASTER_USER = 'replication_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107; 

SLAVE START;

Значения MASTER_LOG_FILE и MASTER_LOG_POS должны совпадать со значениями что были выписаны при настройке первого Master-сервера.

После этого также выполняем команду: 

SHOW MASTER STATUS;

Получаем примерно такой вывод: 

Эти значения являются позицией где БД первого Master-сервера начнёт реплицироваться. Необходимо записать значения File и Position так как они нам понадобятся в дальнейшем.

Окончательная настройка репликации типа Master-Master

Возвращаемся на первый сервер Master и выполняем там команды:

CHANGE MASTER TO MASTER_HOST = 'address of master1', MASTER_USER = 'replication_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;

SLAVE START; 

Значения MASTER_LOG_FILE и MASTER_LOG_POS должны совпадать со значениями что были выписаны при настройке второго Master-сервера. 

Проверка репликации типа Master-Master

Для проверки репликации будет создана БД и таблица на первом Master-сервере, после успешной проверки и синхронизации эта таблица будет удалена на втором Master-сервере.

Вначале создаём соответствующие данные на первом Master-сервере:

Создаём тестовую БД:

CREATE DATABASE example;

Создаём таблицу в этой БД:

CREATE TABLE example.dummy (`id` varchar(10));

Далее переходим на второй Master-сервер и смотрим таблицы содержащиеся в БД:

SHOW TABLES IN example;

После чего должны увидеть примерно такой вывод: 

Далее удаляем эту таблицу:
DROP TABLE dummy; 

Далее переходим на первый Master-сервер и смотрим таблицы содержащиеся в БД:

SHOW TABLES IN example;

Если получаем в ответ:
Empty set (0.00 sec)

То это говорит о том, что таблица из соответствующей БД была удалена и репликация базы данных типа Master-Master настроена корректно.

 


Was this answer helpful?

« Back