HAProxy只发送stream量到一个节点

我有一个IP 10.60.61.20的HAProxy和三个IP地址为.21,.22,.23的MariaDB节点,当然在同一个子网中。 我有MariaDB集群sync'd,他们可以读/写彼此,但是当我设置HAProxy,它只是发送stream量到10.60.61.21(第一个节点)。 即使在第一个节点上closuresmysql之后,HAProxy仍然存在连接错误,并且不会将stream量发送到其他两个节点。 有没有人见过这个? 我只是build立了4个Ubuntu 12.04服务器,其中3个用于节点,另一个是HAProxy。 这是我的HAProxy .conf文件:

global log 127.0.0.1 local0 notice user 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 balance roundrobin server mariadb1 10.60.61.22:3306 check server mariadb2 10.60.61.21:3306 check server mariadb3 10.60.61.23:3306 check 

任何帮助,将不胜感激。

你的问题是在应用程序方面。

由于这是模式TCP,它将平衡各个服务器之间的TCP连接,而不是sql事务。 这意味着,如果您的应用程序不使用连接 ,而只是保持一个打开的连接,那么该连接将保持对一台服务器打开。 如果应用程序不会在失败的连接上重试,HAProxy将不会将失败的TCP连接奇迹般地移动到另一个服务器。

我认为一个简单的testing就是对haproxy IP重复执行如下命令(但是,不要在一个控制台会话中运行它):

 mysql -u monitor -p -e "show variables like 'server_id'" 

我会检查haproxy负载平衡器上的日志。

 # less /var/log/haproxy.log 

你应该看到UPDOWN消息。 如果你注意到它不够快,你总是可以改变:

 server mariadb1 10.60.61.22:3306 check server mariadb2 10.60.61.21:3306 check server mariadb3 10.60.61.23:3306 check 

对于更有侵略性的问题,例如fail over after 2 failed checks, check ever second

 server mariadb1 10.60.61.22:3306 check fall 2 inter 1000 server mariadb2 10.60.61.21:3306 check fall 2 inter 1000 server mariadb3 10.60.61.23:3306 check fall 2 inter 1000 

DigitalOcean有一个很好的教程 。

感谢大家的所有意见。 我终于解决了这个问题,发生了什么事情,在安装过程中,我访问了第一个MariaDB主机,并说,(我不是一个MySQL专家)“授予用户haproxy_check访问任何具有完全权限的数据库”。 但是我没有这样做到其他服务器。 因此,HAProxy能够使用正确的用户名/密码login到第一台服务器,但这些用户权限没有复制到其他数据库,所以我必须手动进入每个MariaDB服务器并为该用户创build条目以login到任何数据库。 一旦发生,一切立即开始工作。 再次感谢大家的洞察力。 我认为,因为我的galera集群处于完全复制状态,所以我在第一个服务器上的input将会占用其余部分,但是用户访问input不是这种情况。 然而,所有的表格,字段和编辑以及这样的复制,导致我相信权限也是这样,但是,他们没有。