Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
У меня есть три машины с mysql, все содержат идинаковые копии одной БД
Для балансировки нагрузки на одну из машин (US3) я поставил mysql-proxy
Создал для него конфигурационный файл
[mysql-proxy]
proxy-backend-addresses = us3:3306,us1:3306,us2:3306
daemon=true
pid-file=/usr/local/mysql-proxy/bin/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = message
Написал простой тест, в котором я делаю 1000 запросов
show VARIABLES where variable_name like "server_id"
По задумке mysql-proxy должен переключать машины по кругу, но в реальности оказалось что практически все запросы он посылает US3, т.е. практически на localhost.
Мне кажется что это возможно изза того что mysql-proxy учитывает также время ответа от машин и поэтому выбрал US3 как приоритетную.
Как сделать так чтобы он честно крутил машины по кругу? Надо ли писать lua скрипт или все же достаточно указать что-то дополнительное в настройках?
И еще вопрос по поводу отказоустойчивости - как mysql-proxy будет вести себя если одна из машин(например US1) выйдет из строя, а потом, через некоторое время, снова включится?
Обработает ли он самостоятельно такой случай или ему надо будет тоже писать скрипт?
Неактивен
А он вообще хоть иногда пытается коннектиться на другие машинки?
Я бы на его месте не стал
Для того, чтобы работало несколько бэкендов, надо указывать несколько раз:
http://dev.mysql.com/doc/refman/5.0/en/ … using.html
Также надо понимать, что в MySQL Proxy есть очень неприятная бага с тем, что
кодировку он не передает, поэтому можете попасть в неприятное положение,
если умолчания сервера не совпадают с ожиданиями клиента.
MySQL Proxy не является хоть сколь нибудь отказоустойчивым решением. Ну
то есть теоретически убитые бэкенды он отключает, но сам по себе является
точкой отказа (подумайте, что будет, если us3 умрет).
По поводу отказоустойчивости совсем недавно мы обсуждали вот тут:
http://sqlinfo.ru/forum/viewtopic.php?pid=17766#p17766
Неактивен
paulus написал:
А он вообще хоть иногда пытается коннектиться на другие машинки?
Я бы на его месте не стал
Пытается. Остановил mysqld на US3 запустил тест и он начал использовать US1 и US2 и крутит их по кругу.
Но к сожалению после включения US3 он как то вяло пытается начать ее использовать.
paulus написал:
Для того, чтобы работало несколько бэкендов, надо указывать несколько раз:
http://dev.mysql.com/doc/refman/5.0/en/ … using.html
Да это верно для консоли, но в конфиг, файле синтаксис чуть другой - предлагается вводить бэкэнды через запятую
paulus написал:
Также надо понимать, что в MySQL Proxy есть очень неприятная бага с тем, что
кодировку он не передает, поэтому можете попасть в неприятное положение,
если умолчания сервера не совпадают с ожиданиями клиента.
Я использую везде UTF8, он все равно может ошибаться?
paulus написал:
MySQL Proxy не является хоть сколь нибудь отказоустойчивым решением. Ну
то есть теоретически убитые бэкенды он отключает, но сам по себе является
точкой отказа (подумайте, что будет, если us3 умрет).
Будет плохо
paulus написал:
По поводу отказоустойчивости совсем недавно мы обсуждали вот тут:
http://sqlinfo.ru/forum/viewtopic.php?pid=17766#p17766
Интересное обсуждение. Но меня счас больше интересует балансировка нагрузки. Там обсуждалось решение на базе IPVS, но я так понял что это не окончательное решение, а представляет собой инструмент и требует дописывания кода руками.
Неактивен
Хм, видимо, я давно им не пользовался
Везде UTF8 — это хорошо. Но проверьте на всякий случай, что данные вдруг
не начнут ехать в latin1.
Любое решение, к сожалению, требует некоторой настройки. В том числе
и mysqlproxy. Если рассматриваете проксирующие решения — поглядите также
в сторону haproxy — он умеет меньше, чем mysqlproxy, но зато не переделывает
стек запроса внутри себя, а потому содержит меньше ошибок. Ну, это всё в
случае, если Вам нужна только балансировка, а не, например, lua
Неактивен
Понятно! Посмотрю что может предложить haproxy - может он лучше отрабатывает ситуации выхода из строя отдельных машин. LUA пока не нужна, только балансировка
Спасибо за помощь!
Неактивен