🛒 基于 AWS 的负载均衡 Electro 电商网站(使用 AWS Load Balancer)

发布: (2025年12月9日 GMT+8 17:41)
5 min read
原文: Dev.to

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

  1. 打开 VPC Dashboard → Your VPCs → Create VPC
  2. 设置:
    • Name: ecommerce-vpc
    • IPv4 CIDR: 12.0.0.0/16
  3. 点击 Create

创建两个公共子网

子网名称可用区CIDR
1public-subnet-1a例如 us-east-2a12.0.1.0/24
2public-subnet-2bus-east-2b12.0.3.0/24

ecommerce-vpc 下创建每个子网。

创建并关联互联网网关

  1. Internet Gateways → Create
  2. Name: ecommerce-igw
  3. 创建完成后,将其关联到 ecommerce-vpc

配置路由表以实现公网访问

  1. 前往 Route Tables,选择 VPC 的主路由表。
  2. Edit Routes → Add
    • Destination: 0.0.0.0/0
    • Target: ecommerce-igw
  3. 将此路由表关联到两个公共子网(12.0.1.0/2412.0.3.0/24)。

启动两台 Ubuntu EC2 实例

实例子网公网 IP安全组
1public-subnet-1a (12.0.1.0/24)自动分配 ✅web-sg
2public-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

用户数据脚本(安装 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)

  1. EC2 → Load Balancers → Create Load BalancerApplication Load Balancer
  2. 设置:
    • 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)

目标组

  • Create new: ecommerce-tg
  • Protocol: HTTP,Port: 80
  • Health check path: /
  • 注册两台 Ubuntu EC2 实例并设为 Include as pending

检查后创建 ALB。

测试负载均衡器

  1. 等待 2–5 分钟,使 ALB 变为可用。
  2. 从控制台复制 DNS 名称(例如 ecommerce-alb-xxxxxx.us-east-2.elb.amazonaws.com)。
  3. 在浏览器中打开 http:// + 该 DNS。
  4. 多次刷新页面,您应看到交替的消息,例如:
    • “Server 1 (Subnet: 12.0.1.0/24)”
    • “Server 2 (Subnet: 12.0.3.0/24)”

两个实例在目标组中应显示 Healthy

部署网站文件

  1. 准备本地项目文件夹(例如 Electro)。

  2. 为 SSH 私钥设置安全权限:

    chmod 400 test-ALB-demo.pem
  3. 将文件复制到 Server 1(将公共 IP 替换为您实例的 IP):

    scp -i test-ALB-demo.pem -r Electro/* ubuntu@3.139.70.220:/tmp/
  4. 将文件移动到 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
  5. 对 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,以免产生持续费用。

Back to Blog

相关文章

阅读更多 »