Налаштування реплікації Master-Master на MySQL

1-му

У mysql існує два типи реплікації даних:

При використанні реплікації Master-Slave, на Master ноді дані надходять (з ними можна виконувати будь-які операції (додавати/видаляти/змінювати) і всі зміни Slave нода буде забирати собі, але якщо на Slave ноді ви виконаєте будь-який із запитів (видалення, додавання або зміна), то дані не потраплять на Master.

При реплікації у вигляді Master-Master дані, що потрапили на ноди, синхронізуватимуться між собою.

Є:

  • (Майстер 1) - Сервер з ОС Debian 8 - 192.168.13.147
  • (Майстер 2) - Сервер з ОС CentOS 7 -192.168.13.151

Взяв спеціально 2 сервери з різними ОС для того, щоб показати, що воно може працювати коректно (можна використовувати не обмежену кількість нод, хоч 100 шт).

Цей процес налаштування master-master реплікації поділений на 2 кроки:

  • На 1-му кроці організую master-slave реплікацію, де головним буде master_1, а підлеглим буде master_2;
  • На другому етапі я організую зворотну master-slave реплікацію, і сервери починають збирати інформацію з логів один одного.

Установка MYSQL у Unix/Linux

Налаштування реплікації Master-Master на MySQL

І так, mysql встановлений на всіх серверах (у мене їх 2, але можна підключити і більше) і наступним кроком потрібно відредагувати файл my.cnf на кожній з нод.

На 1-му сервері з ОС Debian 8 (192.168.13.147):

Створюємо користувача для реплікації:

PS: Для більш крутої безпеки, можна вказати конкретно IP:

Перезапускаємо MySQL сервер:

Власне перший MASTER готовий!

Дивимося статус майстра (дана інформація знадобиться трохи пізніше):

На 2-му сервері з ОС CentOS 7-192.168.13.151:

Створюємо папку та файли (в них будуть писатися логи):

Створюємо користувача для реплікації:

PS: Для більш крутої безпеки, можна вказати конкретно IP:

Перезапускаємо MySQL сервер:

Налаштування реплікації

Нині потрібно налаштувати саму реплікацію. Для початку запускаємо реплікацію на 2-му майстрі, але щоб зробити це, необхідно дізнатися «MASTER_LOG_FILE» і «MASTER_LOG_POS» на 1-му майстрі.

Дивимося статус майстра (я виводив його вище) на 1-й ноді:

Бачимо, що MASTER_LOG_FILE = mysql-bin.000002, а MASTER_LOG_POS = 107.

На 2-й ноді виконуємо:

Думаю, що не варто пояснювати, що і де потрібно замінити — це інтуїтивно зрозуміло.

Робимо реплікацію на 1-му сервері, але для цього дивимося майстер статус на 2-му:

Бачимо, що MASTER_LOG_FILE = mysql-bin.000002, а MASTER_LOG_POS = 106.

І на 1-му виконуємо команду:

Після чого можна подивитися статус слейва на всіх майстрах.

Якщо необхідно зібрати кластер більш ніж 2 майстри, необхідно з'єднувати їх поступово і по ланцюжку. А зараз перейдемо до тестування створеного кластера.

Тестування реплікації master-master у mysql

Потестуємо реплікацію і переконаємось, що все добре працює.

На 1-му майстрі я створимо базу даних та таблицю:

На майстрі 2 дивлюся що вийшло:

Видно, що реплікація працює і всі дані реплікувало на 2-й майстер з 1-го. Переходимо тестувати майстер 2, для цього я створюю на ньому ж БД і таблицю:

І на 1-му виконую команду:

Бачимо, що все працює належним чином і налаштування реплікації Master-Master на MySQL завершено!