构建 EC2 AutoScaling 环境并进行横向扩展和缩减操作
1.概要
创建一个根据服务器负载情况自动扩缩容的环境。 ApacheBench用于加载应用程序。
2.配置图
配置图如下。
3.搭建流程
- 修复白平衡
- 修复EC2
- 创建 AMI
- 创建启动模板
- 创建 AutoScaling 组
3-1.修改ALB
当前的 ALB 目标是指上次创建的两个 EC2 实例。
由于我们只想使用 AutoScaling 创建的实例,因此我们将从目标中删除这两个实例。
从 ALB 目标组中的目标中删除实例。
3-2.修改EC2
目前,ALB 设置为接收端口号:443 并转发到 8080,但默认情况下,对于使用 AutoScaling 创建的 EC2 实例,它将转发到 80。 因此,在EC2中,配置apache在80接收并转发到8080。
安装阿帕奇。
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。
AMI 已创建。
3-4. 创建启动模板
使用创建的 AMI 创建启动模板。
启动模板已创建。
3-5.创建AutoScaling组
创建一个 AutoScaling 组,如下所示。 (如果平均 CPU 使用率超过 40%,最多添加 3 个 EC2 实例)
所需容量 | 1 |
最小容量 | 1 |
最大容量 | 3 |
伸缩策略:度量类型 | 平均CPU使用率 |
缩放策略:目标值 | 40 |
将 ALB 链接到 AutoScaling 组。
设置组大小和扩展策略。
AutoScaling 组创建已完成。
创建 AutoScaling 组后,警报已添加到 CloudWatch。
上限(扩容条件) | 3分钟内3个数据点的CPU利用率 > 40 |
下限しきい値(スケールインする条件) | 15 分内の15データポイントのCPUUtilization < 28 |
当您查看EC2实例列表时,会自动创建一个实例。
通过 ALB 连接到自动生成的实例,并检查应用程序是否正常运行。
4.実演
请按照以下步骤检查 AutoScaling 的运行情况。
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使用率)
上限报警处于报警状态。
第二个实例已自动创建。 (横向扩展)
由于机器并行运行,每台机器的CPU使用率有所下降,但仍然超过了40%的上限。
添加了更多实例,使其成为三个并排的实例。
通过三辆车并列运行,每辆车的负载进一步减轻。
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%。
由于CPU使用率低于下限28%,进入警戒状态。
三个实例之一被“终止”。 (按比例缩小)
当我再等待时,实例再次“终止”。
以上。