HAproxy状态显示为DOWN

时间:2014-10-03 03:28:55

标签: load-balancing mariadb haproxy galera

我已经设置了MariaDB Galera集群,我测试过它在以下服务器上正常运行: db1 192.169.0.1 db2 192.169.0.2 db3 192.169.0.3

它们都在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。

3 个答案:

答案 0 :(得分:1)

我相信你已经检查了日志,在那里你可以看到连接进入和存在,或者没有被定向到它们应该被认为的节点/服务器。

我不知道这是不是一个错字,但我相信你已经将db4(haproxy机器)作为一个节点包括在内,对吧?它应该是db3)

还要检查是否可以从HAproxy机器访问端口3306到每个数据库节点

如果没有,请检查您为检查过程定义的haproxy用户是否具有mysql权限。如果没有,请登录到其中一个节点服务器并执行以下操作:

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

(出于安全考虑,你应该将'%'限制在正在运行HAproxy的IP地址上)

我的配置与您的配置类似,但添加了每个节点的节点权重和最大连接数的引导选项。我也更喜欢使用“leastcon”而不是“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

答案 1 :(得分:0)

我也遇到了这个问题,并且花了近一天的时间才发现HAPROXY有两种后端平衡/健康检查模式。第4层检查在OSI第4层上运行,而第7层在应用程序级别上运行。我正在使用option mysql-check检查第7层,并且需要在HAPROXY服务器/节点上安装mysql-client。我在HAPROXY机器/容器(docker)上没有任何Mysql-client软件包。然后我将选项检查转换为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层负载平衡来修复

在我的博客上可以看到更多细节 - HAProxy – Mysql cluster on Docker

答案 2 :(得分:0)

在我的情况下, SELinux 阻止了连接。