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

Haproxy mysql отказоустойчивый баланс нагрузки

Я настроил репликацию master-master mysql, и теперь я пытаюсь сбалансировать нагрузку на серверы mysql с помощью Haproxy.

Приведенная ниже конфигурация haproxy работает нормально, и она вращает узлы, такие как roundrobin.

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
    log 127.0.0.1   local0
    log 127.0.0.1   local1 notice
    #log loghost    local0 info
    maxconn 4096
    #chroot /usr/share/haproxy
    chroot /etc/haproxy
    user haproxy
    group haproxy
    pidfile /var/run/haproxy.pid
    daemon
    #debug
    #quiet

defaults
    log global
    #mode   http
    mode    tcp
    #option httplog
    option  dontlognull
    retries 3
    option redispatch
    maxconn 2000
    #contimeout 5000
    contimeout  3600000
    #clitimeout 50000
    clitimeout  3600000
    #srvtimeout 50000
    srvtimeout  3600000

listen mysql_cluster 0.0.0.0:3307
    mode tcp
    balance roundrobin
    option mysql-check user root
    #option httpchk GET /mysqlchk/?port=3306
    option tcpka
    server mysql1 192.168.1.107:3306 
    server mysql2 192.168.1.108:3306

Это НЕ то, что я хотел.

Я хочу Active-Passive настроить. Например, конфигурация, которая должна отправлять все запросы на 192.168.1.107 по умолчанию и переключение на 192.168.1.108 если 192.168.1.107 не существует. Я видел некоторые ссылки, делающие это, упоминая как резервное копирование но у меня ничего не получилось.

Когда я попытался заменить последние две строки приведенной выше конфигурации на,

server mysql1 192.168.1.107:3306 check port 9200 inter 12000 rise 3 fall 3
server mysql2 192.168.1.108:3306 check port 9200 inter 12000 rise 3 fall 3 backup 

Я получаю сообщение об ошибке ниже при перезапуске haproxy, и оно останавливается.

Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!

У кого-нибудь есть надежная рабочая конфигурация haproxy для балансировки нагрузки mysql, чтобы использовать ее на производстве с некоторой статистикой haproxy ?. Мне нужна активно-пассивная конфигурация, о которой я спрашивал выше, какая перенаправление на резервный узел, если узлов нет. Я собираюсь реализовать это на новом производственном сервере ubuntu.

Любая помощь приветствуется !. Спасибо!

У вас работает репликация мастер-мастер, но даже в этом случае я не думаю, что использование HAProxy для балансировки нагрузки MySQL - правильный выбор.

HAProxy великолепен, но при работе в качестве балансировщика нагрузки на уровне TCP он не может иметь никакого представления о состоянии SQL. Поведение при длительных транзакциях SQL неясно и подвержено ошибкам; это то, что вас не должно устраивать.

Ваша установка мастер-мастер имеет емкость записи одного узла (так как все операции записи необходимо дублировать). Таким образом, то, что вы увеличиваете с помощью своей установки, - это чтения и соединения. Более распространенная и, по моему мнению, намного лучшая установка:

  1. Повесьте несколько ведомых устройств MySQL, доступных только для чтения, из пары главный-главный.
  2. Измените код приложения, чтобы все операции записи отправлялись мастеру, а почти все операции чтения (где это возможно) - одному из ведомых устройств, доступных только для чтения.
  3. Будьте осторожны при установке соединений с MySQL. Желательно повторно использовать соединения из пула соединений.

Что-то вроде Прокси MySQL или другое промежуточное ПО для обработки соединений также может хорошо работать в вашем случае.

«Высокопроизводительный MySQL» действительно хорошая книга с практическими советами по масштабированию MySQL. Если вы прочтете эту книгу, я думаю, вы более четко увидите, какие конструкции наиболее распространены и проверены для вашей конкретной ситуации.

Этот конфиг делает именно то, что вы хотите :)

global
       log 127.0.0.1 local0
       maxconn 4096
       user haproxy
       group haproxy
       daemon

defaults
       log global
       mode tcp
       option tcplog
       option dontlognull
       retries 3
       option redispatch
       maxconn 2000
       contimeout 4000
       clitimeout 50000
       srvtimeout 30000
       stats enable
       stats scope .

frontend mysql_cluster
       bind 3.3.3.3:3307
       #bind *:3307
       default_backend mysql_cluster

backend mysql_cluster
       mode tcp
       option mysql-check
       balance roundrobin
       server db01_1.1.1.1       1.1.1.1:3306      weight 1        check port 3306
       server db02_2.2.2.2       2.2.2.2:3306      weight 100      check port 3306 backup


listen stats 3.3.3.3:10000
       mode http
       option httpclose
       balance roundrobin
       stats uri /
       stats realm Haproxy\ Statistics
       #stats auth user:pass

Для истинного кластера MySQL master-master в сочетании с haproxy попробуйте использовать кодерство Galera или percona XtraDB Cluster.

Удалите контрольный порт 9200s, тогда ваш вариант резервного копирования должен работать. Кажется, вы смешиваете разные примеры, mysql-check работает на стандартном порту, хотя есть еще один распространенный пример, который использует проверку http, где они настраивают процесс xinetd, отвечающий на порт 9200, который запускает отдельный сценарий проверки.