2014-10-03 5 views
1

я установка MariaDB Галера кластер, который я испытал, и она работает нормально на следующих серверах: DB1 192.169.0.1 db2 192.169.0.2 db3 192.169.0.3HAproxy статус показывая вниз

Они все работает на CentOS-6.5, а версия MariaDB - 10,0

Моя цель состояла в использовании HAproxy для выполнения балансировки нагрузки. Я установлен и настроен HAproxy на отдельном сервере

db4 192.168.0.4 

, без установки кластера или MariaDB установленной на нем, только HAproxy. Проблема в том, что HAproxy, похоже, не работает, т. Е. Выполняет балансировку нагрузки. Ее начинается нормально, и я могу получить к нему доступ через веб-интерфейс:

http://192.168.0.4:9000/haproxy 

но статус для серверов показывает, что они вниз, даже если они на самом деле и работает на своих машинах. Конфигурации HAproxy выглядит следующим образом:

global 
log 127.0.0.1 local0 notice 
user haproxy 
group haproxy 

defaults 
log global 
retries 2 
timeout connect 1000 
timeout server 5000 
timeout client 5000 

listen mariadb-cluster 
bind 0.0.0.0:3306 
mode tcp 
option mysql-check user haproxy 
balance roundrobin 
server db1 192.168.0.1:3306 check 
server db2 192.168.0.2:3306 check 
server db4 192.168.0.3:3306 check 

listen webinterface 
bind 0.0.0.0:9000 
mode http 
stats enable 
stats uri /haproxy 
stats realm Strictly\ Private 
stats auth admin:password 

DB1, DB2, db3 и db4 просто имена хостов для каждого сервера. Поэтому, когда я запускаю команду #hostname на первом сервере, она отображает db1.

+0

вы открыть порт 3306 на HAproxy сервере? – zypro

ответ

1

Я считаю, что вы проверили журнал, где вы видите соединения, входящие и находящиеся или не направленные на узел/сервер, которые они тоже предполагают.

Я не знаю, была ли это опечатка или нет, но я считаю, что вы включили db4 (haproxy machine) в качестве узла, правильно? Он должен был быть db3)

Проверьте также, если вы можете получить доступ к порту 3306 от HAproxy машины к каждому узлу дб

Если нет, пожалуйста, проверьте, если HAProxy пользователя вы определили для процесса проверки имеет разрешение MySQL. Если нет, то войти в один из серверов узлов и:

mysql> GRANT USAGE ON *.* TO 'haproxy'@'%'; 

(в целях безопасности вы должны сдерживать «%» на IP-адрес (адреса), где HAproxy работает)

У меня есть подобный конфигурации, но добавлены опции для ведения веса узла и максимальных подключений на узел. Я также предпочитаю использовать «lesscon» вместо «round robin», поэтому, пожалуйста, оцените, соответствует ли это вашей цели.

haproxy.cfg

global 
    log   127.0.0.1 local0 
    chroot  /var/lib/haproxy 
    pidfile  /var/run/haproxy.pid 
    maxconn  512 
    user  haproxy 
    group  haproxy 
    daemon 
    stats socket /var/lib/haproxy/stats mode 666 

defaults 
     log  global 
     mode http 
     option tcplog 
     option dontlognull 
     retries 3 
     option redispatch 
     maxconn 1024 
     timeout connect  3s 
     timeout client  50s 
     timeout server  50s 
     timeout check  10s 

listen website_cluster 0.0.0.0:3306 
     mode tcp 
     balance leastconn 
     option tcpka 
     option httpchk 
     option mysql-check user haproxy 
     stick store-request src 
     stick-table type ip size 200k expire 30m 
     server db1 192.168.0.1:3306 weight 40 check port 3306 inter 5000 rise 1 fall 3 maxconn 120 
     server db2 192.168.0.2:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75 
     server db3 192.168.0.3:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75 

На сайте MariaDB там также учебник, который также может помочь вам получить через: here

0

Я также столкнулся с этим вопросом, и провел только почти день чтобы узнать, что HAPROXY имеет 2 режима балансировки/проверки работоспособности. Проверка уровня 4 работает на уровне 4 OSI, а уровень 7 работает на уровне приложения. Я использовал option mysql-check, который проверяет уровень 7 и нуждается в mysql-client, который будет установлен на сервере/узле HAPROXY. У меня не было пакета Mysql-client на машине/контейнере HAPROXY (докер). Затем я преобразовал опцию в option tcp-check, она отлично работала.Вот мой полный код для haproxy.cfg

global 
    log haproxy-logger local0 notice 
    fuser haproxy 
    group haproxy 
    defaults 
log global 
    retries 2 
    timeout connect 3000 
    timeout server 5000 
    timeout client 5000 
listen mysql-cluster 
    bind 0.0.0.0:3306 
    mode tcp 
    #option mysql-check user haproxy_check 
    option tcp-check 
    balance roundrobin 
    server mysql1 mysql1:3306 check 
    server mysql2 mysql2:3306 check weight 2 
listen mysql-clusterstats 
    bind 0.0.0.0:8080 
    mode http 
    stats enable 
    stats uri/
    stats realm Strictly\ Private 
    stats auth status:mypass 

Наконец фиксируется поворотом его на слой 4 балансировки нагрузки

+0

У меня была точно такая же проблема, и изменение с mysql-check на tcp-check действительно решает проблему. Но моя конфигурация немного отличается от вашей, так что мой haproxy работает на том же узле, что и сервер mariadb, где также установлен клиент mysql ... поэтому мне все еще не ясно. Кстати, как я и проверял, если я вообще не включаю проверку, проблема также исчезает (хотя отключить здоровый чек не является хорошей идеей в производстве). – bruin

+0

Проведено больше тестов. Для использования mysql-check проблемы были в том, что я не установил пустой пароль для учетной записи haproxy_check. После установки пароля mysql-check также работает нормально. Стоит отметить, что я также столкнулся с другой проблемой в отношении репликации таблицы mysql.user, что, когда я создаю учетную запись haproxy_check с одного узла, она не реплицируется автоматически на остальные узлы. Оказывается, для этого мне нужно использовать другой SQL-запрос или, по крайней мере, проверить, что информация об учетной записи существует одинаково на всех узлах. Как было проверено, следующие две команды являются «реплицируемыми»: – bruin

+0

1. создать пользователя: СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ [email protected]'10.0.0.% '; 2. Предоставить привилегии: ИСПОЛЬЗОВАНИЕ GRANT ON \ *. \ * TO 'haproxy_check'@'10.0.0.%' ИДЕНТИФИКАЦИЯ '' С ОПРЕДЕЛЕНИЕМ ГРАНТА; ПРИВИЛЕГИИ ФЛЮЗА; BTW, я использую MariaDB v10.1.19 с HAProxy v1.5.14 на CentOS 7.2. – bruin

Смежные вопросы