配置虚拟机规模集

已完成

缩放时,可以向虚拟机规模集添加实例。 在该运输公司场景中,缩放是处理随时间推移而不断变化的请求数的一种有效方法。 缩放会随着用户数量的变化调整运行 Web 应用程序的虚拟机数量。 这样,无论当前负载如何,系统始终维持均衡的响应时间。

本单元介绍如何缩放虚拟机规模集。 可以通过显式设置规模集中虚拟机实例数进行手动缩放。 可以通过定义触发虚拟机分配和解除分配的缩放规则来配置自动缩放。 这些缩放规则通过监控各种性能指标来确定缩放系统的时间。

手动缩放虚拟机规模集

可通过增加或减少实例计数来手动缩放虚拟机规模集。 可以在 Azure 门户中或以编程方式执行此任务。

以下代码使用 Azure CLI 来更改虚拟机规模集中的实例数:

az vmss scale \
  --name webServerScaleSet \
  --resource-group MyResourceGroup \
  --new-capacity 6

自动缩放虚拟机规模集

在某些情况下,手动缩放非常有用。 但在许多情况下,自动缩放更加合适。 它允许系统控制规模集中的实例数。

可以基于以下内容进行自动缩放:

  • 计划:如果你知道在指定日期/时段内工作负载会增加,可以使用此方法。
  • 指标:通过监视与规模集关联的性能指标来调整缩放。 如果这些指标超过指定阈值,规模集可以自动启动新的虚拟机实例。 如果指标表明不再需要额外资源,规模集可以停止任何多余的实例。

定义自动缩放条件、规则和限制

自动缩放基于一组缩放条件、规则和限制。 缩放条件包含时间和一组缩放规则。 如果当前时间处于缩放条件所定义的时段内,则评估该条件的缩放规则。 此评估结果决定是否在规模集中添加或删除实例。 缩放条件还定义缩放的最大和最小实例数限制。

在运输公司场景中,可以添加监视整个规模集内 CPU 使用率的缩放规则。 如果 CPU 使用率超过阈值 (75%),缩放规则可增加虚拟机实例数。 第二个缩放规则还可以监视 CPU 使用率,但当使用率低于 50% 时,可以减少虚拟机实例数。 由于应用程序的全局性质,这些规则应当始终启用,而非仅在特定时间内启用。

虚拟机规模集可以包含许多缩放条件。 将针对每个匹配的缩放条件进行操作。 规模集还包含默认缩放条件,在其他任何缩放条件与当前时间和性能指标均不匹配时,系统会使用该默认缩放条件。 默认缩放条件始终处于活动状态。 此类条件不包含缩放规则,有效地充当无法缩放的 null 缩放条件。但是,可以修改默认缩放条件来设置默认实例数,或者可以添加一对缩放规则来实现先增后减。

使用基于计划的自动缩放

基于计划的缩放需指定开始和结束时间以及要添加到规模集的实例数。 下面的屏幕截图展示了 Azure 门户中的一个示例。 每周星期一和星期三的上午 6 点到下午 6 点之间,实例数横向扩展到 20。 在其他时间段,如果不存在任何其他缩放条件,则会应用默认缩放条件。

在这种情况下,默认规则将系统缩减为两个实例。 此值是此默认缩放条件下的最大值。

显示基于计划的缩放条件示例的屏幕截图。

使用基于指标的自动缩放

基于指标的缩放规则指定要监视的资源,例如 CPU 使用率和响应时间。 此缩放规则根据这些指标的值在规模集中添加或删除实例。 可以指定实例数限制,以防止规模集过度缩放。

在示例场景中,平均 CPU 使用率超过 75% 时,需要将实例数增加 1。 此外,还需要将横向扩展操作限制为 50 个实例。 此限制有助于防止因攻击造成的代价高昂的失控缩放。 同样,平均 CPU 使用率降到 50% 以下时,则需要缩小实例数。

这些指标通常用于监视虚拟机规模集:

  • CPU 百分比:此指标指示所有实例的 CPU 使用率。 较高的值表示实例正占用大量 CPU,这可能造成处理客户端请求出现延迟。
  • 入站流和出站流:这些指标表示网络流量流入和流出规模集中虚拟机的速度。
  • 磁盘读取操作次数/秒和磁盘写入操作次数/秒:这些指标表示规模集中的磁盘 I/O 量。
  • 数据磁盘队列深度:该指标表示有多少针对虚拟机上数据磁盘的 I/O 请求正在等待服务。

缩放规则聚合对所有实例检索的某个指标的值。 它聚合一段时间内(称为时间粒度)的值。 虽然每个指标都具有内部时间粒度,但通常此时间段为 1 分钟。 聚合的值称为“时间聚合”。 时间聚合选项包括“平均值”、“最小值”、“最大值”、“总数”、“上次结果”和“计数”。

一分钟的时间间隔非常短,难以在此期间确定指标变化的持续时间是否长到有必要进行自动缩放。 缩放规则将执行第二步,在用户指定的较长时间段内进一步聚合时间聚合值。 此时间段称为“持续时间”。 最短持续时间为 5 分钟。 例如,如果持续时间设置为 10 分钟,则缩放规则聚合对该时间粒度计算的 10 个值。

持续时间的聚合计算可能与时间粒度的聚合计算不同。 例如,假设时间聚合是平均值,收集的统计信息是一分钟时间粒度内的 CPU 百分比。 对于每分钟,将计算该分钟内所有实例的平均 CPU 使用百分比。 如果时间粒度统计信息设置为“最大值”,且规则持续时间设置为 10 分钟,则 CPU 百分比使用率的 10 个平均值的最大值将确定是否已超过规则阈值。

缩放规则可在检测到某个指标超出阈值时执行缩放操作。 缩放操作可以是横向扩展或缩小。 横向扩展操作会增加实例数。 缩小操作会减少实例计数。

缩放操作使用运算符(例如“小于”、“大于”或“等于”)来确定如何针对阈值做出反应。 横向扩展操作通常使用“大于”运算符来比较指标值和阈值。 缩小操作通常使用“小于”运算符来比较指标值和阈值。 缩放操作还可将实例数设置为特定级别,而不是增加或减少可用数量。

缩放操作有冷却时段(以分钟为单位)。 在此期间,不会再次触发缩放规则。 冷却可让系统在缩放事件之间保持稳定。 启动或关闭实例需要时间,因此任何收集的指标可能在几分钟内不会显示任何显著更改。 最小冷却时段为 5 分钟。

最后,应计划在工作负载降低时横向缩减实例数。 请考虑在相同的缩放条件下成对定义缩放规则。 一个缩放规则应指示当指标超过阈值上限时应如何横向扩展系统。 另一个规则应定义当相同指标下降到低于阈值下限时应如何再次缩小系统。 请勿使两个阈值相同。 否则,可能会触发一系列振荡事件,这些事件会导致横向扩展,然后再次缩减。

下图显示了一个在 Azure 门户中定义的缩放规则。

Azure 门户中基于指标的缩放规则屏幕截图。