2017-02-03 49 views
0

我使用亚马逊路由53将DNS请求路由到负载均衡器。为了负载平衡,我使用ha-proxy负载均衡器路由53将请求路由到ha-proxy。亚马逊路由53与ha-proxy

在路由53中,我给了三个负载平衡器一个权重33.33%。假设客户端请求路由53时,将请求路由到第一个ha-proxy服务器并建立tcp连接。

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

enter image description here

有一个在给定的图像三个服务器和也有路由-53客户端作出的请求来加权的使用HA代理路由-53 DNS。

+0

请描述你想要的行为,并解释为什么这种行为是可取的。 HAProxies在哪里?他们在EC2吗?如果是这样,他们是否在同一个AWS区域?你在平衡哪些服务? HTTP/HTTPS? WebSockets的?还有别的吗? –

+0

@ Michael-sqlbot鉴于Haproxy节点托管在AWS EC2实例上,并且AWS Route 53根据赋予AWS Route 53上每个haproxy节点的权重,将TLS请求路由到这些Haproxy节点(托管在EC2实例上),以平衡负载到Haproxy节点。因为这基本上是用于聊天应用程序,其中Haproxy节点基于least_conn策略将TLS请求传输到后端聊天服务器(在AWS ELB中不可用)。在应用程序中,我们不知道将有多少用户在那里。因此,需要根据其内存使用情况将请求路由到Haproxy节点,并动态更改Route 53中每个服务器的权重。 – patel

回答

0

下一个请求去的地方没有明确定义。如果你在DNS响应中设置了一个短的TTL,那么确保比你期望的要小,因为客户可能会忽略或不能访问TTL信息。

但是,您仍然需要较短的TTL,以便客户端不会遇到无法使用代理的A记录。

以33.3%加权你的DNS可能不是最好的计划。您可以使用每个DNS响应返回所有健康代理的IP地址 - 无需平衡每个代理的请求数量。

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

场景:

您有多个HAProxy的服务器,模式TCP,终止TLS和平衡使用leastconn请求到后端服务器,以便用最少连接数后端服务器将接收下一个呼入连接。

分析:

你想要的东西在后台平衡,所以你不需要的重量在前面侧的DNS响应正确,使这项工作。你真正需要做的就是健康检查代理服务器,如果代理服务器的IP地址不健康,请不要公布代理服务器的IP地址。否则,请用每个DNS响应返回所有代理地址。

理由:

不要紧其代理客户端连接到。返回所有地址将以随机顺序返回它们,客户端将随意使用一个地址。

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

随着越来越多的客户断开连接而不是连接,您将离开一段时间的峰值需求(按照定义),并且连接数量往往会变得不那么平衡,但这也不重要,因为代理将会在新连接到达时再次将其恢复到原来的水平 - 它们会自动从服务器角度给予服务器的连接数最少,并且我们已经假定在这一点上您没有处于高峰需求,所以精确度平衡变得不那么重要。在非峰值期间传递到任何一台后端服务器的并发连接数量将不会超过在此配置达到峰值期间交付给服务器的连接数量。