0Pricing
AWS Solutions Architect · 课时

目标组与运行状况检查

将 EC2 实例、IP 地址或 Lambda 函数注册为目标,并配置运行状况检查路径、阈值和间隔。

目标组与运行状况检查 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。

什么是目标组

目标组是负载均衡器将请求路由到的目标逻辑集合。每个目标组都有目标类型、协议/端口和运行状况检查配置。负载均衡器会将请求分配给目标组中通过运行状况检查的已注册目标。

目标组通过监听器规则与负载均衡器监听器关联。一个监听器可以根据请求属性将流量路由到多个目标组。这是 ALB 实现基于路径和基于主机路由的核心机制。

# Create a target group for an ALB
aws elbv2 create-target-group \
  --name my-web-targets \
  --protocol HTTP \
  --port 80 \
  --vpc-id vpc-12345678 \
  --target-type instance \
  --health-check-path /health \
  --health-check-interval-seconds 30

目标类型:实例、IP、Lambda

目标组支持三种目标类型:

  • instance:通过实例 ID 将流量路由到 EC2 实例;负载均衡器会通过实例的主网络接口,将流量发送到指定端口
  • ip:将流量路由到私有 IP 地址;适用于容器中的目标(ECS/EKS)、通过 VPN/Direct Connect 可访问的本地服务器,或 EC2 实例的辅助 IP
  • lambda:将流量路由到单个 Lambda 函数(仅 ALB 支持);ALB 会将 HTTP 请求转换为 JSON 事件,并同步调用该函数

对于使用 awsvpc 网络模式的 ECS 任务(每个任务都有自己的 IP)、EKS Pod 以及包含本地目标的混合架构,必须使用 IP 目标类型。

注册目标

您可以手动(在控制台或 CLI 中)或自动(通过附加 Auto Scaling Group 或配置 ECS 服务)将目标注册到目标组中。手动注册的目标会一直保留在组中,直到您明确将其取消注册。

对于 ASG,您可以将 ASG 附加到目标组,ASG 会自动注册新启动的实例,并取消注册已终止的实例。这种与 ASG 的紧密集成是弹性计算层的标准模式——新实例上线并通过健康检查后,就会立即开始接收流量。

# Register EC2 instances with a target group
aws elbv2 register-targets \
  --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
  --targets Id=i-1234567890abcdef0 Id=i-0987654321fedcba0

# Register IP targets (for containers/ECS awsvpc)
aws elbv2 register-targets \
  --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-ip-targets/def456 \
  --targets Id=10.0.0.5,Port=8080 Id=10.0.0.6,Port=8080

健康检查配置

每个目标组都有一个关联的健康检查,负载均衡器通过它来判断目标是否健康,以及是否符合接收流量的条件。健康检查会定期向每个目标发送请求,并评估响应:

  • Protocol:HTTP、HTTPS 或 TCP(适用于 NLB)
  • 路径:要请求的 URL 路径(例如 /health 或 /ping)
  • Port:要检查的端口(默认为目标组端口)
  • 健康阈值:标记为健康前所需的连续成功次数
  • 不健康阈值:标记为不健康前所需的连续失败次数
  • 间隔:两次健康检查之间的秒数(5–300)
  • 超时时间:等待响应的秒数

健康检查成功代码

对于 HTTP/HTTPS 健康检查,您需要指定哪些 HTTP 响应代码表示目标健康。默认值为 200,但您可以配置 200-299 这样的范围,或配置 200,301,302 这样的逗号分隔值。

最佳实践:在应用程序中创建专用的 /health 端点,只有在所有关键依赖项(数据库连接、缓存、下游服务)都可用时才返回 200。如果根 URL(/)会执行耗时操作或要求身份验证,请不要将其用作健康检查路径。

# Modify health check to accept 200-299
aws elbv2 modify-target-group \
  --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
  --health-check-path /health \
  --matcher HttpCode=200-299 \
  --healthy-threshold-count 2 \
  --unhealthy-threshold-count 3 \
  --health-check-interval-seconds 15

目标状态:初始、健康、不健康

目标注册后会依次经历以下状态:

  • 初始:ELB 正在执行首次健康检查
  • 健康:已通过所需次数的连续健康检查;会接收流量
  • 不健康:未通过所需次数的连续健康检查;已从轮询中移除
  • 排空中:正在进行取消注册;允许现有连接完成,但不会发送新连接
  • 未使用:已注册到组中,但当前没有监听器规则将流量路由到该组

请监控 UnHealthyHostCount 和 HealthyHostCount CloudWatch 指标,以检测目标集群中的问题。

取消注册延迟(连接排空)

取消注册延迟(以前称为连接排空)是 ELB 等待现有连接完成后,最终取消目标注册所需的时间。默认值为300 秒(5 分钟)。在此期间,不会向正在取消注册的目标发送新请求,但允许正在处理的请求完成。

对于快速部署和自动扩缩容终止,如果您的应用程序能够快速处理请求,可以考虑将此时间缩短到 30–60 秒。对于长时间运行的操作(文件上传、视频处理),应将时间保持得足够长,以便这些操作能够不受中断地完成。

# Reduce deregistration delay to 30 seconds
aws elbv2 modify-target-group-attributes \
  --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-web-targets/abc123 \
  --attributes Key=deregistration_delay.timeout_seconds,Value=30

负载均衡算法

目标组支持不同的负载均衡算法:

  • 轮询(ALB 默认值):按轮次均匀分配请求——适用于所有目标性能相当的情况
  • 最少未完成请求(ALB):将每个新请求发送到当前正在处理的请求数最少的目标——更适合工作负载长度不一、部分请求耗时更长的情况
  • 流哈希(NLB):根据协议、源/目标 IP、源/目标端口和 TCP 序列号进行分配——确保 TCP/UDP 流中的所有数据包都发送到同一目标

对于基于会话的应用程序,如果用户的所有请求都必须到达同一目标,请启用粘性会话,而不要依赖轮询分配。

多个目标组与加权路由

单个 ALB 监听器规则可以通过加权目标组在多个目标组之间分配流量。例如,在蓝绿部署中,可以将 90% 的流量路由到稳定目标组,将 10% 的流量路由到金丝雀目标组,而无需使用 Route 53 加权路由。

加权目标组在监听器规则级别进行配置。权重表示相对比例:90/10 表示将 90% 的流量发送到第一个组,将 10% 的流量发送到第二个组。这与跨多个 ALB 的加权路由不同;这里的分配发生在单个 ALB 监听器规则内部。

目标组与 ECS 集成

在 ALB 后部署 ECS 服务时,每个 ECS 任务都会使用IP 目标类型注册到 ALB 目标组(适用于 awsvpc 网络模式)。ECS 服务会自动管理注册和取消注册:新任务通过健康检查后会被注册,停止任务则会在终止前触发取消注册延迟。

每个 ECS 服务都可以使用特定的端口覆盖值进行注册,因此多个 ECS 服务可以通过不同的监听器规则(基于路径或基于主机)和不同的目标组共享一个 ALB——这是常见的微服务模式。

NLB 健康检查

NLB 的健康检查行为与 ALB 不同:

  • NLB 支持 TCP、HTTP 和 HTTPS 健康检查协议,与监听器协议无关
  • NLB 健康检查会从每个 AZ 中 NLB 的 IP 地址发出——请确保安全组允许来自 NLB 子网 IP 的流量,或使用 NLB 本身的安全组
  • 对于 TCP 健康检查,如果目标接受指定端口上的 TCP 连接,NLB 就会认为该目标健康
  • 未通过健康检查的 NLB 目标会按 AZ 移除——如果某个 AZ 中的所有目标都不健康,在启用跨区域 LB 的情况下,NLB 可能会跨区域将流量均衡到其他 AZ 中的健康目标

快速检查

请测试您对本课 AWS 解决方案架构师(SAA-C03)概念的理解。

课程回顾

本课中您学到了:目标组包含已注册且健康的目标,目标类型可以是实例、IP 或 Lambda;健康检查会定期探测目标,将不健康的目标从轮询中移除;取消注册延迟可确保正在处理的请求得到优雅排空,然后再移除目标。接下来,我们将学习 ALB 上的监听器规则和基于路径的路由。

常见问题解答

「目标组与运行状况检查」课时是免费的吗?

是的 — 「目标组与运行状况检查」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。

「目标组与运行状况检查」这节课中我会学到什么?

将 EC2 实例、IP 地址或 Lambda 函数注册为目标,并配置运行状况检查路径、阈值和间隔。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AWS Solutions Architect 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「目标组与运行状况检查」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AWS Solutions Architect 课中编写并运行代码吗?

能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. ALB、NLB 与 GLB:如何选择
  2. 目标组与运行状况检查
  3. 监听器规则与基于路径的路由
  4. SSL 终止与粘性会话
← 返回 AWS Solutions Architect