MySQL master+slave странное отставание реплик

linko22
Дата: 18.01.2013 11:30:12
Здравствуйте!

Такая ситуация. Есть у нас сервер, где запущено было изначально MySQL демон для полнотекстового поиска. Объемы данных стали возрастать, в связи чем было решено дополнительно запустить на нём 3 slave сервера. Что и было сделано, нам мастер пишут, со слейвов через HAProxy читают. Но через какое то время стал замечать, что идёт сильное отставание реплик от мастера. Проблема решилась очередным костылём, что если сервер реплики отстаёт, то он в HAProxy переводится в режим обслуживания и не участвует до тех пор, пока реплика не догонит мастера, и так по кругу, выключена была всегда только одна реплика, что бы работа на вставала.

После чего купили еще один, более мощный сервер, настроил на нем реплики, добавил в бекенды HAProxy, погоняли, всё ок, на нём отставания нет вообще, при этом нагрузка туда шла в 5 раз больше, чем на старые реплики.
Решил перетащить туда мастера со старого сервера - и реплики сразу стали отставать.

Собственно, вопрос такой, получается что если мастер и слейв на одном сервере то отставание реплик неизбежны? И как это вылечить?
Отвечу на любые дополнительные вопросы, что бы разобраться в проблеме.
netwind
Дата: 18.01.2013 11:46:36
linko22, ничего необычного. Отставание образуется в силу асинхронного характера репликации. Основная работа подчиненного сервера - писать на диск изменения. Любая дополнительная задача занимает диск работой и мешает репликации.
Почему отстает именно на одном, ну, значит, нагрузка от основных процессов загружает диск под завязку.

Не пробовали подчиненный разместить на том же сервере, но на отдельном диске ? Для такого применения не грех поставить delay_key_write=ALL на реплике.
linko22
Дата: 18.01.2013 12:21:22
Я не уверен, что проблема именно в диске. На новом сервере у нас 8 SAS дисков 300Gb 15к оборотов в 10 рейде. Скорость записи на пустом сервере была 600Мб. iostat показывает в пике запись 50Мб, tmp каталог для всех mysql расположен на диске памяти, 15гигов. Как раз проблемы начались, после запуска там мастер-сервера, хотя до этого он стам стоял и на него осуществлялась репликация со старого сервера. Т.е. схема была примерно такая:

MySQL-master(сервер1-старый)->MySQL-master(сервер2-новый)->MySQL-slaves(сервер2-новый 3 реплики)
Как только мастером для проектов стал MySQL-master(сервер2-новый) так началось отставание на репликах.

Если даже предположить, что проблема именно из-за диска, то как побороть проблему? Вынести мастер на отдельный сервер?
VGrey
Дата: 18.01.2013 13:18:24
Здравствуйте, linko22.

Думаю, у Вас выбрана несколько не оптимальная идеология построения системы.
Почему бы Вам не использовать вместо полнотекстового поиска, а Sphinx? Естественно, будут плюсы и минусы.

Плюсы:
- решение становится проще - не нужно использовать несколько серверов, реплики и т.п., как следствие, надежнее и дешевле;
- снижается нагрузка на систему;
- поиск становится более быстрый и менее ресурсоемким;
- появляются бонусы в виде русской морфологии;
- если снято обязательное условие использования myisam, появляется возможность перейти на более надежные и производительные хранилища innodb-xtradb, использовать более производительные и фичастые MariaDB и Perconf-server;
- многое другое.

Минусы:
- нужно напрячься и освоить что-то новое.

Как по мне, плюсов существенно больше.

---
С уважением,
Виктор
netwind
Дата: 18.01.2013 13:22:00
VGrey
Минусы:
- нужно напрячься и освоить что-то новое.

Главный минус в том, что производитель вместо того чтобы написать давно обещанное потоковое обновление как mysql slave, толкает на конференциях свой продукт. Вот даже вам запудрил мозги.
netwind
Дата: 18.01.2013 13:23:43
linko22
Если даже предположить, что проблема именно из-за диска, то как побороть проблему? Вынести мастер на отдельный сервер?

я же написал - поставить отдельный диск. любой.

автор
Я не уверен, что проблема именно в диске.

не уверены - делайте измерения. убедитесь что ресурс еще есть.
linko22
Дата: 18.01.2013 13:24:51
VGrey
Думаю, у Вас выбрана несколько не оптимальная идеология построения системы.
Почему бы Вам не использовать вместо полнотекстового поиска, а Sphinx?

Да у нас стоит в планах на следующий месяц начать тестирование, а так же в случае успеха, использование Sphinx. Пару месяцев назад мы переехали успешно на MariaDB, собственно сейчас сервера все на этом движке. Используем MyISAM, т.к. это исторически сложилось и база у нас большого размера, последний дамп весил 30Гб.
Переход на innoDB рассматривался, но не нашлось очевидных плюсов, т.к. мы по больше части читаем с базы, нежели пишем.

Текущий же вопрос состоит в том - как решать проблему отставания slave-серверов и связано ли это с тем, что Master и slave на одном сервере.
linko22
Дата: 18.01.2013 13:31:44
netwind
я же написал - поставить отдельный диск. любой.

Это только через пару недель если только. Но у меня в своё время жила конфигурация на старом сервере такая:
Первый диск: система + mysql-master, mysql-slave
Второй диск: 2 mysql-slave

В такой конфигурации слейвы на втором диске отставали еще больше.

Под первым диском я подразумеваю рейд 10 из четырех физических дисков, под вторым диском тоже рейд 10 из четырех физических дисков. Контроллер был один.

netwind
не уверены - делайте измерения. убедитесь что ресурс еще есть.

Вот в течении пары недель приедут новые сервера, там и попробую тогда.
netwind
Дата: 18.01.2013 13:46:31
linko22, чтобы измерить утилизацию дисков не нужны новые сервера.
linko22
Дата: 18.01.2013 13:56:33
netwind,
У меня нет возможности установить в сервер отдельный жёсткий диск, потому что он в ДЦ и в нём просто нет места для еще одного жесткого диска, к тому же сервер в продакшен уже ушел.

А по поводу измерений - я делал используя dd, hdparm, bonnie++

Сейчас еще раз их прогоню.