某电商企业构建高可用、高弹性 LAMP 架构交易网站

某电商企业构建高可用、高弹性 LAMP 架构交易网站

一、网络架构搭建

1. 创建 VPC

  • 登录 AWS 管理控制台,进入 VPC 服务。
  • 点击 “创建 VPC”,输入名称 “ecommerce-vpc”,设置 CidrBlock10.0.0.0/16,点击 “创建”

2. 划分子网

  • 在“子网”页面,点击“创建子网”:
    • 可用区 cn-north-1a
      • 公有子网:名称 “public-subnet-1a”,CidrBlock 10.0.1.0/24,关联 VPC。
      • 私有子网:名称 “private-subnet-1a”,CidrBlock 10.0.101.0/24,关联 VPC。
    • 可用区 cn-north-1b
      • 公有子网:名称 “public-subnet-1b”,CidrBlock 10.0.2.0/24,关联 VPC。
      • 私有子网:名称 “private-subnet-1b”,CidrBlock 10.0.102.0/24,关联 VPC。

3. 配置路由表

  • 公有子网路由表:
    • 创建路由表,名称 “public-route-table”,关联互联网网关(IGW),路由规则 0.0.0.0/0 指向 IGW。
    • 将两个公有子网关联到此路由表。
  • 私有子网路由表:
    • 创建路由表,名称 “private-route-table”,在 “NAT 网关” 页面创建 NAT 网关(绑定弹性 IP),路由规则 0.0.0.0/0 指向 NAT 网关。
    • 将两个私有子网关联到此路由表。

二、负载均衡与自动伸缩

1. 创建应用负载均衡器(ALB)

  • 进入“弹性负载均衡器”服务,点击“创建负载均衡器”:
    • 选择 “应用负载均衡器”,名称 “ecommerce-alb”,方案 “互联网 - facing”。子网选择公有子网。
    • 监听端口 8001,协议 HTTP
    • 目标组:名称 “ecommerce-target-group”,端口 8001,健康检查路径 /health.php(后续在 EC2 中实现),间隔 **30** 秒,超时 **5** 秒,不健康阈值 **3`
    • 点击 “创建”,记录 ALB 的 DNS 名称。
  1. 创建启动模板

    • 点击 “启动模板” 选项,然后点击 “创建启动模板” 按钮。

    • 在创建页面中,输入启动模板名称,如 “lamp - launch - template” ,选择合适的 AMI(这里选择 “Amazon Linux 2” ),实例类型选择 “t2.micro” 。

    • 在网络选项中,选择之前创建的 VPC “ecommerce - vpc” ,自动分配公有 IP 选择 “否” ,因为实例将部署在私有子网。

    • 安全组配置:点击 “创建新的安全组” ,输入安全组名称,如 “ec2 - sg” ,在入站规则中添加两条规则:一条允许端口 “8001” ,源选择为刚才创建的 ALB 的安全组;另一条允许端口 “22” ,源设置为堡垒机的 IP 地址(堡垒机后续创建)。

    • 用户数据配置:在用户数据部分,选择 “作为文本” ,然后输入以下脚本:

    • 完成上述配置后,点击 “创建” 按钮,完成启动模板的创建。

      #!/bin/bash
      sudo dnf update -y
      sudo dnf clean all
      sudo dnf makecache
      sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
      sudo dnf install httpd php mysql-server -y
      if [ $? -eq 0 ]; then
          sudo systemctl start httpd
          sudo systemctl enable httpd
          mkdir -p /var/www/html
          echo "<?php phpinfo(); ?>" > /var/www/html/health.php
          if [ -f /etc/httpd/conf/httpd.conf ]; then
              sudo sed -i 's/Listen 80/Listen 8001/g' /etc/httpd/conf/httpd.conf
          fi
          sudo systemctl restart httpd
      else
          echo "Failed to install httpd or mysql-server."
      fi
      
      

三、配置自动伸缩组(ASG)

  1. 进入自动伸缩组服务:在 AWS 控制台中点击 “自动伸缩组” 服务。
  2. 创建自动伸缩组
    • 点击 “创建自动伸缩组” 按钮,在创建页面中,选择刚才创建的启动模板 “lamp - launch - template” 。
    • 输入自动伸缩组名称,如 “ecommerce - asg” ,选择 VPC 为 “ecommerce - vpc” ,在可用区选项中,勾选两个可用区 “cn - north - 1a” 和 “cn - north - 1b” 。
    • 设置最小实例数为 “2” ,最大实例数为 “10” ,期望实例数为 “2” 。
    • 扩展策略配置:在扩展策略部分,选择 “目标跟踪” 策略,设置目标为保持 CPU 利用率在 “60%” 。这样当 CPU 利用率超过 60% 时,ASG 会自动添加实例;当低于一定阈值时,会自动移除实例。
    • 关联目标组:在 “将实例添加到负载均衡器目标组” 部分,选择之前创建的 ALB 的目标组 “ecommerce - target - group” 。
    • 完成上述配置后,点击 “创建” 按钮,完成 ASG 的创建。

四、数据库与缓存

(一)创建 RDS(Amazon Aurora)

  1. 进入 RDS 服务:在 AWS 控制台中点击 “RDS” 服务。
  2. 创建数据库操作:点击 “创建数据库” 按钮,在创建页面中,选择数据库创建方式为 “标准创建” 。
  3. 配置数据库参数
    • 引擎选项:选择 “Amazon Aurora” ,并选择合适的版本(一般选择最新稳定版)。
    • 模板:选择 “开发 / 测试” 模板。
    • 实例规格:选择 “db.t3.medium” ,存储设置为 “80GB” 。
    • 多可用区部署:勾选 “启用” 多可用区部署,以提高数据库的高可用性。
    • 凭证设置:输入主用户名和密码,如主用户名 “ecommuser” ,密码 “SecurePass123!” ,并牢记,后续应用连接数据库会用到。
    • 数据库名称:输入数据库名称,如 “ecommerce_db” 。
    • 子网组:选择之前创建的私有子网组(包含 “private - subnet - 1a” 和 “private - subnet - 1b” )。
    • 安全组:点击 “创建新的安全组” ,输入安全组名称,如 “rds - sg” ,在入站规则中,允许 EC2 实例的私有 IP 地址范围访问端口 “3306” 。
    • 完成上述配置后,点击 “创建数据库” 按钮,等待数据库创建完成,状态变为 “可用”。

(二)部署 Memcached

  1. 进入 ElastiCache 服务:在 AWS 控制台中点击 “ElastiCache” 服务。
  2. 创建集群操作:点击 “创建集群” 按钮,在创建页面中,选择 “Memcached” 引擎。
  3. 配置集群参数
    • 节点类型:选择 “t1.micro” 或 “t2.micro” ,节点数量设置为 “2” ,分别部署在两个可用区 “cn - north - 1a” 和 “cn - north - 1b” 。
    • 子网组:选择私有子网组(包含 “private - subnet - 1a” 和 “private - subnet - 1b” )。
    • 安全组:点击 “创建新的安全组” ,输入安全组名称,如 “memcached - sg” ,在入站规则中,允许 EC2 实例的安全组访问端口 “11211” 。
    • 完成上述配置后,点击 “创建” 按钮,等待集群创建完成,状态变为 “可用”。

五、存储配置

(一)S3 存储静态内容

  1. 进入 S3 服务:在 AWS 控制台中点击 “S3” 服务。
  2. 创建桶操作:点击 “创建桶” 按钮,在创建页面中,输入桶名称,名称需全局唯一,如 “ecommerce - static - 随机字符串” ,选择区域为 “北京”(或宁夏,根据实际情况)。
  3. 配置桶属性:在创建桶的后续页面中,可根据需要配置版本控制、加密等属性,一般情况下,保持默认设置即可。点击 “创建” 按钮,完成桶的创建。
  4. 上传文件:在新创建的桶页面中,点击 “上传” 按钮,选择网站的样式表文件、图片文件等静态资源文件,上传到桶中。上传完成后,右键点击文件,选择 “属性” - “权限” ,将文件权限设置为 “公共读” ,以便网站能够访问这些静态资源。

(二)EFS 共享文件存储

  1. 进入 EFS 服务:在 AWS 控制台中点击 “EFS” 服务。

  2. 创建文件系统操作:点击 “创建文件系统” 按钮,在创建页面中,输入文件系统名称,如 “ecommerce - efs” ,选择 VPC 为 “ecommerce - vpc” 。

  3. 添加挂载目标:在创建文件系统的后续页面中,分别为两个私有子网 “private - subnet - 1a” 和 “private - subnet - 1b” 添加挂载目标。

  4. 修改 EC2 启动模板用户数据:回到之前创建的 EC2 启动模板 “lamp - launch - template” ,在用户数据部分添加以下脚本:

    sudo yum install -y amazon-efs-utils
    mkdir /var/www/efs
    mount -t efs -o tls 文件系统ID /var/www/efs  # 文件系统ID替换为实际ID
    

六、安全与管理

(一)部署堡垒机

  1. 在公有子网启动 EC2 实例:进入 EC2 服务,点击 “启动实例” ,在启动实例页面中,选择合适的 AMI(如 “Amazon Linux 2” ),实例类型选择 “t2.micro” 。
  2. 配置实例
    • 在网络选项中,选择之前创建的 VPC “ecommerce - vpc” ,并选择一个公有子网(如 “public - subnet - 1a” )。
    • 安全组:点击 “创建新的安全组” ,输入安全组名称,如 “bastion - sg” ,在入站规则中,允许端口 “22” ,源设置为管理员的 IP 地址,这样只有管理员能够通过 SSH 访问该堡垒机。
    • 完成配置后,点击 “启动实例” 按钮,等待实例启动并状态变为 “运行中” 。该堡垒机可用于远程管理部署在私有子网中的 EC2 实例。

(二)安全组复查

  1. ALB 安全组:进入弹性负载均衡器服务,找到之前创建的 “ecommerce - alb” ,查看其安全组。确保入站规则中仅允许端口 “8001” ,源为 “0.0.0.0/0” (或根据实际需求指定允许的 IP 范围)。
  2. EC2 安全组(ec2 - sg):进入 EC2 服务,找到 “ec2 - sg” 安全组。确认入站规则中有允许端口 “8001” ,源为 ALB 的安全组;以及允许端口 “22” ,源为堡垒机 IP。
  3. RDS 安全组(rds - sg):进入 RDS 服务,找到 “rds - sg” 安全组。确认入站规则中允许端口 “3306” ,源为 EC2 实例的私有 IP 地址范围。
  4. Memcached 安全组(memcached - sg):进入 ElastiCache 服务,找到 “memcached - sg” 安全组。确认入站规则中允许端口 “11211” ,源为 EC2 实例的安全组。

七、验证与监控

(一)网站访问验证

  1. 通过 ALB 访问网站:使用浏览器,输入之前记录的 ALB 的 DNS 名称,如 “ecommerce - alb - xxxxxx.cn - north - 1.elb.amazonaws.com.cn:8001” ,访问网站。确认能够正常显示 PHP 信息页(之前在 EC2 用户数据中创建的测试页面)。

  2. 测试静态资源加载:上传一张图片到 S3 桶中,然后在网站代码中引用该图片路径,刷新网站页面,确认图片能够正常加载,验证 S3 存储静态内容的功能。

  3. 修改 /var/www/html/info.php,添加图片引用:

    <?php
    echo '<h1>Welcome to E-commerce Site</h1>';
    echo '<img src="https://ecommerce-static-xxx.s3.cn-north-1.amazonaws.com.cn/logo.png" alt="Logo">';
    phpinfo();
    ?>
    
  4. 如果看不到图片:

    1. 检查并修改存储桶权限:

      • 使用 AWS 管理控制台:登录 AWS 控制台,进入 S3 服务,找到对应的存储桶(ecommerce-static1 ),点击进入存储桶的 “权限” 选项卡。确认 “公共访问设置” 中允许公共读(如果业务允许的话 );也可以在 “存储桶策略” 里添加允许读取对象的策略语句,例如:

        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": "*",
                    "Action": "s3:GetObject",
                    "Resource": "arn:aws:s3:::ecommerce-static1/*"
                }
            ]
        }
        

(二)自动伸缩测试

  1. 模拟流量工具准备:在本地安装并配置 “locust” 工具(或其他流量模拟工具)。编写简单的 Locust 测试脚本,设置模拟用户数和请求频率等参数,用于模拟大量用户访问网站。
  2. 启动模拟流量:运行 Locust 测试脚本,逐渐增加模拟用户数量,观察 ASG 的变化。通过 AWS CloudWatch 控制台,查看 EC2 实例的 CPU 利用率指标,确认当 CPU 利用率超过 60% 时,ASG 是否自动
posted @ 2025-04-16 06:33  cat桑  阅读(75)  评论(0)    收藏  举报