计算的自动扩展
第 1 章 为计算配置自动扩展 复制链接链接已复制到粘贴板!
本指南论述了如何根据大量系统使用自动横向扩展您的计算实例。通过使用考虑 CPU 或内存使用情况等因素的预定义规则,您可以将编排(heat)配置为根据需要自动添加和删除其他实例。
1.1. 架构概述 复制链接链接已复制到粘贴板!
1.1.1. 编配 复制链接链接已复制到粘贴板!
自动扩展后的核心组件是 Orchestration (heat)。编排允许您使用人类可读的 YAML 模板来定义规则。这些规则可在决定添加额外的实例之前评估遥测数据。然后,一旦活动到期,编排可以自动删除任何不需要的实例。
1.1.2. Telemetry 复制链接链接已复制到粘贴板!
Telemetry 可以对您的 OpenStack 环境进行性能监控,从而收集实例和物理主机的 CPU、存储和内存使用率。在评估是否执行任何预定义操作时,编配模板会检查遥测数据。
1.1.3. 主要术语 复制链接链接已复制到粘贴板!
- 堆栈 -堆栈包含运行应用程序所需的所有资源。它可以像单个实例及其资源那样简单,或者像多个实例那样复杂,其中包含包含多层应用的所有资源依赖项。
模板 - YAML 脚本,以定义 Heat 要执行的一系列任务。例如,最好将单独的模板用于某些功能:
- 堆栈模板 - 您定义 Telemetry 应该响应的阈值,并且定义自动扩展组。
- 环境模板 - 定义环境的构建信息:要使用的类别和镜像、应如何配置虚拟网络以及如何安装哪些软件。
1.2. 示例:基于 CPU 使用情况自动扩展 复制链接链接已复制到粘贴板!
在本例中,编排检查遥测数据,并且自动增加实例的数量,以响应高 CPU 使用量。创建堆栈模板和环境模板,以定义所需的规则和后续配置。本例利用了现有资源(如网络)和使用在您自己的环境中可能不同的名称。
创建环境模板,描述实例类别、网络配置和镜像类型。在
/etc/heat/templates/cirros.yaml中输入以下值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/root/environment.yaml中注册 Orchestration 资源:resource_registry: "OS::Nova::Server::Cirros": "file:///etc/heat/templates/cirros.yaml"resource_registry: "OS::Nova::Server::Cirros": "file:///etc/heat/templates/cirros.yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建堆栈模板,描述要监视的 CPU 阈值,以及应添加多少个实例。同时也创建实例组,定义可参与此模板的最小和最大实例数量。
在
/root/example.yaml中输入以下值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新遥测集合间隔。默认情况下,Telemetry 每 10 分钟轮询实例,以进行 CPU 数据。在本例中,将
/etc/ceilometer/pipeline.yaml中的间隔更改为 60 秒:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不建议在生产环境中使用 60 秒的轮询周期,因为更高的轮询间隔可能会导致 control plane 的负载增加。
重启所有 OpenStack 服务以应用更新的 Telemetry 设置:
openstack-service restart
# openstack-service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此步骤将导致 OpenStack 部署简单中断。
运行编配脚本以构建环境并部署实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编配将创建堆栈并启动单个 cirros 实例,如
scaleup_group定义中设置的:min_size:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编排也创建两个 cpu 警报,它们用于触发扩展或缩减事件,如
cpu_alarm_high和cpu_alarm_low定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.1. 测试自动扩展实例 复制链接链接已复制到粘贴板!
编配根据 cpu_alarm_high 阈值自动扩展实例。CPU 使用率超过 50% 实例将扩展,如 cpu_alarm_high 定义中的设置: threshold: 50
要生成 CPU 负载,请登录实例并运行 dd 命令:
ssh -i admin.pem cirros@192.168.122.232 dd if=/dev/zero of=/dev/null & dd if=/dev/zero of=/dev/null & dd if=/dev/zero of=/dev/null &
$ ssh -i admin.pem cirros@192.168.122.232
$ dd if=/dev/zero of=/dev/null &
$ dd if=/dev/zero of=/dev/null &
$ dd if=/dev/zero of=/dev/null &
运行 dd 命令后,您可以预期在 cirros 实例中具有 100% 的 CPU 使用率。在 60 秒后,您应该看到编排已将组自动扩展到两个实例:
进一步的 60 秒后,您将观察编排已再次自动扩展到三个实例。由于三个是此配置的最大值,因此它不会扩展任何更高的值(如 scaleup_group 定义中设置的一样: max_size)
1.2.2. 自动缩放实例 复制链接链接已复制到粘贴板!
编排根据 cpu_alarm_low 阈值自动扩展实例。在本例中,当 CPU 使用率低于 10% 后,实例将缩减。终止正在运行的 dd 进程,您将观察编排开始缩减实例。
停止 dd 进程会导致 cpu_alarm_low 事件触发。因此,编配过程开始自动扩展并删除实例:
几分钟后,您可以返回到单个实例,在 scaleup_group 中允许的最小实例数量:min_size: 1
1.3. 示例:自动扩展应用程序 复制链接链接已复制到粘贴板!
之前描述的功能也可用于扩展应用程序;例如,一种由一次运行的多个实例提供的动态网页。在这种情况下,可以配置 neutron 来提供 负载平衡即服务, 从而在实例之间平均分配流量。
在以下示例中,编排会再次检查遥测数据,并在检测到高 CPU 使用量时增加实例数量,或者在 CPU 使用量低于集合值时减少实例数量。
创建描述 负载均衡器 环境属性的模板。在
/etc/heat/templates/lb-env.yaml中输入以下值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为要运行 Web 应用的实例创建另一个模板。以下模板会创建一个负载均衡器并使用现有的网络。确保根据您的环境替换参数,并将模板保存到文件中,如
/root/lb-webserver-rhel7.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新遥测集合间隔。默认情况下,Telemetry 每 10 分钟轮询实例,以进行 CPU 数据。在本例中,将
/etc/ceilometer/pipeline.yaml中的间隔更改为 60 秒:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不建议在生产环境中使用 60 秒的轮询周期,因为更高的轮询间隔可能会导致 control plane 的负载增加。
重启所有 OpenStack 服务以应用更新的 Telemetry 设置:
openstack-service restart
# openstack-service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此步骤将导致 OpenStack 部署简单中断。
运行 编配脚本。这将构建环境,并使用模板来部署实例:
heat stack-create webfarm -f /root/lb-webserver-rhel7.yaml
# heat stack-create webfarm -f /root/lb-webserver-rhel7.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
/root/lb-webserver-rhel7.yaml替换为实际路径和文件名。
您可以在 Dashboard 的 Orchestration → Stacks → Webfarm 下监控堆栈的创建。创建堆栈后,您会看到多个有用的信息,特别是:
- 用于触发手动扩展或缩减事件的 URL。
- 浮动 IP 地址,即网站的 IP 地址。
- Telemetry 命令显示整个堆栈的 CPU 负载,您可以使用它来检查扩展是否按预期工作。
这是页面在 Dashboard 中是什么样子:
打开 Network → Load Balancers 来查看负载均衡器:
单击 Members。此页面显示负载平衡池的成员;它们是网站流量可以分发到的实例。请注意,在创建了对应的实例并且安装和配置了 Apache 之前,成员将没有 Active 状态。
当 web 服务器启动时,实例将显示为负载均衡器的活动成员:
现在,您可以通过 http://IP/hostname.php 访问 Web 应用。您可以看到类似如下的输出:
Hello, My name is we-zrwm-t4ezkpx34gxu-qbg5d7dqbc4j-server-mzdvigk2jugl
Hello, My name is we-zrwm-t4ezkpx34gxu-qbg5d7dqbc4j-server-mzdvigk2jugl
现在,您可以通过从仪表板中的堆栈概述运行 Telemetry 命令来查看堆栈的 CPU 性能数据。该命令类似如下:
ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=8f86c3d5-15cf-4a64-b9e8-70215498c046 -p 60 -a avg
# ceilometer statistics -m cpu_util -q metadata.user_metadata.stack=8f86c3d5-15cf-4a64-b9e8-70215498c046 -p 60 -a avg
1.3.1. 测试自动扩展应用程序 复制链接链接已复制到粘贴板!
要手动触发应用程序扩展,请在 仪表板中使用来自堆栈概述的 REST 扩展 URL,或者通过在初始部署实例上运行资源密集型命令来生成负载。
要使用 REST API,您需要一个能够执行
HTTP POST请求的工具,如 REST Easy Firefox add on 或curl。复制 扩展 URL,并将其粘贴到 REST Easy 表单中:
或者将其用作
curl命令行中的参数:curl -X POST "scale-up URL"
$ curl -X POST "scale-up URL"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为人为生成负载,请为实例分配一个浮动 IP,使用 SSH 登录该实例,再运行 命令,使 CPU 处于忙碌状态。例如:
dd if=/dev/zero of=/dev/null &
$ dd if=/dev/zero of=/dev/null &Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要检查 CPU 用量是否超过 95%,例如使用
top命令。如果 CPU 使用率不够高,请多次并行运行dd命令,或使用其它方法保持 CPU 忙碌。
下一次 Telemetry 从堆栈收集 CPU 数据时,扩展事件将在 Orchestration → Stacks → Webfarm → Events 触发并出现。将创建一个新的 Web 服务器实例,并添加到负载平衡器中。完成此操作后,实例就会变为活动状态,您会注意到网站 URL 通过负载均衡器路由到堆栈中的两个实例。
创建可能需要几分钟时间,因为实例必须初始化、安装和配置 Apache,以及部署的应用程序。这由 HAProxy 监控,确保在实例上可用该网站标记为 active。
这是在创建新实例时,负载均衡池的成员列表是什么样子:
在决定是否创建额外的实例被创建时,将考虑 heat 堆栈中的实例的平均 CPU 使用量。由于第二个实例很可能具有正常的 CPU 使用量,因此它将平衡第一个实例。但是,如果第二个实例变得忙碌,并且第一个实例的平均 CPU 使用量超过 95%,则将创建另一个(third)实例。
1.3.2. 自动缩放故障应用程序 复制链接链接已复制到粘贴板!
这与 第 1.2.2 节 “自动缩放实例” 类似,当堆栈的平均 CPU 使用量低于预定义的值时,会触发 scale-down 策略,在 第 1.3.1 节 “测试自动扩展应用程序” 中描述的示例中为 15%。另外,通过这种方式从堆栈中删除实例时,也会从负载平衡器中自动移除它。然后,网站流量会在实例的其余部分中自动分发。