You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用AWS网络负载均衡器(NLB)监控两个应用负载均衡器(ALB)并将流量路由到活跃的ALB?

如何利用AWS网络负载均衡器(NLB)监控两个应用负载均衡器(ALB)并将流量路由到活跃的ALB?

嘿,我看了你碰到的这些问题,确实NLB的配置逻辑和ALB有不少差异,咱们一步步捋清楚怎么解决这个需求。

首先先明确你当前遇到的核心限制:

  • NLB的Listener仅支持TCP/UDP/TLS协议,不像ALB那样能配置HTTP/HTTPS规则
  • NLB Listener没法设置多规则、权重优先级这类配置,只能绑定一个默认动作
  • 你误以为类型为ALB的目标组不能添加多个ALB,其实这是个误解哦

针对你“让NLB只把流量转发到健康ALB”的需求,其实有个更直接的方案,不用折腾两个Listener,咱们来拆解下:

正确的配置思路

核心是用单个目标组容纳两个ALB,借助目标组的健康检查自动剔除不健康实例,具体步骤如下:

步骤1:创建一个类型为ALB的目标组,加入两个ALB

AWS允许将多个同VPC(或符合跨VPC条件)的ALB添加到同一个NLB目标组里,你之前可能是Terraform配置的问题导致没成功。这个目标组的作用就是统一监控两个ALB的健康状态。

步骤2:配置目标组的健康检查

这里的健康检查是NLB用来判断ALB是否正常服务的依据,你需要根据实际业务调整配置:比如指定健康检查的协议(HTTP/HTTPS)、端口、健康检查路径(比如/health这类业务健康端点),确保能准确反映ALB的运行状态。

步骤3:给NLB配置单个Listener,默认转发到这个目标组

NLB的目标组会自动将不健康的ALB从转发列表中移除,只要有一个ALB健康,流量就只会流向它;如果两个都健康,NLB会按默认的轮询策略分发流量(不过你需求是只路由到活跃的,只要健康检查配置准确,故障时会自动切换)。

给你贴一段Terraform的示例代码,方便你参考:

# 创建容纳两个ALB的目标组
resource "aws_lb_target_group" "alb_target_group" {
  name     = "multi-alb-target-group"
  port     = 80
  protocol = "TCP"
  vpc_id   = var.your_vpc_id
  target_type = "alb"

  # 健康检查配置,按需调整
  health_check {
    protocol = "HTTP"
    port     = "traffic-port"
    path     = "/health"
    interval = 30
    timeout  = 5
    healthy_threshold   = 2
    unhealthy_threshold = 2
  }
}

# 将第一个ALB加入目标组
resource "aws_lb_target_group_attachment" "alb1_attach" {
  target_group_arn = aws_lb_target_group.alb_target_group.arn
  target_id        = aws_lb.your_alb1.arn
  port             = 80
}

# 将第二个ALB加入目标组
resource "aws_lb_target_group_attachment" "alb2_attach" {
  target_group_arn = aws_lb_target_group.alb_target_group.arn
  target_id        = aws_lb.your_alb2.arn
  port             = 80
}

# 配置NLB的Listener,默认转发到目标组
resource "aws_lb_listener" "nlb_main_listener" {
  load_balancer_arn = aws_lb.your_nlb.arn
  port              = "80"
  protocol          = "TCP"

  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.alb_target_group.arn
  }
}

额外注意细节

  • NLB的健康检查和ALB自身的健康检查是独立的,要确保NLB的健康检查路径能真实反映ALB的服务状态(比如如果ALB后端所有实例都挂了,ALB的健康端点应该返回失败,这样NLB才会把它标记为不健康)
  • 如果你的ALB用的是HTTPS,那NLB的Listener要改成TLS协议,目标组的协议也对应调整,同时配置好证书

至于你之前想的“创建第二个Listener”的方案,其实不可行:如果两个Listener监听同一个端口,NLB会直接报错;如果监听不同端口,用户还要区分端口访问,完全不符合你“单一入口自动路由”的需求。

备注:内容来源于stack exchange,提问作者jshizzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:43:04