12

我正在尝试对 nodejs 服务器发送的事件后端进行负载平衡,我需要知道是否有办法将新连接分发到连接最少的客户端的实例。我遇到的问题是,当扩大规模时,路由会继续向已经饱和的实例发送新连接,并且由于连接寿命很长,这根本行不通。

对于水平扩展长寿命连接,我有哪些选择?

4

2 回答 2

1

看起来您想要一个可以提供“粘性会话”并使用“最少连接”而不是“循环”策略的负载均衡器。不幸的是,NGINX 不能提供这个。

HAProxy(高可用性代理)允许这样做:

backend bk_myapp
 cookie MyAPP insert indirect nocache
 balance leastconn
 server srv1 10.0.0.1:80 check cookie srv1
 server srv2 10.0.0.2:80 check cookie srv2

如果您需要 ELB 功能并想手动滚动它,请查看本指南

您可能还想确保经典的 AWS ELB“粘性会话”配置或较新的ALB“粘性会话”选项不能满足您的需求。ELB 通常会以最少的“负载”将连接发送到上游服务器,并且在与粘性会话结合时可能就足够了。

于 2019-02-23T00:11:52.727 回答
0

由于您使用的是 AWS,因此我建议您将Elastic Beanstalk用于您的 Node.js 应用程序部署。官方文档提供了很好的例子,比如这个。请注意,Beanstalk 会自动为您创建一个弹性负载均衡器,这正是您要寻找的。

默认情况下,当您使用 Elastic Beanstalk 控制台或 EB CLI 启用负载平衡时,Elastic Beanstalk 会为您的环境创建一个 Application Load Balancer。它将负载均衡器配置为侦听端口 80 上的 HTTP 流量,并将此流量转发到同一端口上的实例。

[...]

注意:您的环境必须位于具有至少两个可用区中的子网的 VPC 中才能创建应用程序负载均衡器。所有新的 AWS 账户都包含满足此要求的默认 VPC。如果您的环境位于仅在一个可用区中具有子网的 VPC 中,则默认为 Classic Load Balancer。如果您没有任何子网,则无法启用负载平衡。

请注意,正确的运行状况检查路径的配置是正确平衡请求的关键,正如您在问题中提到的那样。

在负载均衡的环境中,Elastic Load Balancing 每 10 秒向环境中的每个实例发送一个请求,以确认实例是否健康。默认情况下,负载均衡器配置为在端口 80 上打开 TCP 连接。如果实例确认连接,则认为它是健康的。

您可以选择通过在应用程序中指定现有资源来覆盖此设置。如果您指定路径,例如 /health,则健康检查 URL 设置为 HTTP:80/health。运行状况检查 URL 应设置为始终由您的应用程序提供的路径。如果将其设置为由应用程序前面的 Web 服务器提供或缓存的静态页面,则运行状况检查不会显示应用程序服务器或 Web 容器的问题。

编辑:如果您正在寻找粘性会话,正如我在评论中所述,请按照本指南中提供的步骤操作:

使用控制台启用粘性会话

  1. 在https://console.aws.amazon.com/ec2/打开 Amazon EC2 控制台。

  2. 在导航窗格的负载平衡下,选择目标组。

  3. 选择目标群体。

  4. 在描述选项卡上,选择编辑属性。

  5. 在编辑属性页面上,执行以下操作:

一个。选择启用负载均衡器生成的 cookie 粘性。

湾。对于粘性持续时间,指定一个介于 1 秒和 7 天之间的值。

C。选择保存。

于 2019-02-22T19:16:17.817 回答