+86 13541016684Mon. - Fri. 10:00-22:00

构建 EC2 AutoScaling 环境并进行横向扩展和缩减操作

构建 EC2 AutoScaling 环境并进行横向扩展和缩减操作

构建 EC2 AutoScaling 环境并进行横向扩展和缩减操作

1.概要

创建一个根据服务器负载情况自动扩缩容的环境。 ApacheBench用于加载应用程序。

2.配置图

配置图如下。

aws10_abstract

3.搭建流程

  1. 修复白平衡
  2. 修复EC2
  3. 创建 AMI
  4. 创建启动模板
  5. 创建 AutoScaling 组

3-1.修改ALB

当前的 ALB 目标是指上次创建的两个 EC2 实例。

由于我们只想使用 AutoScaling 创建的实例,因此我们将从目标中删除这两个实例。

从 ALB 目标组中的目标中删除实例。

aws10_alb-1024x521

3-2.修改EC2

目前,ALB 设置为接收端口号:443 并转发到 8080,但默认情况下,对于使用 AutoScaling 创建的 EC2 实例,它将转发到 80。 因此,在EC2中,配置apache在80接收并转发到8080。

aws10_ec2_port_abstract

安装阿帕奇。

sudo yum -y install httpd
sudo systemctl enable httpd.service
service httpd restart

将以下定义添加到 apache 配置文件中。

LoadModule proxy_module modules/mod_proxy.so
<IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</IfModule>

3-3.创建AMI

扩容时自动创建的EC2实例是根据启动模板创建的。

创建启动模板将使用的 AMI(EC2 映像)。

从上次创建的 EC2 实例创建 AMI。

aws10_ami1-1024x521

AMI 已创建。

aws10_ami2-1024x519

3-4. 创建启动模板

使用创建的 AMI 创建启动模板。

aws10_launch_template1-1024x519

启动模板已创建。

aws10_launch_template2-1024x521

3-5.创建AutoScaling组

创建一个 AutoScaling 组,如下所示。 (如果平均 CPU 使用率超过 40%,最多添加 3 个 EC2 实例)

所需容量 1
最小容量 1
最大容量 3
伸缩策略:度量类型 平均CPU使用率
缩放策略:目标值 40

将 ALB 链接到 AutoScaling 组。

aws10_autoscalinggroup_alb-1024x952

设置组大小和扩展策略。

aws10_autoscalinggroup_policy-1024x994

AutoScaling 组创建已完成。

aws10_autoscalinggroup_created-1024x520

创建 AutoScaling 组后,警报已添加到 CloudWatch。

上限(扩容条件) 3分钟内3个数据点的CPU利用率 > 40
下限しきい値(スケールインする条件) 15 分内の15データポイントのCPUUtilization < 28
aws10_autoscalinggroup_coloudwatchalerm-1024x522

当您查看EC2实例列表时,会自动创建一个实例。

aws10_autoscalinggroup_ec2list-1024x521

通过 ALB 连接到自动生成的实例,并检查应用程序是否正常运行。

aws10_autoscalinggroup_sampleapp-1024x630

4.実演

请按照以下步骤检查 AutoScaling 的运行情况。

  1. 使用 ApacheBench 应用负载
  2. 检查横向扩展
  3. 检查缩减

4-1. 使用 ApacheBench 施加负载

发出以下命令以在构建的服务器上放置负载。

ab -c 50  -n 200000 https://www.z-frontier.com/HelloApp/sample

<命令参数>

参数 解释
-C 指定平行线的数量
-n 指定请求总数
网址 要加载的站点的 URL

如果指定 -c 50 -n 200000,它将并行运行 50 次,直到发出 200000 个请求。

4-2. 检查扩展

单台设备CPU使用率超过40%上限。 (下图是实例#1的CPU使用率)

aws10_scaleout_graph1-1024x520

上限报警处于报警状态。

aws10_scaleout_alerm1-1024x520

第二个实例已自动创建。 (横向扩展)

aws10_scaleout_ec2list1-1024x518

由于机器并行运行,每台机器的CPU使用率有所下降,但仍然超过了40%的上限。

aws10_scaleout_graph2-1024x520

添加了更多实例,使其成为三个并排的实例。

aws10_scaleout_ec2list2-1024x518

通过三辆车并列运行,每辆车的负载进一步减轻。

aws10_scaleout_graph3-1024x521

4-3. 检查缩减

停止对 ApacheBench 施加负载并检查情况。

(以下是ApacheBench停止时的日志输出)

$ ab -c 50  -n 200000 https://www.z-frontier.com/HelloApp/sample
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.z-frontier.com (be patient)
Completed 20000 requests
Completed 40000 requests
Completed 60000 requests
Completed 80000 requests
Completed 100000 requests
^C

Server Software:
Server Hostname:        www.z-frontier.com
Server Port:            443
SSL/TLS Protocol:       TLSv1/SSLv3,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /HelloApp/sample
Document Length:        245 bytes

Concurrency Level:      50
Time taken for tests:   856.848 seconds
Complete requests:      115771
Failed requests:        0
Write errors:           0
Total transferred:      62979424 bytes
HTML transferred:       28363895 bytes
Requests per second:    135.11 [#/sec] (mean)
Time per request:       370.062 [ms] (mean)
Time per request:       7.401 [ms] (mean, across all concurrent requests)
Transfer rate:          71.78 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       50  163  60.7    158    2317
Processing:    26  207 151.4    163    3278
Waiting:       26  200 152.4    153    3278
Total:         78  370 171.7    321    3393

Percentage of the requests served within a certain time (ms)
  50%    321
  66%    363
  75%    443
  80%    500
  90%    579
  95%    650
  98%    719
  99%    771
 100%   3393 (longest request)

距离停止已经有一段时间了。 CPU 使用率约为 0%。

aws10_scalein_graph1-1-1024x519

由于CPU使用率低于下限28%,进入警戒状态。

aws10_scalein_alerm1-1024x519

三个实例之一被“终止”。 (按比例缩小)

aws10_scalein_ec2list1-1024x519

当我再等待时,实例再次“终止”。

aws10_scalein_ec2list2-1024x521

以上。