我有一台运行HAProxy的服务器来负载均衡我们的mysql服务器。当我们在很长一段时间内具有较低的平均负载时,某些服务器可能会停机,但是,在将来,如果负载再次变高,那些服务器会自动上升。问题是当一个实例发生故障时,HAProxy永远不会再查看它,所以当实例再次启动时,它会被忽略。为了解决这个问题,我们会在需要时重启。
这是我们的配置文件:
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 leastconn
server mysql-1 ********:3306 check
server mysql-2 ********:3306 check
也许如果我将重试从2更改为大数字,它可以解决我们的问题吗?
修改 根据要求,这是我的HAProxy版本:
$ haproxy -v
HA-Proxy version 1.4.24 2013/06/17
Copyright 2000-2013 Willy Tarreau <w@1wt.eu>
由于
答案 0 :(得分:2)
我们的AWS基础架构中存在类似情况: 用于RDS副本访问的每个实例上的HAProxy(我们有3个副本,但应用程序只能使用一个主机名)。我们通过使用具有相同名称(例如db.example.internal)和相同权重(加权Route53策略)的多个记录替换HAProxy和Route53内部全局来解决此问题。我们还为每个副本创建Route53运行状况检查(TCP 3306端口检查)。对我们来说,这个解决方案很有效,如果我们需要添加/删除RDS副本 - 我们需要更改的唯一地方 - Route53记录和运行状况检查(我们不需要维护每个实例HAProxy status / conf)