AWS ELB 负载均衡实战:ALB vs NLB 选型、配置与省钱完整教程(2026最新版)
Meta Description: AWS ELB负载均衡实战教程:Application Load Balancer与Network Load Balancer选型对比、Target Group配置、健康检查调优、SSL证书部署、GCLB定价详解,附ALB vs NLB价格对比表与常见问题FAQ。
- 为什么你需要AWS ELB?
- ALB vs NLB 深度对比:选哪个?
- ALB实战:从零创建负载均衡器
- NLB实战:高性能TCP负载均衡
- 健康检查配置:自动故障转移的关键
- SSL/TLS证书部署:免费HTTPS
- Cross-Zone Load Balancing:跨可用区均衡
- ELB与其他AWS服务的集成
Meta Description: AWS ELB负载均衡实战教程:Application Load Balancer与Network Load Balancer选型对比、Target Group配置、健康检查调优、SSL证书部署、GCLB定价详解,附ALB vs NLB价格对比表与常见问题FAQ。
关键词: AWS ELB、ALB负载均衡、NLB负载均衡、AWS负载均衡教程、Target Group、AWS健康检查、ALB vs NLB、AWS SSL证书、AWS弹性负载均衡
一、为什么你需要AWS ELB?
当你的应用跑在多台EC2实例上时,用户请求应该由谁来分发?手动DNS轮询?自己搭Nginx反向代理?这些方案在小规模下能用,但一旦涉及健康检查、SSL终结、自动故障转移,就会变得脆弱且难以维护。AWS ELB(Elastic Load Balancing)是AWS官方的负载均衡服务,帮你解决这些问题:自动分发流量、检测后端故障、终止SSL、支持跨可用区部署。
决策口诀:HTTP/HTTPS选ALB,TCP/UDP高性能选NLB,gRPC选ALB。 90%的Web应用用ALB就够了。
AWS ELB目前有两个主力产品:
| 负载均衡器 | 全称 | 工作层级 | 核心优势 | 适用场景 |
|---|---|---|---|---|
| ALB | Application Load Balancer | L7(应用层) | 路径路由、主机路由、HTTP头部匹配、gRPC支持 | Web应用、微服务、HTTP API |
| NLB | Network Load Balancer | L4(传输层) | 超低延迟(毫秒级)、百万级TPS、静态IP | 游戏服务器、IoT、金融交易、TCP/UDP应用 |
老一代的Classic Load Balancer(CLB)仍在运行但不再推荐新创建,本文不展开。
二、ALB vs NLB 深度对比:选哪个?
选错负载均衡器意味着要么多花钱,要么性能不够。下面是全方位对比:
| 对比维度 | ALB | NLB |
|---|---|---|
| 工作层级 | L7(HTTP/HTTPS/gRPC) | L4(TCP/UDP/TLS) |
| 延迟 | 通常 1-5ms | 通常 <1ms |
| 最大吞吐 | 数万RPS | 百万级RPS |
| SSL终结 | ✅ 支持,免费ACM证书 | ✅ 支持 |
| WebSocket | ✅ 原生支持 | ✅ 透传 |
| gRPC | ✅ 支持 | ❌ 不支持 |
| 路径路由 | ✅ /api/ → 后端A, / → 后端B | ❌ 不支持 |
| 主机路由 | ✅ api.example.com → 后端A | ❌ 不支持 |
| 固定IP | ❌ 无(用Global Accelerator可获取) | ✅ 每个可用区一个弹性IP |
| 源IP保留 | ❌ 通过X-Forwarded-For获取 | ✅ 直接保留客户端IP |
| 静态IP数量 | 0 | 每AZ一个(最多16个AZ) |
| 适用协议 | HTTP, HTTPS, gRPC, WebSocket | TCP, UDP, TLS |
| 连接耗尽 | 默认300秒 | 可配置(无限制模式) |
| 价格模式 | LCU按需计费 | 按小时+按流量 |
| 免费套餐 | ❌ 无免费额度 | ❌ 无免费额度 |
2.1 ALB定价详解
ALB按负载均衡器小时数+LCU(Load Balancer Capacity Units)计费:
| 费用项 | us-east-1 价格 | 说明 |
|---|---|---|
| 负载均衡器小时数 | $0.0225/小时(≈$16.2/月) | 每个ALB固定费用 |
| LCU费用 | $0.008/LCU/小时 | 按最高LCU使用量计费 |
| 数据处理费 | $0.008/GB | 前100TB/月 |
LCU是衡量ALB负载的综合指标,取以下四项的最大值:新建连接数、活跃连接数、数据处理量、规则评估次数。对于中小型网站(日均1万PV以下),LCU费用通常在$1-5/月。
2.2 NLB定价详解
NLB按固定小时费+数据处理费计费,无LCU概念:
| 费用项 | us-east-1 价格 | 说明 |
|---|---|---|
| 负载均衡器小时数 | $0.0225/小时(≈$16.2/月) | 每个NLB固定费用 |
| 数据处理费(TCP/UDP/TLS) | $0.006/GB | 每GB流量费 |
| 数据处理费(LCU) | $0.006/LCU/小时 | 按最高LCU使用量计费 |
| 弹性IP | $0.005/小时/每个 | 每个AZ一个EIP,未使用也收费 |
2.3 月度成本对比表
以中等流量Web应用(日均10万PV,平均响应10KB,月传输约30TB)估算:
| 费用项 | ALB | NLB |
|---|---|---|
| 负载均衡器小时数 | $16.20 | $16.20 |
| LCU费用 | ≈$15(假设4 LCU) | $0 |
| 数据处理费 | ≈$240(30TB × $0.008) | ≈$180(30TB × $0.006) |
| 弹性IP | $0 | ≈$10.8(3 AZ × $0.005/h × 720h) |
| 月度总计 | ≈$271 | ≈$207 |
💡 NLB在大流量场景下更便宜,但缺少ALB的应用层路由能力。选型核心:功能需求优先于价格差异。
三、ALB实战:从零创建负载均衡器
3.1 前置准备
- 至少2台EC2实例在同一VPC内
- 每台实例上运行Web服务(如Nginx监听80端口)
- 实例所在安全组允许80/443入站
3.2 控制台创建ALB
步骤1:进入负载均衡器控制台
- 打开 AWS Console → EC2 → Load Balancers → Create Load Balancer
- 选择 Application Load Balancer
步骤2:基本配置
- 名称:
my-alb - 方案:Internet-facing(面向公网)或 Internal(内网)
- IP地址类型:IPv4
步骤3:网络映射
- VPC:选择你的VPC
- 映射:至少选择2个可用区(如 us-east-1a, us-east-1b)
- 每个AZ选择一个公有子网
步骤4:安全组
- 创建新安全组或选择已有安全组
- 入站规则:允许 HTTP (80) 和 HTTPS (443) 来自 0.0.0.0/0
步骤5:路由(Target Group)
- 选择"新建目标组"
- 目标类型:Instances(或 IP,用于ECS/Fargate)
- 协议/端口:HTTP:80
- VPC:选择同一VPC
- 健康检查路径:
/(根据你的应用调整)
步骤6:注册目标
- 选择你要注册的EC2实例
- 指定端口:80
步骤7:审核并创建
创建后等待1-2分钟,状态变为Active即可通过DNS名称访问。
3.3 AWS CLI创建ALB
// 创建Target Group
aws elbv2 create-target-group \
--name my-target-group \
--protocol HTTP \
--port 80 \
--vpc-id vpc-xxxxxxxx \
--health-check-path / \
--health-check-interval-seconds 30 \
--health-check-timeout-seconds 5 \
--healthy-threshold-count 3 \
--unhealthy-threshold-count 2
// 创建ALB
aws elbv2 create-load-balancer \
--name my-alb \
--type application \
--subnets subnet-aaa subnet-bbb \
--security-groups sg-xxxxxxxx
// 注册实例到Target Group
aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:...:targetgroup/my-target-group/xxx \
--targets Id=i-111111 Id=i-222222
// 创建监听器(HTTP → Target Group)
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:...:loadbalancer/app/my-alb/xxx \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/my-target-group/xxx
3.4 高级路由配置
ALB的核心能力是基于规则的路由,支持三种条件:
| 路由条件 | 示例 | 用途 |
|---|---|---|
| 路径匹配 | /api/* → 后端A | API路由分流 |
| 主机匹配 | api.example.com → 后端B | 多域名分发 |
| HTTP头部 | X-Debug: true → 后端C | 灰度发布/调试路由 |
控制台配置路径路由示例:
- 进入ALB → Listeners → 点击HTTP:80的"View/Edit rules"
- 点击"+"添加规则
- 添加条件:Path is
/api/* - 添加动作:Forward to
api-target-group - 保存
四、NLB实战:高性能TCP负载均衡
4.1 NLB创建要点
NLB创建流程与ALB类似,但有关键区别:
- IP地址类型:选择 IPv4(默认会分配弹性IP)
- 跨可用区:NLB默认跨AZ,但客户端连接固定到一个AZ(延迟更低)
- Target Group协议:支持TCP、UDP、TLS、TCP_UDP
- 目标类型:推荐IP类型(适用于ECS/Fargate容器场景)
4.2 NLB + EIP固定IP
NLB的一大优势是每个AZ分配一个弹性IP,适合需要固定IP的场景(如银行回调、第三方API白名单):
// 创建NLB
aws elbv2 create-load-balancer \
--name my-nlb \
--type network \
--subnets subnet-aaa subnet-bbb
// 查看分配的EIP
aws elbv2 describe-load-balancers \
--load-balancer-arns arn:aws:elasticloadbalancing:...:loadbalancer/net/my-nlb/xxx \
--query 'LoadBalancers[0].AvailabilityMappings'
4.3 NLB + TLS终止
NLB支持TLS终止,将HTTPS解密后的TCP流量转发到后端:
// 创建TLS监听器(443端口)
aws elbv2 create-listener \
--load-balancer-arn arn:aws:...:loadbalancer/net/my-nlb/xxx \
--protocol TLS \
--port 443 \
--certificates CertificateArn=arn:aws:acm:...:certificate/xxx \
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
--default-actions Type=forward,TargetGroupArn=arn:aws:...:targetgroup/my-tg/xxx
五、健康检查配置:自动故障转移的关键
健康检查是负载均衡器的核心机制——检测后端实例是否健康,自动摘除故障节点。
5.1 健康检查参数详解
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 协议 | HTTP(ALB)/ TCP(NLB) | ALB可检查HTTP状态码 |
| 路径 | /health 或 / | 返回200即健康 |
| 端口 | traffic-port 或自定义 | 一般用默认流量端口 |
| 间隔 | 30秒 | 默认值,高可用场景可调到15秒 |
| 超时 | 5秒 | 实例在5秒内未响应视为不健康 |
| 成功阈值 | 2-3次 | 连续N次健康才标记为可用 |
| 失败阈值 | 2次 | 连续N次不健康才摘除 |
| 成功码 | 200 | 默认值 |
5.2 CLI配置健康检查
// 修改Target Group健康检查
aws elbv2 modify-target-group \
--target-group-arn arn:aws:...:targetgroup/my-tg/xxx \
--health-check-path /health \
--health-check-interval-seconds 15 \
--health-check-timeout-seconds 5 \
--healthy-threshold-count 2 \
--unhealthy-threshold-count 2 \
--matcher HttpCode=200
5.3 健康检查常见坑
坑1:健康检查路径返回非200状态码
如果你的 /health 端点在数据库断连时返回503,ELB会持续摘除实例。确保健康检查端点只检查应用本身是否运行,不检查依赖服务。
坑2:超时时间太短导致误摘 如果应用启动或处理请求偶尔超过5秒,会频繁被标记不健康。调大超时或增大失败阈值。
坑3:忘记修改安全组
ELB健康检查的源IP是网段级别的(10.0.0.0/8等),安全组需要允许ELB健康检查流量通过。
六、SSL/TLS证书部署:免费HTTPS
6.1 使用ACM免费证书
AWS Certificate Manager(ACM)提供免费SSL证书,且自动续期:
// 申请证书
aws acm request-certificate \
--domain-name "*.example.com" \
--subject-alternative-names "example.com" \
--validation-method DNS
// 验证后,关联到ALB监听器
aws elbv2 create-listener \
--load-balancer-arn arn:aws:...:loadbalancer/app/my-alb/xxx \
--protocol HTTPS \
--port 443 \
--certificates CertificateArn=arn:aws:acm:...:certificate/xxx \
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
--default-actions Type=forward,TargetGroupArn=arn:aws:...:targetgroup/my-tg/xxx
// HTTP重定向到HTTPS
aws elbv2 create-listener \
--load-balancer-arn arn:aws:...:loadbalancer/app/my-alb/xxx \
--protocol HTTP \
--port 80 \
--default-actions Type=redirect,RedirectConfig='{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}'
6.2 SSL策略选择
AWS提供多种SSL策略,推荐使用TLS 1.3:
| SSL策略 | 支持TLS版本 | 推荐度 |
|---|---|---|
| ELBSecurityPolicy-TLS13-1-2-2021-06 | TLS 1.3 + 1.2 | ⭐⭐⭐⭐⭐ 最新最安全 |
| ELBSecurityPolicy-TLS13-1-2-Res-2021-06 | TLS 1.3 + 1.2(严格) | ⭐⭐⭐⭐ 高安全要求 |
| ELBSecurityPolicy-2016-08 | TLS 1.2 + 1.1 + 1.0 | ⭐⭐ 兼容老客户端 |
| ELBSecurityPolicy-FS-2016-08 | 仅前向保密 | ⭐⭐⭐ 中等安全 |
七、Cross-Zone Load Balancing:跨可用区均衡
7.1 什么是跨可用区均衡
默认情况下,NLB将流量均衡到同一AZ内的目标。跨可用区均衡会将流量分发到所有AZ的所有目标。
| 模式 | ALB | NLB |
|---|---|---|
| 默认行为 | ✅ 自动跨AZ | ❌ 仅同AZ |
| 可配置 | N/A | 可开启 |
| 费用影响 | 无额外费用 | 每个跨AZ数据传输$0.01/GB |
7.2 何时开启/关闭
- ALB:始终跨AZ,无需配置
- NLB:如果各AZ实例数相同,关闭跨AZ可避免额外费用;如果实例数不均,开启跨AZ能避免单AZ过载
// 查看NLB跨AZ状态
aws elbv2 describe-load-balancer-attributes \
--load-balancer-arn arn:aws:...:loadbalancer/net/my-nlb/xxx
// 开启/关闭
aws elbv2 modify-load-balancer-attributes \
--load-balancer-arn arn:aws:...:loadbalancer/net/my-nlb/xxx \
--attributes Key=load_balancing.cross_zone.enabled,Value=true
八、ELB与其他AWS服务的集成
| 集成服务 | 用途 | 典型场景 |
|---|---|---|
| Auto Scaling | 实例数随流量自动增减 | 配合ALB,高峰期自动扩容 |
| ACM | 免费SSL证书 | HTTPS监听器 |
| Route 53 | DNS将域名指向ELB | 域名解析到负载均衡器 |
| CloudWatch | 监控ELB指标 | 5XX错误率、请求延迟告警 |
| WAF | Web应用防火墙 | ALB关联WAF规则 |
| Global Accelerator | 全球加速 | NLB获得Anycast IP,全球低延迟 |
| ECS/EKS | 容器服务 | Target Group支持IP目标类型 |
8.1 Auto Scaling + ALB联动
// 创建Auto Scaling Group关联Target Group
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-template LaunchTemplateName=my-lt \
--min-size 2 \
--max-size 10 \
--target-group-arns arn:aws:...:targetgroup/my-tg/xxx \
--vpc-zone-identifier "subnet-aaa,subnet-bbb"
// 配置目标追踪伸缩策略(基于ALB请求计数)
aws autoscaling put-scaling-policy \
--auto-scaling-group-name my-asg \
--policy-name alb-request-count \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ALBRequestCountPerTarget",
"ResourceLabel": "app/my-alb/xxx/targetgroup/my-tg/xxx"
},
"TargetValue": 1000.0
}'
九、ELB监控与故障排查
9.1 关键CloudWatch指标
| 指标 | 含义 | 告警阈值建议 |
|---|---|---|
| HealthyHostCount | 健康目标数 | < 预期数的50% |
| UnHealthyHostCount | 不健康目标数 | > 0 持续5分钟 |
| HTTPCode_Target_5XX_Count | 后端5XX错误数 | > 总请求的1% |
| TargetResponseTime | 后端响应时间 | > 2秒 |
| ActiveConnectionCount | 活跃连接数 | 根据基线设定 |
| RequestCount | 总请求数 | 监控异常飙升 |
9.2 常见错误排查
502 Bad Gateway:后端实例崩溃或健康检查失败,确认后端服务运行中且端口正确。
504 Gateway Timeout:后端响应超过ELB超时时间(默认60秒),增大ELB超时或优化后端响应。
连接超时:安全组未放行ELB到后端的流量,检查安全组规则。
十、ELB最佳实践与省钱技巧
| 技巧 | 说明 |
|---|---|
| 用ACM免费证书 | 别买第三方证书,ACM完全免费且自动续期 |
| HTTP重定向HTTPS | 用ELB 301重定向,不用后端处理 |
| 合理设置健康检查间隔 | 不是越快越好,30秒够用,过快会增加费用 |
| NLB关闭跨AZ均衡 | 如果各AZ实例数相同,关闭可省$0.01/GB |
| 用ALB路径路由合并服务 | 一个ALB分发多个微服务,比每个服务一个ALB省16美元/月 |
| 监控LCU利用率 | ALB的LCU利用率低于50%说明选型偏大 |
| 用Global Accelerator替代NLB | 需要全球Anycast IP时,GA+NLB比纯NLB更优 |
⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。
🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。
常见问题(FAQ)
ALB和NLB可以同时使用吗?
可以。常见架构是ALB做HTTP/HTTPS入口(路径路由),NLB做TCP入口(如数据库连接、WebSocket),两者独立运行在同一VPC内。
一个ELB最多连接多少后端实例?
ALB默认最多注册500个目标,NLB默认最多300个目标。可通过Target Group属性调大(ALB最大1000,NLB最大5000)。
ELB会改变客户端IP吗?
ALB会,原始IP通过 X-Forwarded-For 头传递。NLB默认保留原始IP(源地址透传)。
ELB有免费套餐吗?
没有。ELB按小时+流量收费,无免费额度。但ACM证书和CloudWatch基础监控是免费的。
如何将现有Nginx反向代理迁移到ELB?
步骤:(1) 创建Target Group并注册所有后端实例;(2) 创建ALB,配置与Nginx相同的路由规则;(3) 将域名DNS指向ALB DNS名称;(4) 验证流量正常后下线Nginx。
NLB的固定IP会变吗?
正常情况下不会变。但如果你删除NLB再重建,EIP会重新分配。建议将EIP与NLB关联而非手动管理。
📖 延伸阅读:AWS EC2选购教程 | AWS VPC网络实战 | AWS ECS Fargate容器实战
本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多