Репликация Master Master

Репликация Master MasterИ так для себя хочу разобрать как сделать/настраивается связь двух серверов и баз MySQL в режиме: мастер <=> мастер

для этого мне понадобится две системы с осью на борту Ubuntu 14.04.3 Server amd64, где каждую систему нужно обновить до самого актуального состояния и установить пакеты: mysql-server & mysql-client:

aollo@system:~> ssh -l ekzorchik 10.7.8.143

ekzorchik@srv-glpi:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-glpi:~$ sudo apt-get install mysql-server mysql-client -y

New password for the MySQL “root” user:712mbddr@

Repeat password for the MySQL “root” user: 712mbddr@

aollo@system:~> ssh -l ekzorchik 10.7.8.155

ekzorchik@srv-server:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-server:~$ sudo apt-get install mysql-server mysql-client -y

New password for the MySQL “root” user: 712mbddr@

Repeat password for the MySQL “root” user: 712mbddr@

После на каждом сервере где развернута база данных MySQL добавим/изменим конфигурационный файл /etc/mysql/my.cnf

ekzorchik@srv-glpi:~$ sudo nano /etc/mysql/my.cnf

# уникальный ID сервера, участвующий в рассматриваемой заметки по части Master <=> Master

server-id = 1

# путь к файлу журнала и индекса репликации для зеркала

log_bin = /var/log/mysql/mysql-bin.log

log_bin_index = /var/log/mysql/mysql-bin.log.index

# путь к файлам журнала изменений, полученных с зеркала

relay_log = /var/log/mysql/mysql-relay-bin

relay_log_index = /var/log/mysql/mysql-relay-bin.index

expire_logs_days = 10

max_binlog_size = 100M

# чтобы не было конфликтов автоинкремента, говорим серверу,
# чтобы айдишники он генерил начиная с 1го прибавляя по 2,
# например 1, 3, 5, 7… Зеркало будет генерить 2, 4, 6, 8…

auto-increment-increment = 2

auto-increment-offset = 1

# указываем базу данных содержимое которой будет реплицировать с одного сервера на другой.

binlog_do_db = owncloud

bind-address = 10.7.8.143

ekzorchik@srv-glpi:~$ sudo service mysql restart

[sudo] password for ekzorchik:

mysql stop/waiting

mysql start/running, process 5058

ekzorchik@srv-server:~$ sudo nano /etc/mysql/my.cnf

# уникальный ID сервера, участвующий в рассматриваемой заметки по части Master <=> Master

server-id = 2

# путь к файлу журнала и индекса репликации для зеркала

log_bin = /var/log/mysql/mysql-bin.log

log_bin_index = /var/log/mysql/mysql-bin.log.index

# путь к файлам журнала изменений, полученных с зеркала

relay_log = /var/log/mysql/mysql-relay-bin

relay_log_index = /var/log/mysql/mysql-relay-bin.index

expire_logs_days = 10

max_binlog_size = 100M

# чтобы не было конфликтов автоинкремента, говорим серверу,
# чтобы айдишники он генерил начиная с 1го прибавляя по 2,
# например 1, 3, 5, 7… Зеркало будет генерить 2, 4, 6, 8…

auto-increment-increment = 2

auto-increment-offset = 1

# указываем базу данных содержимое которой будет реплицировать с одного сервера на другой.

binlog_do_db = owncloud

bind-address = 10.7.8.155

ekzorchik@srv-server:~$ sudo service mysql restart

mysql stop/waiting

mysql start/running, process 4931

После на каждой ноде сервера создадим специального пользователя в базе mysql ответственного за репликацию:

ekzorchik@srv-glpi:~$ mysql -u root -p712mbddr@

mysql> create user 'replicator'@'%' identified by '612mbddr@';

mysql> grant replication slave on *.* to 'replicator'@'%';

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

# создаем базу данных owncloud

mysql> create database owncloud;

Query OK, 1 row affected (0.00 sec)

mysql> exit

Bye

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@;

mysql> create user 'replicator'@'%' identified by '612mbddr@';

mysql> grant replication slave on *.* to 'replicator'@'%';

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

# создаем базу данных owncloud

mysql> create database owncloud;

Query OK, 1 row affected (0.00 sec)

mysql> exit

Bye

После с каждого сервера проверяем, что можем под созданным пользователем replication подключиться:

ekzorchik@srv-server:~$ mysql -ureplication -p612mbddr@ -h 10.7.8.143 -P 3306

успешно

ekzorchik@srv-glpi:~$ mysql -ureplication -p612mbddr@ -h 10.7.8.155 -P 3306

успешно

Теперь на сервере srv-glpi создаем запрос – а кто сейчас в статусе master:

ekzorchik@srv-glpi:~$ mysql -u root -p712mbddr@

mysql> show master status;

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000004 | 354 | owncloud | |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

mysql> quit

Bye

Отлично, теперь повторяем все тоже самое на сервере srv-server:

ekzorchik@srv-server:~$ mysql -u root -p712mbddr@

mysql> show master status;

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000004 | 354 | owncloud | |

+——————+———-+————–+——————+

1 row in set (0.00 sec)

Теперь из этих двух выводов статуса Мастер мне понадобятся следующие значения, а именно наименование файла и позиция (все эти значения должны быть одинаковыми):

File = mysql-bin.000004

Position = 354

Binlog_Do_DB = owncloud

Результат идентичный, все хорошо.

После включаю репликацию на втором сервере (server-id = 2) , для этого мне понадобятся такие данные как информация о позиции и название лог файла:

mysql> slave stop;

Query OK, 0 rows affected (0.02 sec)

mysql> change master to master_host = '10.7.8.143', master_user ='replicator',master_password='612mbddr@',master_log_file='mysql-bin.000004',master_log_pos =354;

Query OK, 0 rows affected (0.03 sec)

mysql> slave start;

также точно такие же действия нужно выполнить на первом сервере (server-id = 1) только указать IP адрес второго сервера:

mysql> slave stop;

Query OK, 0 rows affected (0.02 sec)

mysql> change master to master_host = '10.7.8.155', master_user ='replicator',master_password='612mbddr@',master_log_file='mysql-bin.000004',master_log_pos =354;

Query OK, 0 rows affected (0.02 sec)

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

Теперь как все настроили, нужно проверить – без проверки никуда, для это имеет смысл создать внутри базы данных owncloud какие-либо таблицы, вообщем наполнить содержимым и посмотреть, отобразилось ли содержимое на другом сервере:

# server-id = 1

mysql> use owncloud;

Database changed

mysql> CREATE TABLE authors (id INT, name VARCHAR(20), email VARCHAR(20));

Query OK, 0 rows affected (0.01 sec)

Смотрим, что на втором сервере (server-id = 2):

mysql> show tables;

+——————–+

| Tables_in_owncloud |

+——————–+

| authors |

+——————–+

1 row in set (0.00 sec)

Отлично работает. У меня получилось разобрать в рамках этой заметки, как же все таки сделать много раз виденную и используемую репликацию Master <=> Master. Подытожу: чтобы настроить данную репликацю нужно знать уникальный идентификатор (position) и именование файла. Данная заметка писалась в ходе моего опыта по повышению квалификации, ею я не претендую на полное развертывание материала репликации – я учусь, и все что я буду для себя узнавать буду публиковать на своем блоге. На этом все, с уважением, автор блога – ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru