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

У 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 завершено!