У меня простая конфигурация из двух MySQL с балансировкой нагрузки с помощью HAProxy. По досадной причине мне нужно использовать их в пассивном \ активном режиме. Поэтому я подумал, что настрою одну БД как «резервную» и пойду спать. Но я был неправ. Всякий раз, когда я добавляю «резервную копию» в строку сервера, HAProxy выдает ошибку канала связи (по сути говоря, «нет доступной базы данных» (с «резервной копией» она отлично работает). Он просто больше не рассматривает этот сервер как допустимый вариант. .
Я пробовал эту конфигурацию:
слушайте mysql 10.0.0.109:3307
mode tcp balance roundrobin option httpchk server db01 10.0.0.236:3306 server db02 10.0.0.68:3306 backup
а также эта конфигурация:
внешний интерфейс mysql_proxy
bind 10.0.0.109:3307 default_backend mysql
бэкэнд mysql
mode tcp balance roundrobin option httpchk server db01 10.0.0.236:3306 server db02 10.0.0.68:3306 backup
Ничего не получилось!
Может кто-то указать мне верное направление?
Спасибо
Обращаясь к исходному вопросу о том, почему пример не работает, можно выделить две вещи:
check
ключевое слово не добавляется в server
декларации, которые говорят haproxy использовать директиву проверки работоспособности на этом сервере.httpchk
ключевое слово лучше всего использовать вместе с port
на server
директива, определяющая, где запущена служба проверки работоспособности HTTP. Этот метод предполагает, что вы где-то настроили службу, которая сообщает о работоспособности мастера. Например, я думаю, что что-то вроде этого сработает (непроверено)
backend mysql
mode tcp
balance roundrobin
option httpchk GET /master_status
server db01 10.0.0.236:3306 weight 100 check port 3305 inter 1s rise 3 fall 2
server db02 10.0.0.68:3306 weight 100 check port 3305 inter 1s rise 3 fall 2 backup
В этом примере haproxy запросит /master_status
URL порта 3305 на каждом server
. Если сервер возвращает код состояния 2xx, бэкэнд будет доступен через haproxy. В противном случае он будет отключен.
Чтобы решить проблему с сервисом проверки работоспособности, вы можете использовать rubygem mysql_health
. Вы должны запустить эту службу на каждом сервере базы данных, который участвует в кластере haproxy.
https://github.com/osterman/mysql_health
Чтобы запустить службу проверки работоспособности, вы должны запустить что-то вроде:
/usr/bin/mysql_health --server:pid-file=/var/run/mysql_health.pid \
--log:file /var/log/mysql_health.log \
--server:daemonize \
--server:port 3305 \
--check:master \
--check:database mysql
Доступно гораздо больше параметров командной строки. Использовать --help
аргумент для более подробной информации.
какую версию haproxy вы используете?, если вы используете версию 1.4, она поддерживает проверку работоспособности mysql "option mysql-check", например:
mode tcp
balance roundrobin
option tcplog
option mysql-check user haproxy
server svr1 svr1:3306 check inter 2s rise 2 fall 2
server svr2 svr2:3306 check backup inter 2s rise 2 fall 2
моя установка, она отлично работает с mysql master - master (с использованием активного режима ожидания).