Александр Бутов
21.10.2019
6246

Репликация базы данных mariadb на локальную машину в режиме master-slave

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

Репликация базы данных mariadb в режиме master-slave

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

Может так случиться , что у вас давно стоит сервер телефонии на базе asterisk и он в принципе хорошо работает, но у вас появился какой-нибудь  сторонний сервис который работает с базой данных астериска (например, статистика) который посылает довольно много запросов в базу , или ещё каким-то образом её использует и под такой нагрузкой начинаются проблемы непосредственно с телефонией(заикания, пропажа голоса, шумы, или вообще весь сервер останавливается), при этом сделать апгрейд железа на сервере не представляется возможным.
В таком случае как раз подойдёт метод репликации, который позволит снять часть нагрузки с вашего основного сервера на другой.

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

Так же у вас появится возможность снять дамп с базы не останавливая при этом ваш главный сервер, а остановив только slave.
В данной статье для наглядности так же будет использоваться web- интерфейс phpmyadmin.
Есть сервер с астериском(FreePBXdistro) с адресом 192.168.32.176 , который работает в штатном режиме, а также есть свободная машина с адресом 192.168.32.99 ; на ней мы и развернём вспомогательный сервер, на который будет реплицироваться стандартная база данных астериска : asteriskcdrbd в которой находятся записи о совершенных звонка.
Для этого подготовим нашу машину , в рамках данной статьи будем делать это на CentOS 7 , ставим эту систему на наш сервер и делаем yum update

yum update
yum update

далее установим репозиторий EPEL:

установка репозитория
установка репозитория

далее устанавливаем Mariadb :

установка MariaDB
установка MariaDB

добавляем в автозагрузку:

добавление в автозагрузку
добавление в автозагрузку

Запускаем и задаём пароль:

установка пароля
установка пароля

Устанавливаем PHP и PHP-FPM

установка пароля
установка пароля
установка  PHP и PHP-FPM
установка  PHP и PHP-FPM


Заносим PHP-FPM в автозагрузку и запускаем его:

Добавление в автозагрузку и запуск
Добавление в автозагрузку и запуск

Чтобы php скрипты могли работать с базами данных ставим php-mysql php-mysqli:

установка php-mysql php-mysqli
установка php-mysql php-mysqli

Следующим поставим Apache

установка Apache
установка Apache

И запускаем его

запуск Apache
запуск Apache

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

начальная страница Apache
начальная страница Apache

Далее устанавливаем PHPMyAdmin

установка PHPMyAdmin
установка PHPMyAdmin

Теперь надо дать доступ к нему для удалённой машины, для этого редактируем файл /etc/httpd/conf.d/phpMyAdmin.conf
и добавляем следующие как на скриншоте, с поправкой на то, что добавлять нужно тот айпи адрес, с которого потом будете заходить на веб интерфейс phpmyadmin

/etc/httpd/conf.d/phpMyAdmin.conf
/etc/httpd/conf.d/phpMyAdmin.conf

делаем service httpd restart и в браузере вбиваем ip.адрес.вашего.сервера/phpmyadmin

Видим веб интерфейс:

веб интерфейс
веб интерфейс

Логинимся пользователем и паролем которые задавали для mariadb

И видим перед собой домашнюю страницу phpmyadmin

домашняя страница phpmyadmin
домашняя страница phpmyadmin

На этом начальная конфигурация подничённого сервера завершена, перейдём к настройкам master-server
В файл etc/my.cnf в секцию [mysqld] вносим следующие данные

server-id=1
log_bin=/var/lib/mysql/mysql-bin
log_error=mysql-bin.err
replicate-do-db=asteriskcdrdb
etc/my.cnf
etc/my.cnf

Далее нужно добавить пользователя для репликации баз данных
Обычно в других статьях пишут это делать в таком виде
mysql@master> GRANT replication slave ON «вашабд».* TO «replication»@»192.168.1.1» IDENTIFIED BY «password»;
но так вы получите следующую ошибку

ошибка
ошибка
Почему-то нигде в инструкциях не упоминается, что права на репликацию можно дать только глобально, а не на конкретную базу данных по этому меняем строчку наmysql@master> GRANT replication slave ON *.* TO "replication"@"192.168.1.1" IDENTIFIED BY "password";

Перезагрузим MySQL, чтобы изменения в конфиге вступили в силу
После этого изменения вступают в силу, и если всё сделано правильно, — команда SHOW MASTER STATUS должна показать примерно следующее

Далее настраиваем подчинённый сервер
Точно так же в файле /etc/my.cnf
в секцию [mysqld] добавляем следующие данные

server-id=2
relay-log = /var/lib/mysql/mysql-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = asteriskcdrdb
/etc/my.cnf
/etc/my.cnf

Далее нужно перенести данные, для этого воспользуемся установкой параметра read_only на мастере

командная строка
командная строка

после этого смотрим командой «show master status» данные и запоминаем их.

show master status
show master status

Далее делаем бэкап интересующей нас базы данных

mysqldump -u user -ppassword asteriskcdrbd > /путь/до/файла дампа/dump.sql
 а на slave разворачиваем его 
 mysql -u user -ppassword asteriskcdrbd < /путь/до/файла дампа/dump.sql

И наконец то запускаем саму репликацию баз данных .

CHANGE MASTER TO MASTER_HOST = "192.168.1.176 ", MASTER_USER = "replication ", MASTER_PASSWORD = "123456 ", MASTER_LOG_FILE = "mysql-bin.000010 ", MASTER_LOG_POS = 1635;
 затем start slave;

Если всё сделано правильно то в веб интерфейсе phpmyadmin увидим следующее:
на мастере :

масте
масте

на слейве :

слейв
слейв

Наглядности создадим новую таблицу на мастере и посмотрим, появится ли она на подчинённом сервере

демонстрация репликации
демонстрация репликации

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

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

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

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

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

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

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

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.