HAProxy在服务器从DOWN状态恢复后使用该服务器。

7
我有一台服务器,运行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>

谢谢


更改“重试”将不会改变任何内容。该参数是指在后端连接尝试失败时的重试次数,即使HAProxy认为它是健康的,但实际上并非如此,这种情况很少见。您说没有尝试,因此这不适用。当您说必须重新启动时...您必须重新启动什么?此外,“********:3306”是IP地址还是主机名? - Michael - sqlbot
我需要重新启动HAProxy,以便它再次加载配置文件并尝试连接两个服务器。********: 3306是主机名。 - Maurício Giordano
我认为我知道问题出在哪里了。请提供您的HAProxy版本。(haproxy -v - Michael - sqlbot
我编辑了我的回答。 - Maurício Giordano
请查看 https://severalnines.com/resources/tutorials/mysql-load-balancing-haproxy-tutorial - Naruto
显示剩余3条评论
1个回答

2
我们在AWS基础架构中出现了类似的情况: 每个实例上都有一个HAProxy用于访问RDS副本(我们有3个副本,但应用程序只能使用一个主机名)。 我们通过使用具有相同名称(例如db.example.internal)和相同权重(加权路由53政策)的多个记录的Route53内部替换HAProxy来全局解决此问题。 同时,我们为每个副本创建了Route53健康检查(TCP 3306端口检查)。 对于我们来说,这个解决方案非常有效,如果我们需要添加/删除RDS副本,唯一需要更改的地方就是Route53记录和健康检查(我们不需要维护每个实例HAProxy状态/配置)。

你的解决方案很好,但你弄清楚问题的原因了吗?是haproxy在DNS查询失败时出现了奇怪的行为,就像@Mauricio建议的那样,还是其他什么原因? - Oleg Kuralenko
@Tim Bikbaev,在这种情况下,选择使用哪个实例是由Route53处理的,而HAProxy只是重定向到Route53?如果是这样的话,我们就不需要HAProxy了,对吗?是否可以将Route53用作我们实例的负载均衡器? - Maurício Giordano
@MaurícioGiordano 在这种情况下,我们将不会使用HAProxy - 它的主要优点!!)所有负载均衡将在Route53级别+健康检查上执行。 - Tim Bikbaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接