AWS 负载均衡器新手指南
本文档面向 AWS 新手,简明扼要地介绍 AWS 提供的负载均衡服务,帮助您快速理解各类负载均衡器的应用场景、基本概念、使用方法和费用计算方式。
适用对象: AWS 初学者、解决方案架构师、运维工程师
1. AWS 负载均衡器类型概览
Section titled “1. AWS 负载均衡器类型概览”AWS 提供四种负载均衡器,各有不同的应用场景:
| 类型 | 全称 | OSI 层级 | 主要用途 | 推荐场景 |
|---|---|---|---|---|
| ALB | Application Load Balancer | Layer 7 (应用层) | HTTP/HTTPS 流量 | Web 应用、微服务 |
| NLB | Network Load Balancer | Layer 4 (传输层) | TCP/UDP/TLS 流量 | 高性能、低延迟需求 |
| GLB | Gateway Load Balancer | Layer 3 (网络层) | 第三方虚拟设备 | 防火墙、IDS/IPS |
| CLB | Classic Load Balancer | Layer 4/7 | 传统应用 | 不推荐新项目使用 |
选择建议:
- 95% 的 Web 应用选择 ALB
- 需要极致性能或非 HTTP 协议选择 NLB
- 新项目不要使用 CLB(遗留产品)
2. Application Load Balancer (ALB)
Section titled “2. Application Load Balancer (ALB)”2.1 什么是 ALB?
Section titled “2.1 什么是 ALB?”ALB 是最常用的负载均衡器,工作在应用层(HTTP/HTTPS),能够根据请求内容(URL、Header、方法等)进行智能路由。
2.2 核心概念
Section titled “2.2 核心概念”监听器 (Listener)
- 监听指定端口的传入连接(如 80、443)
- 可配置多个监听器
目标组 (Target Group)
- 一组接收流量的后端资源(EC2、容器、Lambda、IP)
- 每个目标组有独立的健康检查配置
规则 (Rule)
- 根据条件将流量路由到不同目标组
- 支持基于路径、主机名、HTTP 头等条件
graph LR
Client[客户端] --> ALB[Application Load Balancer]
ALB --> |/api/*| TG1[目标组 1<br/>API 服务器]
ALB --> |/web/*| TG2[目标组 2<br/>Web 服务器]
ALB --> |/admin/*| TG3[目标组 3<br/>管理后台]
TG1 --> EC2_1[EC2 实例 1]
TG1 --> EC2_2[EC2 实例 2]
TG2 --> EC2_3[EC2 实例 3]
TG2 --> EC2_4[EC2 实例 4]
2.3 典型应用场景
Section titled “2.3 典型应用场景”场景 1:基于路径的路由
example.com/api/* → API 服务器example.com/images/* → 图片服务器example.com/* → Web 服务器场景 2:微服务架构
api.example.com/users/* → 用户服务api.example.com/orders/* → 订单服务api.example.com/products/* → 产品服务场景 3:蓝绿部署
- 10% 流量 → 新版本(绿)
- 90% 流量 → 旧版本(蓝)
- 逐步调整比例完成平滑升级
2.4 创建 ALB 的基本步骤
Section titled “2.4 创建 ALB 的基本步骤”通过 AWS Console:
-
创建负载均衡器
- 服务 → EC2 → 负载均衡器 → 创建
- 选择 “Application Load Balancer”
-
基本配置
- 名称:my-alb
- 方案:面向 Internet 或内部
- IP 地址类型:IPv4 或双栈
-
网络配置
- 选择 VPC
- 选择至少 2 个可用区的子网
-
安全组
- 允许入站流量(如 HTTP 80、HTTPS 443)
-
配置监听器
- HTTP: 80 → 转发至目标组
- HTTPS: 443 → 转发至目标组(需要 SSL 证书)
-
创建目标组
- 目标类型:实例、IP、Lambda
- 协议:HTTP/HTTPS
- 健康检查路径:/health
-
注册目标
- 选择 EC2 实例
- 指定端口
通过 AWS CLI:
# 创建 ALBaws elbv2 create-load-balancer \ --name my-alb \ --subnets subnet-12345 subnet-67890 \ --security-groups sg-12345
# 创建目标组aws elbv2 create-target-group \ --name my-targets \ --protocol HTTP \ --port 80 \ --vpc-id vpc-12345 \ --health-check-path /health
# 注册目标aws elbv2 register-targets \ --target-group-arn arn:aws:elasticloadbalancing:... \ --targets Id=i-12345,Port=80 Id=i-67890,Port=80
# 创建监听器aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:... \ --protocol HTTP \ --port 80 \ --default-actions Type=forward,TargetGroupArn=arn:aws:...2.5 ALB 费用计算
Section titled “2.5 ALB 费用计算”计费项:
-
按小时计费
- 每个 ALB 每小时:$0.0225(us-east-1)
-
按 LCU (Load Balancer Capacity Unit) 计费
- 每 LCU 每小时:$0.008
- 1 LCU = 以下任一达到上限:
- 25 新连接/秒
- 3,000 活跃连接/分钟
- 1 GB/小时 (EC2/容器)
- 0.4 GB/小时 (Lambda)
- 1,000 规则评估/秒
费用示例(us-east-1):
| 场景 | ALB 小时费 | LCU 费用 | 月度总成本 |
|---|---|---|---|
| 小型网站 (5 LCU) | $0.0225 × 730 = $16.43 | $0.008 × 5 × 730 = $29.20 | $45.63 |
| 中型应用 (20 LCU) | $16.43 | $0.008 × 20 × 730 = $116.80 | $133.23 |
| 大型应用 (100 LCU) | $16.43 | $0.008 × 100 × 730 = $584.00 | $600.43 |
注意: 不同区域价格有差异,以上基于 US East (N. Virginia)。
3. Network Load Balancer (NLB)
Section titled “3. Network Load Balancer (NLB)”3.1 什么是 NLB?
Section titled “3.1 什么是 NLB?”NLB 工作在传输层(TCP/UDP),性能极高(每秒百万请求),延迟极低(微秒级),保留客户端源 IP。
3.2 核心特点
Section titled “3.2 核心特点”- 超高性能:处理突发流量和百万级并发
- 静态 IP:每个可用区分配固定 IP(可绑定 EIP)
- 源 IP 保留:后端可以看到真实客户端 IP
- 协议支持:TCP、UDP、TLS
graph TB
Client[客户端<br/>IP: 1.2.3.4] -->|TCP 连接| NLB[Network Load Balancer<br/>静态 IP: 54.1.2.3]
NLB -->|保留源 IP| EC2_1[EC2 实例 1<br/>看到源 IP: 1.2.3.4]
NLB -->|保留源 IP| EC2_2[EC2 实例 2<br/>看到源 IP: 1.2.3.4]
3.3 典型应用场景
Section titled “3.3 典型应用场景”场景 1:游戏服务器
- 需要 UDP 协议
- 要求极低延迟
- 需要保留客户端 IP 做防作弊
场景 2:高性能数据库代理
- MySQL、PostgreSQL、Redis 等 TCP 连接
- 需要客户端 IP 白名单
- 流量突发大(如活动期间)
场景 3:需要静态 IP 的场景
- 客户防火墙只能白名单 IP(不能用域名)
- 第三方 API 回调需要固定 IP
场景 4:容器服务
- ECS、EKS 的 TCP/UDP 服务暴露
3.4 创建 NLB 的基本步骤
Section titled “3.4 创建 NLB 的基本步骤”关键差异(与 ALB 对比):
-
选择负载均衡器类型时选择 “Network Load Balancer”
-
监听器配置
- 协议:TCP、UDP、TLS、TCP_UDP
- 端口:任意端口
-
目标组配置
- 协议:TCP、UDP、TLS、TCP_UDP
- 健康检查:TCP、HTTP、HTTPS
-
IP 地址设置
- 可以为每个可用区分配弹性 IP
CLI 示例:
# 创建 NLBaws elbv2 create-load-balancer \ --name my-nlb \ --type network \ --subnets subnet-12345 subnet-67890
# 创建 TCP 目标组aws elbv2 create-target-group \ --name my-tcp-targets \ --protocol TCP \ --port 3306 \ --vpc-id vpc-12345 \ --health-check-protocol TCP
# 创建监听器aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:... \ --protocol TCP \ --port 3306 \ --default-actions Type=forward,TargetGroupArn=arn:aws:...3.5 NLB 费用计算
Section titled “3.5 NLB 费用计算”计费项:
-
按小时计费
- 每个 NLB 每小时:$0.0225(us-east-1)
-
按 NLCU (Network Load Balancer Capacity Unit) 计费
- 每 NLCU 每小时:$0.006
- 1 NLCU = 以下任一达到上限:
- 800 新连接/秒 (TCP)
- 400 新连接/秒 (TLS)
- 100,000 活跃连接/分钟 (TCP)
- 50,000 活跃连接/分钟 (TLS)
- 1 GB/小时
费用示例(us-east-1):
| 场景 | NLB 小时费 | NLCU 费用 | 月度总成本 |
|---|---|---|---|
| 小型服务 (5 NLCU) | $0.0225 × 730 = $16.43 | $0.006 × 5 × 730 = $21.90 | $38.33 |
| 中型服务 (30 NLCU) | $16.43 | $0.006 × 30 × 730 = $131.40 | $147.83 |
| 大型服务 (150 NLCU) | $16.43 | $0.006 × 150 × 730 = $657.00 | $673.43 |
4. Gateway Load Balancer (GLB)
Section titled “4. Gateway Load Balancer (GLB)”4.1 什么是 GLB?
Section titled “4.1 什么是 GLB?”GLB 用于部署和管理第三方虚拟网络设备(如防火墙、IDS/IPS),工作在网络层(Layer 3)。
4.2 工作原理
Section titled “4.2 工作原理”graph LR
Internet[互联网] --> IGW[Internet Gateway]
IGW --> GWLBE[Gateway Load Balancer<br/>Endpoint]
GWLBE --> GLB[Gateway Load Balancer]
GLB --> FW1[防火墙设备 1]
GLB --> FW2[防火墙设备 2]
GLB --> FW3[防火墙设备 3]
FW1 --> GLB
GLB --> GWLBE
GWLBE --> App[应用服务器]
4.3 典型应用场景
Section titled “4.3 典型应用场景”- 部署第三方防火墙(Palo Alto、Fortinet、Check Point)
- 入侵检测/防御系统 (IDS/IPS)
- 深度包检测 (DPI)
- 流量镜像和分析
4.4 何时使用 GLB?
Section titled “4.4 何时使用 GLB?”使用 GLB:
- 需要第三方安全设备检查所有流量
- 企业合规要求使用特定安全产品
- 需要高可用的虚拟设备集群
不使用 GLB:
- 常规的应用负载均衡(使用 ALB)
- 网络负载均衡(使用 NLB)
- 简单的流量分发
4.5 GLB 费用计算
Section titled “4.5 GLB 费用计算”计费项:
-
按小时计费
- 每个 GLB 每小时:$0.0125(us-east-1)
- 每个 GLB Endpoint 每小时:$0.0125
-
按 GLCU (Gateway Load Balancer Capacity Unit) 计费
- 每 GLCU 每小时:$0.004
- 1 GLCU = 600 新连接/秒 或 60,000 活跃连接/分钟 或 1 GB/小时
费用示例(us-east-1):
| 组件 | 小时费 | 月度成本 |
|---|---|---|
| GLB (1 个) | $0.0125 | $9.13 |
| GLBE (2 个) | $0.0125 × 2 | $18.25 |
| GLCU (10 个) | $0.004 × 10 × 730 | $29.20 |
| 总计 | $56.58 |
5. Classic Load Balancer (CLB)
Section titled “5. Classic Load Balancer (CLB)”5.1 为什么不推荐?
Section titled “5.1 为什么不推荐?”CLB 是 AWS 的第一代负载均衡器,已被 ALB 和 NLB 取代。
缺点:
- 功能有限(不支持基于路径的路由)
- 不支持 WebSocket、HTTP/2
- 不支持容器、Lambda
- 费用通常更高
- AWS 不再积极开发新功能
迁移建议:
- HTTP/HTTPS 应用 → 迁移到 ALB
- TCP 应用 → 迁移到 NLB
5.2 何时使用 CLB?
Section titled “5.2 何时使用 CLB?”仅在以下情况保留 CLB:
- 维护旧系统,短期内不便迁移
- 应用依赖 EC2-Classic(已废弃的网络模式)
新项目绝不使用 CLB。
6. 负载均衡器对比
Section titled “6. 负载均衡器对比”6.1 功能对比表
Section titled “6.1 功能对比表”| 功能 | ALB | NLB | GLB | CLB |
|---|---|---|---|---|
| OSI 层级 | Layer 7 | Layer 4 | Layer 3 | Layer 4/7 |
| 协议 | HTTP, HTTPS, gRPC | TCP, UDP, TLS | IP | HTTP, HTTPS, TCP, SSL |
| WebSocket | 支持 | 支持 | 不适用 | 支持 |
| HTTP/2 | 支持 | 不支持 | 不适用 | 不支持 |
| 静态 IP | 不支持 | 支持 | 支持 | 不支持 |
| 保留源 IP | 通过 X-Forwarded-For | 原生支持 | 原生支持 | 通过 Proxy Protocol |
| 路径路由 | 支持 | 不支持 | 不支持 | 不支持 |
| 主机路由 | 支持 | 不支持 | 不支持 | 不支持 |
| Lambda 目标 | 支持 | 不支持 | 不支持 | 不支持 |
| PrivateLink | 不支持 | 支持 | 支持 | 不支持 |
| 每秒请求 | 数万 | 数百万 | 数百万 | 数千 |
| 建议使用 | Web 应用 | 高性能应用 | 安全设备 | 不推荐 |
6.2 选择决策树
Section titled “6.2 选择决策树”graph TD
Start[需要负载均衡器] --> Q1{什么类型的流量?}
Q1 -->|HTTP/HTTPS| Q2{需要高级路由?}
Q1 -->|TCP/UDP| Q3{需要静态IP?}
Q1 -->|第三方安全设备| GLB[使用 GLB]
Q2 -->|是<br/>路径/主机路由| ALB[使用 ALB]
Q2 -->|否<br/>简单转发| Q4{需要极致性能?}
Q4 -->|是| NLB[使用 NLB]
Q4 -->|否| ALB
Q3 -->|是| NLB
Q3 -->|否| Q5{需要保留源IP?}
Q5 -->|是| NLB
Q5 -->|否| Q6{需要极致性能?}
Q6 -->|是| NLB
Q6 -->|否| ALB_HTTP[ALB<br/>配置 TCP 监听器]
7. 实用配置建议
Section titled “7. 实用配置建议”7.1 健康检查最佳实践
Section titled “7.1 健康检查最佳实践”推荐配置:
健康检查设置: 协议: HTTP 路径: /health 或 /ping 端口: 应用端口 间隔: 30 秒 超时: 5 秒 健康阈值: 2 次成功 不健康阈值: 3 次失败健康检查端点要求:
- 响应时间 < 2 秒
- HTTP 状态码 200-299
- 检查依赖服务状态(数据库、缓存等)
- 轻量级检查(避免消耗大量资源)
7.2 SSL/TLS 证书配置
Section titled “7.2 SSL/TLS 证书配置”获取免费证书:
- 使用 AWS Certificate Manager (ACM)
- 申请公有证书(免费)
- 验证域名所有权(DNS 或邮件验证)
- 在负载均衡器监听器中选择证书
配置 HTTPS 监听器:
# 创建 HTTPS 监听器aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:... \ --protocol HTTPS \ --port 443 \ --certificates CertificateArn=arn:aws:acm:... \ --default-actions Type=forward,TargetGroupArn=arn:aws:...安全策略选择:
- 推荐:ELBSecurityPolicy-TLS13-1-2-2021-06
- 兼容性:ELBSecurityPolicy-2016-08(支持旧浏览器)
7.3 跨可用区负载均衡
Section titled “7.3 跨可用区负载均衡”启用跨可用区负载均衡的好处:
- 流量均匀分布到所有可用区
- 提高容错能力
- 避免单个可用区过载
费用影响:
- ALB: 默认启用,无额外费用
- NLB: 默认禁用,启用后跨可用区数据传输收费($0.01/GB)
何时启用(NLB):
- 目标分布不均衡
- 需要最大化容错能力
- 流量成本低于单可用区风险
7.4 访问日志
Section titled “7.4 访问日志”启用访问日志:
# 启用 ALB 访问日志aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn arn:aws:elasticloadbalancing:... \ --attributes \ Key=access_logs.s3.enabled,Value=true \ Key=access_logs.s3.bucket,Value=my-logs-bucket \ Key=access_logs.s3.prefix,Value=alb-logs日志包含信息:
- 客户端 IP 和端口
- 请求时间和延迟
- 请求路径和方法
- 响应状态码
- 后端目标地址
- SSL 协议版本
用途:
- 故障排查
- 安全审计
- 流量分析
- 合规要求
费用:
- 负载均衡器不收费
- S3 存储费用:$0.023/GB/月(us-east-1,标准存储)
8. 监控和告警
Section titled “8. 监控和告警”8.1 关键 CloudWatch 指标
Section titled “8.1 关键 CloudWatch 指标”ALB 关键指标:
| 指标 | 说明 | 告警阈值建议 |
|---|---|---|
| TargetResponseTime | 后端响应时间 | > 1 秒 |
| HTTPCode_Target_5XX_Count | 后端 5xx 错误 | > 10/分钟 |
| HTTPCode_ELB_5XX_Count | 负载均衡器 5xx 错误 | > 0 |
| UnHealthyHostCount | 不健康目标数量 | > 0 |
| RequestCount | 请求总数 | 用于容量规划 |
| ActiveConnectionCount | 活跃连接数 | 超过预期值 |
NLB 关键指标:
| 指标 | 说明 | 告警阈值建议 |
|---|---|---|
| UnHealthyHostCount | 不健康目标数量 | > 0 |
| ActiveFlowCount | 活跃连接数 | 超过容量规划 |
| ProcessedBytes | 处理的字节数 | 异常增长 |
| TCP_Target_Reset_Count | TCP 重置数量 | > 100/分钟 |
8.2 创建 CloudWatch 告警示例
Section titled “8.2 创建 CloudWatch 告警示例”# 创建后端 5xx 错误告警aws cloudwatch put-metric-alarm \ --alarm-name alb-high-5xx-errors \ --alarm-description "ALB 后端 5xx 错误过多" \ --metric-name HTTPCode_Target_5XX_Count \ --namespace AWS/ApplicationELB \ --statistic Sum \ --period 300 \ --evaluation-periods 2 \ --threshold 50 \ --comparison-operator GreaterThanThreshold \ --dimensions Name=LoadBalancer,Value=app/my-alb/1234567890 \ --alarm-actions arn:aws:sns:us-east-1:123456789012:my-topic
# 创建不健康目标告警aws cloudwatch put-metric-alarm \ --alarm-name alb-unhealthy-targets \ --alarm-description "ALB 存在不健康目标" \ --metric-name UnHealthyHostCount \ --namespace AWS/ApplicationELB \ --statistic Average \ --period 60 \ --evaluation-periods 1 \ --threshold 1 \ --comparison-operator GreaterThanOrEqualToThreshold \ --dimensions Name=LoadBalancer,Value=app/my-alb/1234567890 \ Name=TargetGroup,Value=targetgroup/my-targets/1234567890 \ --alarm-actions arn:aws:sns:us-east-1:123456789012:my-topic9. 常见问题和故障排查
Section titled “9. 常见问题和故障排查”9.1 目标注册失败
Section titled “9.1 目标注册失败”问题: 实例显示为 “unhealthy”
排查步骤:
-
检查安全组
- 目标实例的安全组必须允许来自负载均衡器的流量
- ALB:允许负载均衡器安全组的入站流量
- NLB:允许客户端 IP 范围(NLB 不使用安全组)
-
检查健康检查配置
- 确认健康检查路径返回 200 状态码
- 验证超时时间是否充足
- 检查端口是否正确
-
查看目标健康状态详情
aws elbv2 describe-target-health \--target-group-arn arn:aws:elasticloadbalancing:... -
测试连接
# 从负载均衡器所在子网测试curl -v http://目标IP:端口/健康检查路径
9.2 502 Bad Gateway 错误
Section titled “9.2 502 Bad Gateway 错误”可能原因:
-
后端应用未运行或崩溃
- 登录 EC2 检查应用状态
- 查看应用日志
-
安全组配置错误
- 确认目标实例安全组允许流量
-
健康检查失败
- 所有目标都不健康
- 负载均衡器无可用目标
-
目标超时
- 后端响应时间超过负载均衡器超时设置
- 增加空闲超时时间
-
连接被后端拒绝
- 检查防火墙规则
- 验证应用监听正确端口
9.3 504 Gateway Timeout 错误
Section titled “9.3 504 Gateway Timeout 错误”可能原因:
-
后端响应过慢
- 优化应用性能
- 增加后端实例数量
-
负载均衡器超时设置过短
- ALB 默认 60 秒,可调整到 1-4000 秒
aws elbv2 modify-load-balancer-attributes \--load-balancer-arn arn:aws:elasticloadbalancing:... \--attributes Key=idle_timeout.timeout_seconds,Value=300 -
后端数据库查询慢
- 优化数据库查询
- 添加缓存层
9.4 流量分布不均
Section titled “9.4 流量分布不均”ALB 场景:
- ALB 默认使用轮询算法,应该是均衡的
- 检查是否启用了粘性会话(Sticky Sessions)
- 长连接可能导致不均衡(如 WebSocket)
NLB 场景:
- NLB 使用流哈希算法(五元组:源IP、源端口、目标IP、目标端口、协议)
- 来自相同客户端的连接会路由到同一目标
- 启用跨可用区负载均衡可改善分布
解决方案:
- 确保目标健康且权重相同
- 对于 NLB,启用跨可用区负载均衡
- 监控 CloudWatch 指标确认流量分布
9.5 无法访问负载均衡器
Section titled “9.5 无法访问负载均衡器”排查步骤:
-
检查负载均衡器方案
- Internet-facing:需要公有子网
- Internal:只能从 VPC 内部访问
-
检查安全组
- 负载均衡器安全组必须允许客户端入站流量
- 通常允许 0.0.0.0/0:80 和 0.0.0.0/0:443
-
检查子网路由表
- 公有子网需要路由到 Internet Gateway
- 私有子网需要路由到 NAT Gateway(如果需要出站)
-
DNS 解析
# 检查 DNS 记录nslookup my-alb-1234567890.us-east-1.elb.amazonaws.com# 测试连接curl -v http://my-alb-1234567890.us-east-1.elb.amazonaws.com
10. 成本优化建议
Section titled “10. 成本优化建议”10.1 降低 LCU/NLCU 使用
Section titled “10.1 降低 LCU/NLCU 使用”优化策略:
-
减少规则评估次数
- ALB 中简化路由规则
- 合并相似的规则
- 使用默认操作处理通用流量
-
连接复用
- 启用 HTTP keep-alive
- 使用连接池
- 减少新连接建立
-
压缩响应
- 启用 gzip 压缩减少传输字节数
- 优化静态资源大小
-
使用 CloudFront
- 在 ALB 前加 CloudFront CDN
- 减少到达负载均衡器的请求数
- CloudFront 可缓存静态内容
10.2 选择合适的负载均衡器类型
Section titled “10.2 选择合适的负载均衡器类型”成本对比(小型应用示例):
| 类型 | 月度成本 | 适用场景 |
|---|---|---|
| ALB (5 LCU) | $45.63 | 一般 Web 应用 |
| NLB (5 NLCU) | $38.33 | TCP/UDP 服务 |
| GLB (10 GLCU) | $56.58 | 安全设备集群 |
选择建议:
- 不要过度设计:简单 Web 应用不需要 NLB
- HTTP 应用优先 ALB(功能更丰富,成本相当)
- 只在必要时使用 NLB(极致性能、静态 IP)
10.3 清理未使用资源
Section titled “10.3 清理未使用资源”定期检查:
# 列出所有负载均衡器aws elbv2 describe-load-balancers \ --query 'LoadBalancers[*].[LoadBalancerName,State.Code,CreatedTime]' \ --output table
# 查找无目标的目标组aws elbv2 describe-target-groups \ --query 'TargetGroups[*].[TargetGroupName,TargetType]' \ --output table
# 检查目标组的目标数量for tg in $(aws elbv2 describe-target-groups --query 'TargetGroups[*].TargetGroupArn' --output text); do count=$(aws elbv2 describe-target-health --target-group-arn $tg --query 'length(TargetHealthDescriptions)' --output text) echo "$tg: $count targets"done删除未使用资源:
- 无流量的负载均衡器
- 无目标的目标组
- 未关联的监听器规则
10.4 跨可用区数据传输费用
Section titled “10.4 跨可用区数据传输费用”NLB 跨可用区负载均衡:
- 启用后:$0.01/GB 跨可用区传输费
- 禁用后:无此费用,但流量分布可能不均
计算示例:
- 每月 10 TB 跨可用区流量
- 费用:10,000 GB × $0.01 = $100/月
决策:
- 流量 < 1 TB/月:启用($10/月容错成本可接受)
- 流量 > 10 TB/月:评估是否值得($100+/月)
- 可根据业务需求和预算权衡
11. 高级功能
Section titled “11. 高级功能”11.1 WAF 集成(仅 ALB)
Section titled “11.1 WAF 集成(仅 ALB)”AWS WAF (Web Application Firewall) 可以与 ALB 集成,提供应用层防护:
防护能力:
- SQL 注入防护
- XSS(跨站脚本)防护
- 限制请求速率
- IP 黑白名单
- 地理位置封禁
配置步骤:
- 创建 WAF Web ACL
- 添加规则(托管规则或自定义规则)
- 关联到 ALB
# 关联 WAF 到 ALBaws wafv2 associate-web-acl \ --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:regional/webacl/... \ --resource-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/...费用:
- Web ACL: $5/月
- 规则: $1/规则/月
- 请求数: $0.60/百万请求
11.2 Lambda 作为目标(仅 ALB)
Section titled “11.2 Lambda 作为目标(仅 ALB)”ALB 可以直接调用 Lambda 函数,实现无服务器架构:
优势:
- 无需管理服务器
- 自动扩展
- 按使用量付费
配置示例:
# 创建 Lambda 目标组aws elbv2 create-target-group \ --name my-lambda-targets \ --target-type lambda
# 注册 Lambda 函数aws elbv2 register-targets \ --target-group-arn arn:aws:elasticloadbalancing:... \ --targets Id=arn:aws:lambda:us-east-1:123456789012:function:my-function
# 授权 ALB 调用 Lambdaaws lambda add-permission \ --function-name my-function \ --statement-id alb-invoke \ --action lambda:InvokeFunction \ --principal elasticloadbalancing.amazonaws.com \ --source-arn arn:aws:elasticloadbalancing:...Lambda 函数接收的事件格式:
{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:..." } }, "httpMethod": "GET", "path": "/path", "queryStringParameters": {"key": "value"}, "headers": { "host": "my-alb-1234567890.us-east-1.elb.amazonaws.com", "user-agent": "curl/7.64.1" }, "body": "", "isBase64Encoded": false}11.3 固定响应和重定向(仅 ALB)
Section titled “11.3 固定响应和重定向(仅 ALB)”ALB 可以直接返回固定响应或重定向,无需后端服务器:
用途:
- HTTP 到 HTTPS 重定向
- 维护页面
- 简单的 API 响应
配置示例:
# HTTP 到 HTTPS 重定向aws elbv2 create-rule \ --listener-arn arn:aws:elasticloadbalancing:... \ --priority 1 \ --conditions Field=path-pattern,Values='/*' \ --actions Type=redirect,RedirectConfig='{Protocol=HTTPS,Port=443,StatusCode=HTTP_301}'
# 返回固定 JSON 响应aws elbv2 create-rule \ --listener-arn arn:aws:elasticloadbalancing:... \ --priority 2 \ --conditions Field=path-pattern,Values='/health' \ --actions Type=fixed-response,FixedResponseConfig='{StatusCode=200,ContentType=application/json,MessageBody="{\"status\":\"healthy\"}"}'11.4 PrivateLink 集成(NLB 和 GLB)
Section titled “11.4 PrivateLink 集成(NLB 和 GLB)”通过 VPC Endpoint Service,可以让其他 AWS 账户或 VPC 安全地访问您的服务:
使用场景:
- 跨账户服务共享
- SaaS 服务提供
- 合作伙伴集成
配置步骤:
# 创建 VPC Endpoint Serviceaws ec2 create-vpc-endpoint-service-configuration \ --network-load-balancer-arns arn:aws:elasticloadbalancing:... \ --acceptance-required
# 授权其他账户访问aws ec2 modify-vpc-endpoint-service-permissions \ --service-id vpce-svc-1234567890abcdef0 \ --add-allowed-principals arn:aws:iam::123456789012:root12. 快速参考
Section titled “12. 快速参考”12.1 常用 CLI 命令速查
Section titled “12.1 常用 CLI 命令速查”# 列出所有负载均衡器aws elbv2 describe-load-balancers
# 列出指定负载均衡器的监听器aws elbv2 describe-listeners --load-balancer-arn <ARN>
# 列出目标组aws elbv2 describe-target-groups
# 查看目标组健康状态aws elbv2 describe-target-health --target-group-arn <ARN>
# 注册目标aws elbv2 register-targets --target-group-arn <ARN> --targets Id=<instance-id>
# 注销目标aws elbv2 deregister-targets --target-group-arn <ARN> --targets Id=<instance-id>
# 修改负载均衡器属性aws elbv2 modify-load-balancer-attributes --load-balancer-arn <ARN> --attributes Key=<key>,Value=<value>
# 删除负载均衡器aws elbv2 delete-load-balancer --load-balancer-arn <ARN>
# 删除目标组aws elbv2 delete-target-group --target-group-arn <ARN>12.2 健康检查配置模板
Section titled “12.2 健康检查配置模板”# Web 应用Protocol: HTTPPath: /healthPort: 80Interval: 30Timeout: 5HealthyThreshold: 2UnhealthyThreshold: 3Matcher: 200
# API 服务Protocol: HTTPPath: /api/healthPort: 8080Interval: 15Timeout: 3HealthyThreshold: 2UnhealthyThreshold: 2Matcher: 200-299
# 数据库代理 (NLB)Protocol: TCPPort: 3306Interval: 30Timeout: 10HealthyThreshold: 3UnhealthyThreshold: 312.3 安全组配置模板
Section titled “12.3 安全组配置模板”负载均衡器安全组(Internet-facing):
入站规则: - HTTP: 0.0.0.0/0:80 - HTTPS: 0.0.0.0/0:443
出站规则: - All traffic: 0.0.0.0/0 (或指向目标安全组)目标实例安全组(ALB):
入站规则: - HTTP: <ALB安全组>:80 - HTTPS: <ALB安全组>:443 - SSH: <管理IP>:22 (可选)
出站规则: - All traffic: 0.0.0.0/0目标实例安全组(NLB):
入站规则: - TCP/UDP: <客户端IP范围>:<应用端口> - SSH: <管理IP>:22 (可选)
出站规则: - All traffic: 0.0.0.0/012.4 重要限制和配额
Section titled “12.4 重要限制和配额”| 资源 | 默认限制 | 可申请提升 |
|---|---|---|
| ALB 数量(每区域) | 50 | 是 |
| NLB 数量(每区域) | 50 | 是 |
| 目标组数量(每区域) | 3000 | 是 |
| 监听器(每 ALB) | 50 | 是 |
| 规则(每 ALB) | 100 | 是 |
| 目标(每目标组) | 1000 | 是 |
| 证书(每 ALB) | 25 | 是 |
| ALB 子网数量 | 最少 2 个,最多每个可用区 1 个 | 否 |
| NLB 弹性 IP | 每个可用区 1 个 | 否 |
13. 总结
Section titled “13. 总结”13.1 核心要点
Section titled “13.1 核心要点”选型建议:
- Web 应用、微服务 → ALB
- 游戏服务器、高性能服务 → NLB
- 安全设备、虚拟网络设备 → GLB
- 新项目不要用 CLB
成本管理:
- 预估 LCU/NLCU 使用量
- 优化连接和规则
- 定期清理未使用资源
- 考虑使用 CloudFront 减少负载
可靠性:
- 至少跨 2 个可用区部署
- 配置合理的健康检查
- 启用访问日志和监控
- 设置 CloudWatch 告警
安全性:
- 使用 HTTPS(免费 ACM 证书)
- 配置安全组限制访问
- 考虑集成 WAF(ALB)
- 定期审查访问日志
13.2 下一步学习
Section titled “13.2 下一步学习”推荐学习路径:
-
实践基础配置
- 创建一个简单的 ALB + EC2 环境
- 配置健康检查和监听器
- 测试流量分发
-
探索高级功能
- 基于路径/主机的路由
- 粘性会话
- Lambda 集成
-
优化和监控
- 设置 CloudWatch 告警
- 分析访问日志
- 进行成本优化
-
自动化
- 使用 CloudFormation/Terraform 自动化部署
- 集成 CI/CD 流程
- 实现蓝绿部署或金丝雀发布
13.3 参考资源
Section titled “13.3 参考资源”官方文档:
定价信息:
最佳实践:
文档版本: v1.0
更新日期: 2025-11-28
作者角色: AWS 云架构师
适用区域: 全球所有 AWS 区域(费用基于 US East N. Virginia)