Назад | Перейти на главную страницу

HAProxy с ошибкой резервного копирования

У меня простая конфигурация из двух 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

Ничего не получилось!

Может кто-то указать мне верное направление?

Спасибо

Обращаясь к исходному вопросу о том, почему пример не работает, можно выделить две вещи:

  1. то check ключевое слово не добавляется в server декларации, которые говорят haproxy использовать директиву проверки работоспособности на этом сервере.
  2. то 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 (с использованием активного режима ожидания).