2014-10-03 303 views
1

我已经安装MariaDB的加莱拉集群,我已经测试过,并在以下服务器上工作正常: DB1 192.169.0.1 DB2 192.169.0.2 DB3 192.169.0.3HAProxy的状态显示DOWN

它们都运行在CentOS-6.5和MariaDB版本是10.0

我的目标是使用HAproxy来执行负载平衡。我已经安装和一个单独的服务器

db4 192.168.0.4 

与安装在其上没有集群设置或MariaDB的,仅HAProxy的上配置HAProxy的。问题是,HAproxy似乎没有工作,即进行负载平衡。它开始OK,我可以通过网络界面访问:

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 2016-04-26 08:48:18

回答

1

我相信你已经检查了日志,在那里你可以看到连接进入和正在或未被引导到它们应该连接的节点/服务器。

我不知道它是否是一个错字,但我相信你已经包含了db4(haproxy机器)作为节点,对吧?它应该是DB3)

检查,如果你还可以从HAProxy的计算机访问端口3306到每个节点分贝

如果没有,请检查您是否对检查过程中定义的HAProxy的用户有mysql的权限。如果没有,请登录到您的节点服务器,然后:

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

(为安全起见,你应该约束“%”到HAProxy的运行IP地址(ES))

我有一个类似配置添加到您的设备上,但增加了选项,可以为每个节点添加节点权重和最大连接数。我更喜欢用“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

0

我也遇到了这个问题,只有将近一整天发现HAPROXY有2种后端平衡/健康检查模式。第4层检查在OSI第4层上运行,而第7层在应用层上运行。我使用的是option mysql-check,它检查第7层,并且需要mysql-client安装在HAPROXY服务器/节点上。我没有HAPROXY机器/容器(码头)上的任何Mysql客户端软件包。然后我将选项检查转换为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 2016-12-20 04:04:15

+0

做了更多的测试。为了使用mysql-check,我的问题是我没有为haproxy_check帐户设置空密码。设置密码后,mysql-check也可以正常工作。值得注意的是,我还遇到了有关mysql.user表复制的另一个问题,即当我从一个节点创建haproxy_check帐户时,它不会自动复制到其余节点。事实证明,我需要使用不同的SQL语句来完成此操作,或者至少验证所有节点上的帐户信息都是相同的。经测试,以下两个命令是“可复制的”: – bruin 2016-12-20 07:50:09

+0

1. create user:CREATE USER [email protected]'10.0.0.%'; 2.授予权限:授予使用权\ *。\ *到'haproxy_check'@'10.0.0.%'IDENTIFIED BY''使用授予选项; FLUSH PRIVILEGES;顺便说一下,我在CentOS 7.2上使用了MariaDB v10.1.19和HAProxy v1.5.14。 – bruin 2016-12-20 07:51:00