Меню

Как настроить master and slave

Как настроить репликацию MySQL (MariaDB) Master-Slave в Debian 10

How to Configure MySQL (MariaDB) Master-Slave Replication on Debian 10

В этом руководстве мы покажем вам, как настроить репликацию MariaDB Master / Slave с одним главным и одним подчиненным серверами в Debian 10. MariaDB — это реализация MySQL по умолчанию в Debian. Те же шаги применимы и для Oracle MySQL.

MySQL поддерживает несколько топологий репликации, причем топология «ведущий / ведомый» является одной из наиболее известных топологий, в которой один сервер базы данных действует как ведущий, а один или несколько серверов действуют как ведомые. По умолчанию репликация является асинхронной, когда ведущее устройство отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые устройства запрашивают события, когда они готовы.

Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения для масштабирования чтения, резервного копирования баз данных в реальном времени для аварийного восстановления и для задач аналитики.

Прежде чем продолжить

Мы предполагаем, что у вас есть два сервера под управлением Debian 10, которые обмениваются данными друг с другом по частной сети. Если ваш хостинг-провайдер не поддерживает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр, чтобы разрешить трафик на порт 3306 только из надежных источников.

Серверы, используемые в этом примере, имеют следующие IP-адреса:

Установка MariaDB

Репозитории Debian 10 по умолчанию включают MariaDB версии 10.3. Лучше всего установить одну и ту же версию MariaDB на оба сервера, чтобы избежать любых потенциальных проблем.

Установите MariaDB как на ведущем, так и на ведомом устройстве, выполнив следующие команды:

Настройка главного сервера

Первый шаг — настроить главный сервер. Мы внесем следующие изменения:

  • Настройте сервер MariaDB для прослушивания частного IP-адреса .
  • Установите уникальный идентификатор сервера.
  • Включите двоичное ведение журнала.

Откройте файл конфигурации MariaDB и раскомментируйте или установите следующие строки:

После этого сохраните файл и перезапустите службу MySQL, чтобы изменения вступили в силу:

Следующим шагом будет создание нового пользователя репликации. Войдите на сервер MariaDB как пользователь root:

Выполните следующие запросы SQL, чтобы создать пользователя с именем replica и предоставить ему REPLICATION SLAVE привилегию:

Находясь в командной строке MySQL, выполните следующую команду, которая распечатает двоичное имя файла и позицию.

Обратите внимание на имя файла mysql-bin.000001 и позицию 328 . Эти значения необходимы при настройке подчиненного сервера и, вероятно, будут другими на вашем сервере.

Настройка подчиненного сервера

Мы внесем те же изменения на подчиненном сервере, что и на главном:

  • Настройте сервер MySQL на прослушивание частного IP-адреса.
  • Установите уникальный идентификатор сервера.
  • Включите двоичное ведение журнала.

Откройте файл конфигурации MariaDB и отредактируйте следующие строки:

Перезапустите службу MariaDB:

Следующим шагом является настройка параметров, которые подчиненный сервер будет использовать для подключения к главному серверу. Войдите в оболочку MariaDB:

Начните с остановки подчиненных потоков:

Выполните следующий запрос, чтобы настроить репликацию Master / Slave:

Убедитесь, что вы используете правильный IP-адрес, имя пользователя и пароль. Имя и позиция файла журнала должны совпадать со значениями, полученными от главного сервера.

После этого запустите подчиненные потоки.

Проверить конфигурацию

На этом этапе у вас должна быть рабочая настройка репликации Master / Slave.

Чтобы убедиться, что все настроено правильно, создайте новую базу данных на главном сервере:

Войдите в подчиненную оболочку MySQL:

Выполните следующую команду, чтобы вывести список всех баз данных :

Вы заметите, что база данных, созданная на главном сервере, реплицируется на подчиненный:

Заключение

В этом руководстве мы показали, что вы создаете репликацию MariaDB Master / Slave в Debian 10.

Источник

Как настроить MySQL Master-Slave репликацию?

MySQL репликация типа Master-Slave часто используется для обеспечения отказоустойчивости приложений. Кроме этого, она позволяет распределить нагрузку на базу данных между несколькими серверами (репликами). Читайте подробнее о применении репликации.

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

Шаг 1. Настройка Мастера

На сервере, который будет выступать мастером, необходимо внести правки в my.cnf:

Шаг 2. Права на репликацию

Далее необходимо создать профиль пользователя, из под которого будет происходить репликация. Для этого запускаем консоль:

Читайте также:  Opera как настроить боковую панель

Далее создаем и назначаем права пользователю для реплики:

даем права пользователю slave_user с паролем password

Далее блокируем все таблицы в нашей базе данных:

Мы увидим что-то похожее на:

Выделенные значения мы будем использовать для запуска Слейва

Шаг 3. Дамп базы

Теперь необходимо сделать дамп базы данных:

mysqldump -u root -p newdatabase > newdatabase.sql

Разблокируем таблицы в консоли mysql:
UNLOCK TABLES;

Шаг 4. Создание базы на слейве

В консоли mysql на Слейве создаем базу с таким же именем, как и на Мастере:
CREATE DATABASE newdatabase;

После этого загружаем дамп (из bash):

Шаг 5. Настройка Слейва

В настройках my.cnf на Слейве необходимо указать такие параметры:

Шаг 6. Запуск Слейва

Нам осталось включить репликацию, для этого необходимо указать параметры подключения к мастеру. В консоли mysql на Слейве необходимо выполнить запрос:

Проверить работу репликации на Слейве можно запросом:

Читайте также как настроить Master-Master репликацию на MySQL.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник



Настройка репликации Master-Slave в MySQL

Базы данных › Настройка репликации Master-Slave в MySQL

  • В этой теме 0 ответов, 1 участник, последнее обновление 2 года, 3 месяца назад сделано Васильев Владимир Сергеевич.

Термин репликация используется для обозначения механизма синхронизации нескольких копий данных, что повышает сохранность информации, отказоустойчивость и производительность системы. Ярким примером служит репликация базы данных между двумя серверами.

Master-Slave репликация MySQL

В терминологии Master-Slave мастером является первичный сервер с базой данных, на нем производится запись в базу, но чтение распределяется между мастером и слейвом в зависимости от нагрузки на систему, что повышает отказоустойчивость и производительность. Кроме того, благодаря такому подходу, копия базы данных всегда под рукой и ее можно восстановить в случае отказа одного из серверов.

В каких ситуациях может понадобится slave-сервер? Например, когда поступает большой массив данных для записи в базу и master-сервер просто не успевает выполнять чтение и клиенту приходится ждать окончания записи, чего можно избежать благодаря slave-серверу.

Возможны ситуации, когда мастер-сервер выходит из строя, в этом случае слейв-сервер подхватывает все функции мастера и работает в одиночку до его восстановления. Клиент скорее всего ничего не заметит, и уж точно не будет час-два-три ждать пока починят мастера.

Репликацию настроить совсем не сложно, благо механизм заложен в MySQL с самого начала.

Настройка на Master сервере

Начнем с редактирования файла конфигурации my.cnf , который чаще всего расположен по адресу /etc/mysql/my.cnf . Необходимо найти и раскомментировать(убрать #), либо прописать такие строки.

Важно! Если bind-address уже был прописан, его нужно поменять, иначе не получится установить подключение между серверами.

Сразу после этого рестартуем базу данных на сервере.

Теперь необходимо создать пользователя с правами на репликацию нашей базы данных, сделать это можно из-под рута в консоли MySQL с помощью команды

Где вместо «slave_user» и «slave_password» нужно написать логин и пароль для слейва.

Теперь посмотрим данные о мастере

SHOW MASTER STATUS;

Значения столбцов File и Position нужно запомнить, они будут использованы в настройке слейва, к чему мы сейчас и переходим.

Настройка на Slave сервере

Первым делом необходимо создать базу данных с таким же именем, как у той, которую мы собираемся реплицировать. Это важный шаг, нельзя им пренебрегать. Далее переходим в уже знакомый нам файл конфигурации my.cnf и пишем настройки.

Важно! В bin-log прописывается путь к бин-логу на местер сервере. Идентификатор сервера должен отличаться от айди мастера, удобно ставить его на 1 больше.

Далее необходимо настроить подключение к мастеру и включить slave-режим.

Где host — ip адрес мастер, логин и пароль соответствуют тем, что мы создали на мастере, master_log_file и master_log_pos заполняются информацией из последнего пункта настройки мастер-сервера.

С этого самого момента все изменения в базе данных будут передаваться с мастера на слейва.

Проверка статуса репликации

Кроме команды SHOW MASTER STATUS; есть аналогичная для слейва SHOW SLAVE STATUS; , которая выведет таблицу с информацией. Главный признак того, что сервера соединились и корректно работают — наличие таких строк

Читайте также:  Как в автокаде настроить панель инструментов слева

Источник

MariaDB: Настройка репликации базы данных в режиме Master-Master/Slave

Репликация в SQL базах данных это процесс копирования данных из одного источника в другой (или на несколько) и в обратнуюм сторону. Данные с одного сервера баз данных, постоянно копируются на один или несколько других серверов. С помощью репликации можно распределять нагрузку на сервера, обеспечивать отказоустойчивость и высокую доступность баз данных MariaDB. СУБД MariaDB/MySQL позволяет использовать два типа репликации БД Master-Master и Master-Slave. В данной статье мы рассмотрим, как настроить оба типа репликации MariaDB в CentOS 7. Начнем!

Установка MariaDB.

Ранее мы размещали статью с описанием процесса установки MariaDB на CentOS 7. Ознакомиться с ней вы можете по ссылке https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Поэтому, заострять внимание на самой установке MariaDB мы не будем, а сразу перейдем к настройке репликации.

Настройка репликации Master-Master в MariaDB

В схеме репликации Master-Master любой из серверов баз данных MariaDB/MySQL, может использоваться как для записи информации, так и для чтения. Многие считают данный тип репликации не совсем привлекательным. Если из строя выйдет один из серверов, с большей вероятностью потери данных будут и на других Master-серверах. Обычно данная схема используется, когда на всех серверах нужно обеспечить и запись, и чтение информации.

Репликация основана на специально файле binlog, в который Master сервер сохраняет все операции с БД. Slave сервер подключается к мастеру и применяет команды к своим базам.

1. MariaDB: Настройка первого мастер сервера (Master-1)

Добавляем в наш конфигурационный файл my.cnf на первом сервере MariaDB следующие строки:

#replication
server-id = 1
report_host = master
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

service mariadb restart

Создадим пользователя для настройки репликации:

mysql
create user ‘test_master’@’%’ identified by ‘test_master’;
grant replication slave on *.* to ‘test_master’@’%’;

Для добавления Slave нам понадобятся данные bin_log с сервера Master1.

MariaDB [(none)]> show master status;

Это будет наш Master-1.

2. MariaDB: Настройка второго мастер сервера (Master-2)

Подключимся ко второму MariaDB серверу, открываем конфигурационный файл my.cnf и добавляем информацию:

#replication
server-id = 2
report_host = master2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

И так же создаем пользователя на втором сервере:

create user ‘test_master2’@’%’ identified by ‘test_master2’;
grant replication slave on *.* to ‘test_master2’@’%’;
Bin_log на Master-2:

MariaDB [(none)]> show master status;

Приступим к настройке подключения между серверами MariaDB в нашем програмном кластере:

Добавляем Master-1 на второй сервер:

CHANGE MASTER TO MASTER_HOST=’IP_master1′, MASTER_USER=’test_master’, MASTER_PASSWORD=’test_master’, MASTER_LOG_FILE=’mariadb-bin.000002′, MASTER_LOG_POS=664;

Подключаемся на Master-1 и выполним ту же процедуру, только указав уже данные второго нашего сервера:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’183.219.19.36′, MASTER_USER=’test_master2′, MASTER_PASSWORD=’test_master2′, MASTER_LOG_FILE=’mariadb-bin.000001′, MASTER_LOG_POS=667;
START SLAVE;

Проверим статус второго сервера:

show slave status \G

Как видим на скриншотах, коннекты на двух серверах есть, ошибок не наблюдается.

3. Проверка репликации между серверами MariaDB.

Далее, чтобы проверить, что репликация между двумя серверами MariaDB работает в режиме master+master и что она вообще работает, мы создадим новую базу на Master-1 и создадим в ней таблицу.

MariaDB [(none)]> create database master1;

MariaDB [(none)]> use master1;

MariaDB [master1]> CREATE TABLE hello (

-> AuthorID INT NOT NULL AUTO_INCREMENT,

Query OK, 0 rows affected (0.005 sec)

Проверяем, что база автоматически появилась и на втором мастере, и в ней также присутствует наша таблица:

MariaDB [(none)]> show databases;

MariaDB [(none)]> use master1;

MariaDB [master1]> show tables;

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

MariaDB [master1]> CREATE TABLE hello_master1 (

-> AuthorID INT NOT NULL AUTO_INCREMENT,

Таблица hello_master1 передалась на первый сервер:

MariaDB [master1]> show tables;

Как вы видите, новая таблица появилась на Master-1. Репликация работает так, как мы и хотели.

Настройка Master-Slave репликации в MariaDB

В данном варианте репликации один сервер выступает в роли Slave-сервера, на который постоянно передаются данные с Master. Все изменения, которые будут проводится на сервере Slave, передаваться на Master не будут. Это более отказоустойчивый тип репликации баз данных. Чаще всего используется именно такой вариант. В такой конфигурации у вас всегда будет backup-сервер с актуальными данными, а при сбое на Slave-серверах, информация на Master-сервере не будет потеряна. Так же можно распределить нагрузку на БД для вашего проекта, чтобы приложения осуществляли чтение со Slave серверов, а данные записывались только через Master сервер. Таким образом вы сводите к минимуму отклик БД.

Читайте также:  Айфон как настроить раздачу вайфай

При настройке реплики базы данных MariaDB по типу master + slave, мастер сервера (master1) настраивается как описано выше.

Переходим к slave серверу. Добавляем в my.cnf строки:

#replication
server-id = 2
report_host = slave2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Перезапускаем mariadb. На первом сервере берем данные bin_log.

MariaDB [(none)]> show master status;

На slave сервер в консоли консоли mysql выполняем следующее:

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=’IP_master’, MASTER_USER=’test_master’, MASTER_PASSWORD=’test_master’, MASTER_LOG_FILE=’mariadb-bin.000001′, MASTER_LOG_POS=664;

MariaDB [(none)]> START SLAVE;

При этом также нужно создать дамп базы данных и использовать его для инициальной загрузки данных в MariaDВ на slave сервере.

Проверка статуса Slave: SHOW SLAVE STATUS\G;

Создаем БД на Master:

MariaDB [(none)]> create database master_hello;

Проверяем, что база данных создалась и на Slave сервер:

MariaDB [(none)]> show databases;

Создадим БД на Slave и проверим, передались ли данные на наш Master.

Как видите, базу мы создали, и она есть на Slave. Проверяем, появилась ли она на Master. Ее нет. Репликация со slave на master не идет.

То есть репликация MariaDB работает только в одну сторону. Сделаем еще одну проверку, удалив БД master_hello с Slave-сервера:

И проверим, не удалилась ли она на Master-сервере:

Как мы видим, все в порядке и база на месте.

P.S. При настройке реплики, вы можете столкнуться с некоторыми подводными камнями, самый частый из них — это firewall. По умолчанию на Centos 7 установлен брандмауэр firewalld, в котором закрыт порт 3306, который и использует MariaDB. Вы можете либо открыть данный порт через iptables, либо отключить ваш сетевой экран (плохой вариант).

По-умолчанию в конфигурации my.cnf в параметре bind-address указан IP адрес, на котором ожидаются подключения к базе ( bind-address = 127.0.0.1 ). Чтобы разрешить и локальные и внешние подключения, нужно раскомментировать эту строку и добавить правило iptables, разрешающее подключения с IP адреса мастер/слейв сервера порne 3306.

iptables -I INPUT -p tcp -s ip_address_slave_server —dport 3306 -j ACCEPT
iptables -I INPUT -p tcp —dport 3306 -j DROP

При первичной настройке я столкнулся с такой проблемой и она легко выявляется. Если запустить проверку статуса Slave «SHOW SLAVE STATUS\G;», вы увидите ошибку:

Также в заключении хотелось бы сказать, что можно к конфигурации блока #replication в файле my.cnf добавить некоторые параметры. Ниже я приведу примеры и краткое описание параметров, которые мы прописывали, а также приведу примеры других функций, полезных при настройке репликации.

server-id = 1 — указываем ID сервера, обычно начинаем с 1, но можно использовать любую цифру, главное чтобы она не совпадала с другими серверами, которые будут задействованы в репликации.

report_host = master — обычно прописывается хостнейм сервера, можно указать IP-адрес

log_bin = /var/lib/mysql/mariadb-bin — путь до журнала обновлений

log_bin_index = /var/lib/mysql/mariadb-bin.index — позволяет узнать, какой журнал на данный момент активен и какие журналы ранее были использованы.

relay_log_index = /var/lib/mysql/relay-bin.index — сами логи репликации

Какие параметры еще можно использовать? Если вам нужно настроить реплику только для конкретной базы или нескольких, добавляем функцию:

replicate-do-db = имябд — если нужно несколько БД, перечисляем через запятую.

Исключение каких-либо БД из репликации:

Обычно исключаются служебные базы, такие как:

information_schema ,mysql и performance_schema

Время хранения bin_log:

expire_logs_days = 10 — где 10 это количество дней которые будут храниться логи.

Так же, если данные с Master-сервера, записываются в БД не такого же названия, это тоже можно настроить в конфигурационном файле:

На этом все наши настройки закончены. Думаю, с помощью данной статьи вы без проблем сможете настроить репликацию БД MariaDB как в режиме Master + Master, так и Master + Slave.

Источник