【问题标题】:HAProxy use server when comes from DOWN to UPHAProxy 从 DOWN 到 UP 时使用服务器
【发布时间】:2017-06-12 15:14:03
【问题描述】:

我有一台运行 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

也许如果我将 retries 从 2 更改为一个大数字,它可以解决我们的问题吗?

编辑 根据要求,这是我的 HAProxy 版本:

$ haproxy -v
HA-Proxy version 1.4.24 2013/06/17
Copyright 2000-2013 Willy Tarreau <w@1wt.eu>

谢谢

【问题讨论】:

  • 更改 retries 不会改变任何东西。该参数指的是在 HAProxy 认为健康的后端建立后端连接尝试失败时重试,即使它不是,这种情况很少见。你说没有尝试,所以这不适用。当你说你必须重启时……你必须重启什么?另外,********:3306 是 IP 地址还是主机名?
  • 我需要重新启动 HAProxy,因此它会再次加载配置文件并尝试建立与两台服务器的连接。 ********:3306 是主机名。
  • 我想我知道问题是什么。请提及您的 HAProxy 版本。 (haproxy -v)
  • 我编辑了我的答案。

标签: mysql haproxy


【解决方案1】:

我们的 AWS 基础设施也有类似的情况: 每个实例上的 HAProxy 用于 RDS 副本访问(我们有 3 个副本,但应用程序只能使用一个主机名)。我们通过使用多个具有相同名称(例如 db.example.internal)和相同权重(加权 Route53 策略)的记录将 HAProxy 替换为 Route53 internal 来全局解决此问题。我们还为每个副本创建 Route53 健康检查(TCP 3306 端口检查)。对我们来说,这个解决方案效果很好,如果我们需要添加/删除 RDS 副本 - 我们需要更改的唯一地方 - Route53 记录和健康检查(我们不需要维护每个实例的 HAProxy 状态/conf)

【讨论】:

  • 您的解决方案很好,但是您是否弄清楚问题的原因是什么?如果 @Mauricio 建议的 dns 查询失败或其他原因,这是 haproxy 的奇怪行为吗?
  • @Tim Bikbaev,在这种情况下,使用哪个实例的决定由 Route53 处理,HAProxy 仅重定向到 Route53?如果是这样,我们就不需要 HAProxy,对吧?是否可以将 Route53 用作我们实例的负载均衡器?
  • @MaurícioGiordano 在这种情况下,我们根本不会使用 HAProxy - 它的主要好处!!)所有负载平衡都将在 Route53 级别+健康检查上执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2012-08-06
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多