🛒 基于 AWS 的负载均衡 Electro 电商网站(使用 AWS Load Balancer)
Source: Dev.to
概览
本项目演示了如何使用以下组件在 AWS 上部署一个高可用的电商网站:
- 两个运行 Apache 的 EC2 实例
- 一个分发 HTTP 流量的应用负载均衡器 (ALB)
- 一个包含公共子网和互联网网关的自定义 VPC
非常适合学习 AWS 基础设施、负载均衡和高可用性的初学者。
架构
- VPC CIDR:
12.0.0.0/16 - 公共子网 1:
12.0.1.0/24→ 托管 EC2 实例 1 - 公共子网 2:
12.0.3.0/24→ 托管 EC2 实例 2 - 负载均衡器: 应用负载均衡器 (HTTP,端口 80)
- 目标组: 将流量路由到两个健康的 EC2 实例
- 互联网网关: 提供公网访问
创建自定义 VPC
- 打开 VPC Dashboard → Your VPCs → Create VPC。
- 设置:
- Name:
ecommerce-vpc - IPv4 CIDR:
12.0.0.0/16
- Name:
- 点击 Create。
创建两个公共子网
| 子网 | 名称 | 可用区 | CIDR |
|---|---|---|---|
| 1 | public-subnet-1a | 例如 us-east-2a | 12.0.1.0/24 |
| 2 | public-subnet-2b | us-east-2b | 12.0.3.0/24 |
在 ecommerce-vpc 下创建每个子网。
创建并关联互联网网关
- Internet Gateways → Create。
- Name:
ecommerce-igw。 - 创建完成后,将其关联到
ecommerce-vpc。
配置路由表以实现公网访问
- 前往 Route Tables,选择 VPC 的主路由表。
- Edit Routes → Add:
- Destination:
0.0.0.0/0 - Target:
ecommerce-igw
- Destination:
- 将此路由表关联到两个公共子网(
12.0.1.0/24和12.0.3.0/24)。
启动两台 Ubuntu EC2 实例
| 实例 | 子网 | 公网 IP | 安全组 |
|---|---|---|---|
| 1 | public-subnet-1a (12.0.1.0/24) | 自动分配 ✅ | web-sg |
| 2 | public-subnet-2b (12.0.3.0/24) | 自动分配 ✅ | web-sg |
- AMI: Ubuntu 22.04 LTS (x86_64)
- 实例类型:
t2.micro(符合免费套餐) - 安全组 (
web-sg) 入站规则:- HTTP (端口 80) →
0.0.0.0/0 - SSH (端口 22) → 您的 IP(或测试时使用
0.0.0.0/0)
- HTTP (端口 80) →
用户数据脚本(安装 Apache)
#!/bin/bash
# Update system packages
apt-get update -y
# Install Apache2
apt-get install -y apache2
# Ensure Apache starts on boot
systemctl enable apache2
systemctl start apache2
# Ensure /var/www/html exists and has correct ownership
mkdir -p /var/www/html
chmod -R 755 /var/www/html
# Optional: Create a simple test page
cat /var/www/html/index.html
# Apache2 is running on Server1
# Instance provisioned automatically on Server1.
EOF
(两台实例均使用相同脚本;如需可为 Server 2 定制信息。)
创建应用负载均衡器 (ALB)
- EC2 → Load Balancers → Create Load Balancer → Application Load Balancer。
- 设置:
- Name:
ecommerce-alb - Scheme: Internet‑facing
- IP address type: IPv4
- Listeners: HTTP (端口 80)
- Availability Zones: 选择
ecommerce-vpc和两个公共子网 (12.0.1.0/24,12.0.3.0/24) - Security Group:
alb-sg(允许0.0.0.0/0的 HTTP)
- Name:
目标组
- Create new:
ecommerce-tg - Protocol: HTTP,Port: 80
- Health check path:
/ - 注册两台 Ubuntu EC2 实例并设为 Include as pending。
检查后创建 ALB。
测试负载均衡器
- 等待 2–5 分钟,使 ALB 变为可用。
- 从控制台复制 DNS 名称(例如
ecommerce-alb-xxxxxx.us-east-2.elb.amazonaws.com)。 - 在浏览器中打开
http://+ 该 DNS。 - 多次刷新页面,您应看到交替的消息,例如:
- “Server 1 (Subnet: 12.0.1.0/24)”
- “Server 2 (Subnet: 12.0.3.0/24)”
两个实例在目标组中应显示 Healthy。
部署网站文件
-
准备本地项目文件夹(例如
Electro)。 -
为 SSH 私钥设置安全权限:
chmod 400 test-ALB-demo.pem -
将文件复制到 Server 1(将公共 IP 替换为您实例的 IP):
scp -i test-ALB-demo.pem -r Electro/* ubuntu@3.139.70.220:/tmp/ -
将文件移动到 Apache 的网页目录(Server 1):
ssh -i test-ALB-demo.pem ubuntu@3.139.70.220 sudo rm -rf /var/www/html/* sudo mv /tmp/* /var/www/html/ exit -
对 Server 2 重复上述操作(相应替换 IP):
scp -i test-ALB-demo.pem -r Electro/* ubuntu@18.217.149.70:/tmp/ ssh -i test-ALB-demo.pem ubuntu@18.217.149.70 sudo rm -rf /var/www/html/* sudo mv /tmp/* /var/www/html/ exit
验证
-
直接访问:
http://3.139.70.220→ 您的网站http://18.217.149.70→ 同样的网站
-
通过 ALB: 打开 ALB DNS 名称,刷新应能从两台服务器交替提供站点内容。
清理(可选)
完成后请记得终止 EC2 实例、删除 ALB、目标组、安全组、子网以及 VPC,以免产生持续费用。