我有一个简单的configuration2 MySQL正在由HAProxy负载平衡。 由于一个不幸的原因,我需要在被动\主动模式下使用它们。 所以我想我会configuration一个数据库作为“备份”,并进入睡眠。 但是我错了。 每当我将“备份”添加到服务器行HAProxy抛出一个通信链接错误(本质上说'没有可用的数据库'(与“备份”它工作很好)它只是不认为该服务器作为一个有效的选项了.. 。
我已经尝试过这种configuration:
听mysql 10.0.0.109:3307
mode tcp balance roundrobin option httpchk server db01 10.0.0.236:3306 server db02 10.0.0.68:3306 backup
还有这个configuration:
前端mysql_proxy
bind 10.0.0.109:3307 default_backend mysql后端mysql
mode tcp balance roundrobin option httpchk server db01 10.0.0.236:3306 server db02 10.0.0.68:3306 backup
没有工作!
任何人都可以指向正确的方向吗?
谢谢
解决原来的问题,为什么这个例子不起作用有两件事情是突出的:
check关键字不会被添加到server声明中,这会告诉haproxy在此服务器上使用运行状况检查指令。 httpchk关键字最好与server指令中的port一起使用,以定义HTTP健康检查服务正在运行的位置。 这种方法假设你已经设置了一个报告主设备健康状况的服务。 例如,我认为像这样的东西会工作(未经testing)
backend mysql mode tcp balance roundrobin option httpchk GET /master_status server db01 10.0.0.236:3306 weight 100 check port 3305 inter 1s rise 3 fall 2 server db02 10.0.0.68:3306 weight 100 check port 3305 inter 1s rise 3 fall 2 backup
在这个例子中,haproxy将查询每个server端口3305上的/master_status url。 如果服务器返回2xx状态码,后端将通过haproxy可用。 否则,它将脱机。
为了解决健康检查服务的问题,可以使用rubygem mysql_health 。 您可以在参与haproxy集群的每个数据库服务器上运行此服务。
https://github.com/osterman/mysql_health
要启动健康检查服务,您可以运行如下所示的操作:
/usr/bin/mysql_health --server:pid-file=/var/run/mysql_health.pid \ --log:file /var/log/mysql_health.log \ --server:daemonize \ --server:port 3305 \ --check:master \ --check:database mysql
还有更多的命令行选项可用。 使用--help参数获取更多细节。
你使用的是什么haproxy版本,如果你使用1.4版本,它支持mysql健康检查“选项mysql-check”例如:
mode tcp balance roundrobin option tcplog option mysql-check user haproxy server svr1 svr1:3306 check inter 2s rise 2 fall 2 server svr2 svr2:3306 check backup inter 2s rise 2 fall 2
我的设置,它与mysql master – master(使用主动standy)工作正常。