Совсем недавно, на Fraudpointer.com , достигнув базы данных в 25 Гб после всего лишь шести месяцев работы, мы решили начать использовать репликацию для нашего постоянного постоянного хранилища.
Почему вы хотите это сделать
Репликация MySQL может быть решением различных проблем, которые вы можете решить:
- Горизонтальные решения
- Безопасность данных
- аналитика
- Распределение данных на большие расстояния
- Резервное копирование взято с рабов, а не с мастера
Документация по репликации MySQL, которую можно найти здесь , является достаточно пояснительной и дает более подробные сведения об этих применениях.
Где мы были?
До реализации репликации у нас была такая конфигурация:
У нас была машина сжатия Debian (имя: Платон) с MySQL 5.1. установлен и обслуживает весь трафик Fraudpointer. Когда мы решили реализовать репликацию, это было уже 25Gb. В минуту происходило много транзакций, и мы столкнулись с двумя основными проблемами.
1) Мы хотели делать ежедневные резервные копии, а резервное копирование создавало большую нагрузку на машину. Хотя утилита резервного копирования, которую мы использовали ( Percona xtrabackup ), не блокировала базу данных, во время резервного копирования машина перестала отвечать на запросы .
2) Мы хотели запускать сложные запросы и получать отчеты очень часто. Просто это было хорошей причиной, чтобы начать обсуждение репликации.
Где мы после репликации?
После репликации MySQL мы видим следующую картину:
Теперь у нас есть две машины с установленным MySQL. Старый, Платон, теперь действует как Мастер, а новый, Арес, теперь действует как Раб схемы репликации. В нашей настройке преимущества этой конфигурации следующие:
1) Мы можем получить ежедневные резервные копии от ведомого. Нет нагрузки на серийный мастер для этой задачи.
2) Мы можем получить наши отчеты от подчиненного узла.
3) Если подчиненный узел не работает, это совсем не проблема. Репликация выполняется асинхронно, и когда подчиненный узел работает и работает после простоя, он продолжает репликацию с момента приостановки.
4) Записи, которые создаются или обновляются на главном компьютере, почти мгновенно «переносятся» на ведомый компьютер (даже если асинхронно).
Как мы это сделали?
Вот процесс, которому мы следовали, чтобы выполнить репликацию:
Предположения
- И Master, и Slave — машины для сжатия Debian.
- Мастер имеет статический IP: 10.100.10.80.
- Ведомый имеет статический IP: 10.100.10.103.
- Master и Slave находятся в одной локальной сети.
- Master имеет установленный MySQL, и у вас есть пароль root для подключения к нему с «localhost». MySQL не разрешает удаленные подключения по умолчанию, и это было в нашем случае.
- У ведомого еще не установлен MySQL.
- Главный debian разрешает входящие соединения через порт 3306, стандартный прослушивающий порт MySQL.
ФАЗА 1
обзор
На первом этапе работы обзор того, что мы сделали, выглядит следующим образом:
1) На Мастере
- Разрешить удаленные подключения
- Установить bind-адрес
- Включить бинарное ведение журнала
- Установить уникальный идентификатор сервера
- Перезагрузите сервер
- Создать пользователя для репликации
2) На Рабе
- Установите MySQL
- Стоп MySQL
- Установить bind-адрес
- Включить бинарное ведение журнала
- Установить уникальный идентификатор сервера
Подробные действия
На мастера
1) Разрешить удаленные подключения
Поскольку вы собираетесь изменить адрес привязки на своем сервере MySQL, вы по сути разрешаете доступ к своему серверу MySQL с «удаленных» компьютеров. Если вы этого не сделаете, после изменения адреса привязки и перезапуска вашего MySQL-сервера пользователи с удаленных или локальных компьютеров не смогут подключиться к вашему серверу. Всем IP-адресам удаленных и локальных компьютеров необходимо предоставить доступ пользователям, которые обращаются к MySQL с этих компьютеров.
Следующие команды mysql (которые могут быть выполнены с использованием оболочки mysql)
mysql> предоставить все в *. * bar@'10.100.10.55 ', идентифицированному как' bar_password '; mysql> сброс привилегий;
разрешить пользователю ‘bar’ подключаться к этому серверу MySQL и ко всем базам данных с компьютера с IP ’10 .100.10.55′. Это необходимо, даже если пользователь подключается с компьютера, на котором установлен сервер MySQL.
Следовательно, подключитесь к вашему серверу MySQL с помощью mysql и установите эти команды соответствующим образом, прежде чем перейти к следующему. Не забывайте, что это верно и для пользователя «root», даже если он подключается с локальной машины.
2) Установите адрес привязки к IP-адресу машины.
Это делается внутри файла my.cnf
bind-address
[mysqld]
Установите его на IP вашего главного компьютера. В нашем случае это было 10.100.10.80. Обратите внимание, что если вы включили skip-networking
3) Установите двоичный шаблон файла журнала
Параметр называется log_bin
[mysqld]
Обратите внимание, что необходимо указать полный путь к двоичному файлу журнала. Пример: /var/log/mysql/mysql-bin.log
Важное замечание : убедитесь, что в папке / диске достаточно места для записи туда двоичных журналов.
4) Установите идентификатор сервера
Это идентификатор главного сервера репликации. Он должен быть уникальным среди всех идентификаторов, используемых во всей настройке репликации. Например, установите для этого параметра «100» и убедитесь, что вы установили «101» на своем подчиненном устройстве (см. Далее).
Параметр является server-id
[mysqld]
5) innodb_flush_log_at_trx_commit
sync_binlog
Они должны быть установлены в «1», оба из них. В соответствии с документацией MySQL для максимально возможной долговечности и согласованности в настройке репликации с использованием InnoDB с транзакциями … вы должны это сделать. Подробнее об этом вы можете узнать здесь .
Эти параметры установлены в разделе [mysqld]
6) RESTART MySQL Server
Сделав все необходимые изменения в файле конфигурации MySQL Server и предоставив доступ всем существующим пользователям для возможности подключения с использованием их IP, вы можете перезапустить MySQL Server.
7) Создать пользователя для репликации
Вам необходимо создать пользователя, который будет иметь право работать в качестве клиента репликации / ведомого. Следующие команды:
mysql> создать пользователя 'repl'@'10.100.10.103', идентифицированного как 'slavepassword'; mysql> предоставить все на *. * для 'repl'@'10.100.10.103'; mysql> сброс привилегий;
создаем пользователя ‘repl’ и даем ему право выполнять репликацию с подчиненного компьютера с IP 10.100.10.103 с использованием указанного пароля.
На раб
1) Установите MySQL Server
На ведомой машине вам необходимо установить MySQL Server.
2) Остановить сервер MySQL
Вам пока не нужно его запускать. Перейдите к изменению параметров конфигурации MySQL для поддержки репликации Slave.
3) bind-address
Установите для bind-address
В нашем случае было 10.100.100.103. Параметр должен быть установлен в разделе [mysqld]
4) log_bin
Установите полный путь к двоичному файлу журнала. Например: /var/mysql/log/mysql-bin.log
Параметр задается в разделе [mysqld]
my.cnf
Важно : убедитесь, что в вашей папке двоичного журнала много места. Вам это понадобится.
5) server-id
Для этой настройки репликации необходимо указать идентификатор сервера для подчиненного узла. Положите, например, «101». Он должен отличаться от идентификаторов серверов ведущего и других ведомых узлов в вашей конфигурации.
Не запускайте подчиненный сервер MySQL. Вам все еще не нужно этого делать.
Вы сделали на данный момент. Фаза 1 закончена.
На втором этапе мы начнем репликацию.