Просьба оставить комментарий





Если вам понравился или не понравился топик. Я что то забыл или не дописал, то вы можете оставить свой комментарий и я постараюсь исправить это в ближайшее время.

среда, 15 февраля 2012 г.

Репликация баз данных MySQL по типу Master-Slave Часть 1: Введение

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

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

Применяется подобные фишки в случаях:
1. Когда нужно снизить нагрузку на главный сервер баз данных распределяя запросы.
2. Сделать резервную копию основной базы и регулярно ее обновлять.
3. В случае падения одного сервера переключиться на другой.
4. Без каких либо проблем останавливать Slave и делать резервную копию всей базы, не останавливая Master.
5. Добавить страшное слово в резюме.

Схем построения репликаций есть огромное количество, но выделяются Master-Slave и Master-Master как основополагающие.

Я опишу принцип репликации типа Master-Slave так как он самый простой.

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

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

Репликация MySQL состоит из следующих шагов:

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

2. Необходимо переназначить адрес на котором будет висеть база данных. При обычной установке по умолчанию MySQL висит на порту 3306 адреса localhost(127.0.0.1). Для того чтобы mysql висел не только на localhost, но и на внешнем ip нужно в файле my.cnf закомментировать строчку bind-address = 127.0.0.1.
Для большей безопасности можно переназначить порт на другой или настроить iptables таким образом, чтобы он блокировал доступ по этому порту со всех адресов кроме адресов этих 2х серверов.

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

4. Нужно сделать полный дамп баз данных сервера mysql, где будет располагаться master. Сделать это можно 2мя способами:
     а. Остановить сервер(что является не всегда правильным, так как посещаемость ресурсам может быть круглосуточной, а дамп базы довольно большой)
     б. Остановить запись в базу данных. Перевод в режим "Только чтение" позволит выгрузить дамп без проблем и ошибок.

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

5. Произвести восстановление дампа на Slave'е и установить отношение с Master'ом. После этого если на этих серверах использовались разные пароли для root, то после восстановления они оба буду одинаковыми, такими как на master.

6. Проверить состояние отношений.

Комментариев нет:

Отправка комментария