Haproxy mysql故障转移负载平衡

我已经安装了mysql master-master复制,现在我正在尝试使用Haproxy来平衡mysql服务器。

  • 负载均衡器: 192.168.1.5
  • mysql1: 192.168.1.7
  • mysql2: 192.168.1.8

下面的haproxyconfiguration工作正常,它是像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设置。 就像一个configuration一样,它应该将所有的请求默认发送到192.168.1.108如果192.168.1.107不存在,故障转移到192.168.1.108 。 我已经看到一些链接做这个备份,但它不适用于我的任何东西。

当我尝试更换上述configuration的最后两行时,

 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工作configuration为mysql负载平衡使用一些haproxy统计生产? 我需要一个主动 – 被动configuration,我问上面哪个redirect到备份节点,如果没有节点可用。 我将在新的ubuntu生产服务器上实现这一点。

任何帮助是极大的赞赏!。 谢谢!

删除检查端口9200s,那么你的备份选项应该工作。 你似乎在混合不同的例子,mysql-check在标准端口上运行,另一个常见的例子是使用http检查,他们在端口9200上设置一个xinetd进程,运行一个单独的检查脚本。

你有主 – 主复制工作,但即使如此,我不认为使用HAProxy进行MySQL负载平衡是正确的select。

HAProxy很棒,但是当作为TCP级别的负载平衡器运行时,它不能有任何SQL状态的概念。 长时间运行的SQL事务的行为不清晰且容易出错; 这是你不应该感到高兴的事情。

您的主 – 主设置具有单个节点的写入能力(因为所有写入都需要重复)。 因此,你正在扩大你的设置是读取和连接。 更常见和恕我直言更好的设置是:

  1. 从主 – 主对中挂起一些只读的MySQL从服务器。
  2. 更改您的应用程序代码以将所有写入发送给主设备,并且几乎全部读取(在可能的情况下)其中一个只读从设备。
  3. 明智地build立与MySQL的连接。 最好重新使用来自连接池的连接。

像MySQL代理或其他连接处理中间件也可能适用于你的情况。

“高性能MySQL”是一本非常不错的书,它提供了有关如何扩展MySQL的实用build议。 如果你读了这本书,我想你会更清楚地看到哪些devise是常见的,并certificate你的具体情况。

这个configuration完全是你想要的:)

 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集群与haproxy的组合,请尝试使用Galera编码或Percona XtraDB集群。