【问题标题】:Amazon route 53 with ha-proxy带有 ha-proxy 的 Amazon 53 号公路
【发布时间】:2017-02-03 08:38:14
【问题描述】:

我正在使用 amazon route 53 将 DNS 请求路由到负载平衡器。对于负载平衡,我使用 ha-proxy 负载平衡器路由 53 将请求路由到 ha-proxy。

在路由 53 中,我为三个负载均衡器赋予了 33.33% 的权重。假设当客户端向路由 53 发出请求时,将请求路由到第一个 ha-proxy 服务器并建立 tcp 连接。

所以问题是当客户端发出第二个请求时它会去哪里?第二个请求是否有可能转到已经建立 tcp 连接的第一台服务器?

图像中给出了三台服务器,并且还有 route-53 客户端使用 route-53 DNS 加权向 ha-proxy 发出请求。

【问题讨论】:

  • 请描述您想要的行为,并解释为什么这种行为是可取的。 HAProxies 位于何处?他们在 EC2 中吗?如果是,它们是否在同一个 AWS 区域?您正在平衡哪些服务? HTTP/HTTPS?网络套接字?还有什么?
  • @Michael-sqlbot 由于 Haproxy 节点托管在 AWS EC2 实例上,AWS Route 53 正在根据 AWS Route 上每个 haproxy 节点的权重将 TLS 请求路由到这些 Haproxy 节点(托管在 EC2 实例上) 53 用于平衡 Haproxy 节点的负载。因为这基本上适用于聊天应用程序,其中 Haproxy 节点根据 least_conn 策略将 TLS 请求传输到后端聊天服务器(在 AWS ELB 中不可用)。在应用程序中,我们不知道会有多少用户。因此需要根据内存使用情况将请求路由到 Haproxy 节点,并动态更改 Route 53 中每个服务器的权重。

标签: amazon-route53


【解决方案1】:

下一个请求的去向没有明确定义。如果您在 DNS 响应上设置了较短的 TTL,则保证比您预期的要少,因为客户端可能会忽略或无法访问 TTL 信息。

然而,您仍然需要较短的 TTL,这样客户端就不会被停止服务的代理的 A 记录卡住。

将您的 DNS 权重设为 33.3% 可能不是最好的计划。您可以在每个 DNS 响应中返回所有健康代理的 IP 地址——应该不需要平衡每个代理的请求数量。

让我验证一下我对设置的理解。假设这是正确的,这里的其余答案应该是适用的。

场景:

您有多个 HAProxy 服务器,模式 tcp,终止 TLS,并使用 minimumconn 平衡对后端服务器的请求,以便具有最少连接数的后端服务器接收下一个传入连接。

分析:

您希望在后端平衡事情,因此您不需要在前端对 DNS 响应进行加权以使其正常工作。您真正需要对 DNS 做的就是对代理进行健康检查,如果代理的 IP 地址不健康,就不要公布它。否则,在每个 DNS 响应中返回所有代理地址。

理由:

客户端连接到哪个代理并不重要。返回所有地址会以随机顺序返回,客户端任意使用一个。

每个代理都保留自己对每个后端的连接数的计数,并且总是将连接发送到连接数最少的后端从它的角度来看。它不需要知道其他代理持有的连接数,因为每个代理 独立地确保将相同数量的连接发送到每个后端服务器。因此,在高峰需求时,每个代理发送到每个后端的连接数将是相同的,+/- 1,在每个代理内,并且在代理之间相同,仅受 DNS 的随机性影响......前端会自行取消,因为如果一个 IP 地址接收的流量比其他 IP 地址多,这仅意味着从该代理到 所有 后端的连接数高于其他的连接数,但无论这个数字是多少,在峰值负载时它仍然是 +/- 1 - 峰值负载时的分布应该是您唯一真正关心的问题。

由于断开连接的客户端多于连接连接,您将离开一段需求高峰期(根据定义),并且连接数将趋于不平衡,但这也无关紧要,因为代理会随着新连接的到来,它们会自动恢复到水平——从代理的角度来看,它们会自动分配给连接最少的服务器,我们已经假设此时您的需求不是高峰,所以精确的平衡变得不那么相关。使用此配置,在非高峰期间传递到任何一台后端服务器的并发连接数往往永远不会超过在高峰期间传递到服务器的连接数。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2019-10-05
    • 2013-02-17
    • 2017-12-28
    • 2014-02-17
    • 2020-07-19
    • 2021-12-18
    • 2018-04-30
    • 2020-01-25
    相关资源
    最近更新 更多