Задать вопрос
@andreyvlru
менеджер-программист

Как распределить запросы к MySQL по серверам?

Есть MySQL Master + Slave
Сейчас к серверу БД идет порядка 1,5 - 2 тысячи запросов в секунду. Хочу раскидать их на master и slave. Что можно использоваться для автоматического распределения? Желательно через 1 соединения с БД.
  • Вопрос задан
  • 2295 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
opium
@opium
Просто люблю качественно работать
mysqlproxy
haproxy
Ответ написан
Комментировать
disc
@disc
веб-разработчик
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Что значит через одно соединение с бд?

У Вас же надеюсь есть какая то своя обвязка над mysqli функциями?

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

Единственный нюанс который (гипотетически) может быть - если у вас асинхронная репликация, есть шанс что пользователь к примеру пишет комментарий, рефрешит страницу - и не видит его, тк слейв отстает.
Решать это можно по разному, мне кажется что правильнее - на стороне фронтенда.
Ответ написан
@andreyvlru Автор вопроса
менеджер-программист
Про haproxy много чего хорошего пишут, спасибо, посмотрю внимательнее.
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
haproxy не подойдет, если вы не собираетесь модифицировать приложение (то бишь, внутри него описывать логику куда ходить селектом, а куда инсертом).
MysqlProxy подойдет. Но у него проблемы с кодировками, отличными от utf8.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы