使用自动缩放设置有助于确保运行适当数量的资源来处理应用程序负载的波动。 可将自动缩放设置配置为基于指标(指示负载或性能)触发,或者在计划好的日期和时间触发。
本文介绍自动缩放设置。
自动缩放设置架构
以下示例展示了一个自动缩放设置,其中包含一个默认配置文件,以及该配置文件中的两条指标规则:
- 当虚拟机规模集的平均 CPU 百分比指标在过去 10 分钟内大于 85% 时,横向扩展规则将触发。
- 当虚拟机规模集的平均 CPU 百分比指标在过去 10 分钟内低于 60% 时,就会触发缩减规则,如该规则的
timeWindow值所指定。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2015-04-01",
"name": "VMSS1-Autoscale-607",
"location": "chinaeast2",
"properties": {
"name": "VMSS1-Autoscale-607",
"enabled": true,
"targetResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"profiles": [
{
"name": "Auto created default scale condition",
"capacity": {
"minimum": "1",
"maximum": "4",
"default": "1"
},
"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT10M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 85,
"dividePerInstance": false
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT10M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 60,
"dividePerInstance": false
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
}
}
下表描述了上述自动缩放设置的 JSON 中的元素。
| 章节 | 元素名称 | 门户名称 | 说明 |
|---|---|---|---|
| 设置 | ID | 自动缩放设置的资源 ID。 自动缩放设置属于 Azure 资源管理器资源。 | |
| 设置 | 姓名 | 自动缩放设置的名称。 | |
| 设置 | 位置 | 自动缩放设置的位置。 此位置可与缩放的资源所在的位置不同。 | |
| 属性 | targetResourceUri | 要缩放的资源的资源 ID。 针对每个资源,只能使用一项自动缩放设置。 | |
| 属性 | 配置文件 | 缩放条件 | 自动缩放设置由一个或多个配置文件组成。 自动缩放引擎每次运行时,将会执行一个配置文件。 每个自动缩放设置最多可配置 20 个配置文件。 |
| 配置文件 | 姓名 | 配置文件的名称。 您可以选择任何便于您识别此配置文件的名称。 | |
| 配置文件 | 最大容量 | 实例限制 - 最大值 | 允许的最大容量。 此值可以确保自动缩放在执行此配置文件时,不会将资源扩展到超过此数字。 |
| 配置文件 | 容量.最小值 | 实例限制 - 最小值 | 允许的最小容量。 此值可以确保自动缩放在执行此配置文件时,不会将资源缩减到低于此数字 |
| 配置文件 | capacity.default | 实例限制 - 默认值 | 如果读取资源指标时出现问题,且当前容量低于默认容量,则自动缩放将扩展到默认值。 此操作可确保资源的可用性。 如果当前容量已大于默认容量,则自动缩放不会缩减。 |
| 配置文件 | 规则 | 规则 | 自动缩放会根据配置文件中的规则,在最大容量和最小容量之间自动进行伸缩。 在配置文件中定义最多 10 个单独的规则。 通常,规则是成对定义的:一个用于确定何时横向扩展,另一个用于确定何时横向缩减。 |
| 规则 | metricTrigger 指标触发器 | 比例尺规则 | 定义规则的指标条件。 |
| metricTrigger 指标触发器 | metricName (指标名称) | 指标名称 | 指标的名称。 |
| metricTrigger 指标触发器 | metricResourceUri | 发出该指标的资源 ID。 在大多数情况下,它与缩放的资源相同。 在某些情况下,它可能不同。 例如,可以基于存储队列中的消息数缩放虚拟机规模集。 | |
| metricTrigger 指标触发器 | 时间粒度 | 时间粒度(分钟) | 指标采样持续时间。 例如,timeGrain = "PT1M" 表示应使用 statistic 元素中指定的聚合方法每 1 分钟聚合一次指标。 |
| metricTrigger 指标触发器 | 统计数据 | 时间粒度统计信息 | timeGrain 时间段内的聚合方法。 例如,statistic = "Average" 且 timeGrain = "PT1M" 表示每分钟取平均值来聚合指标。 此属性规定指标的采样方式。 |
| metricTrigger 指标触发器 | 时间窗口 | 持续时间 | 用于回溯指标的时间范围。 例如,timeWindow = "PT10M" 表示每次自动缩放运行时,都会查询过去 10 分钟的指标。 使用该时间范围可将指标规范化,避免对暂时性的峰值作出反应。 |
| metricTrigger 指标触发器 | 时间聚合 | 时间聚合 | 用于聚合已采样指标的聚合方法。 例如,timeAggregation = "Average" 应通过取平均值对采样指标进行聚合。 上例取 10 个 1 分钟样本并求其平均值。 |
| metricTrigger 指标触发器 | dividePerInstance | 将该值除以实例数。 | 如果 dividePerInstance = true,则指标除以资源中的实例数。 当某些指标最适合使用 Sum 或 Count 进行聚合,并且需要根据活跃实例数进行归一化时,此选项非常有用。 例如,如果指标是队列长度,并且合并为 Sum,则当 dividePerInstance = true 时,该指标将除以虚拟机规模集中的实例数,提供所有虚拟机的平均队列长度。
dividePerInstance 对按 Sum 和 Count 聚合的指标很有用,但不适用于 Average 聚合 |
| 规则 | scaleAction | 操作 | 当规则的 metricTrigger 被触发时要采取的操作。 |
| scaleAction | 方向 | 操作 | “Increase”用于横向扩展,“Decrease”用于横向缩减。 |
| scaleAction | 值 | 实例计数 | 要将资源容量增大或减小多少。 |
| scaleAction | 冷却时间 | 冷却(分钟) | 一次缩放操作完成后,到再次进行缩放操作之前的等待时间。 冷却期在缩容或扩容后生效。 例如,如果 cooldown = "PT10M",则自动缩放在接下来的 10 分钟内不会再次尝试缩放。 冷却期是为了在添加或删除实例后使指标稳定下来。 |
自动缩放配置
每个自动缩放设置最多可定义 20 个不同的配置文件。
自动缩放配置文件有三种类型:
默认配置文件:如果您不需要根据特定日期和时间或一周中的某一天来扩缩资源,请使用默认配置文件。 没有适用于当前日期和时间的其他配置文件时,默认配置文件将运行。 只能有一个默认的配置文件。
固定日期配置文件:固定日期配置文件适用于单个日期和时间。 使用固定日期配置文件为特定事件设置缩放规则。 此配置文件仅会在该事件的日期和时间运行一次。 对于所有其他时间,自动缩放使用默认配置文件。
... "profiles": [ { "name": " regularProfile", "capacity": { ... }, "rules": [ ... ] }, { "name": "eventProfile", "capacity": { ... }, "rules": [ ... ], "fixedDate": { "timeZone": "Pacific Standard Time", "start": "2017-12-26T00:00:00", "end": "2017-12-26T23:59:00" } } ]注意
start配置文件的end和fixedDate时间之间的天数不能超过 365 天。重复配置文件:重复配置文件用于一周中的某一天或某几天。 重复配置文件的架构定义不包含结束日期。 周期性配置文件的结束日期和时间由下一个配置文件的开始时间确定。 使用门户配置定期配置文件时,默认配置文件会自动更新为在为定期配置文件指定的结束时间开始。 有关配置多个配置文件的详细信息,请参阅使用多个配置文件进行自动缩放
这里的部分架构模式示例显示了一种重复出现的模式。 它从 06:00 开始,在周六和周日19:00 结束。 默认配置文件已修改为从周六和周日的 19:00 开始。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.Insights/ autoscaleSettings", "apiVersion": "2015-04-01", "name": "VMSS1-Autoscale-607", "location": "chinaeast2", "properties": { "name": "VMSS1-Autoscale-607", "enabled": true, "targetResourceUri": "/subscriptions/ abc123456-987-f6e5-d43c-9a8d8e7f6541/ resourceGroups/rg-vmss1/providers/ Microsoft.Compute/ virtualMachineScaleSets/VMSS1", "profiles": [ { "name": "Weekend profile", "capacity": { ... }, "rules": [ ... ], "recurrence": { "frequency": "Week", "schedule": { "timeZone": "E. Europe Standard Time", "days": [ "Saturday", "Sunday" ], "hours": [ 6 ], "minutes": [ 0 ] } } }, { "name": "{\"name\":\"Auto created default scale condition\",\"for\":\"Weekend profile\"}", "capacity": { ... }, "recurrence": { "frequency": "Week", "schedule": { "timeZone": "E. Europe Standard Time", "days": [ "Saturday", "Sunday" ], "hours": [ 19 ], "minutes": [ 0 ] } }, "rules": [ ... ] } ], "notifications": [], "targetResourceLocation": "chinaeast2" } } ] }
自动缩放评估
自动缩放设置可以有多个配置。 每个配置文件可以包含多个规则。 每次自动缩放任务运行时,都会先选择该时刻适用的配置文件。 然后,自动缩放会评估最小值、最大值以及配置文件中的任何指标规则,并确定是否需要执行缩放操作。 自动缩放作业每 30 到 60 秒运行一次,具体取决于资源类型。 发生缩放操作后,自动缩放作业将等待冷却期,然后再次缩放。 冷却期对横向扩展和横向缩减操作均适用。
自动缩放将使用哪个配置文件?
每次运行自动缩放服务时,都会按以下顺序评估配置文件:
- 固定日期配置文件
- 周期性配置
- 默认配置文件
将使用找到的第一个合适的配置文件。
自动缩放如何评估多个规则?
自动缩放确定要运行哪个配置文件后,会评估该配置文件中的横向扩展规则,也就是 direction = "Increase" 的规则。 如果触发了一条或多条横向扩展规则,自动缩放会根据每条规则中指定的 scaleAction 计算出其所确定的新容量。 如果触发了多个横向扩展规则,自动缩放会扩展到所指定的最高容量,以确保服务可用性。
例如,假设有两个规则:规则 1 指定横向扩展 3 个实例,规则 2 指定横向扩展 5 个实例。 如果这两个规则都被触发,自动缩放会增加 5 个实例。 同样,如果一个规则指定横向扩展 3 个实例,而另一个规则指定横向扩展 15%,则将使用两个实例计数中的较高值。
如果未触发横向扩展规则,自动缩放会评估缩减规则,即 direction = "Decrease" 的规则。 如果触发了所有横向缩减规则,自动缩放只会横向缩减。
自动缩放根据这些规则中每条规则的 scaleAction 确定新的容量。 为了确保服务可用性,自动缩放会尽可能少地缩减,以实现指定的最大容量。 例如,假设有两条横向缩减规则:一个规则将容量减小 50%,另一个将容量减小 3 个实例。 如果第一个规则得出的结果是 5 个实例,而第二个规则得出的结果是 7 个实例,则自动缩放会将实例数缩减到 7 个实例。
自动缩放每次计算缩减操作的结果时,都会评估该操作是否会触发扩展操作。 扩缩容操作触发相反扩缩容操作的情况称为“抖动”。 自动缩放可能会推迟缩容操作以避免频繁波动,也可能实际缩放的数量少于规则中指定的数量。 有关抖动的详细信息,请参阅自动缩放中的抖动。
自动缩放如何评估冷却?
每次执行缩放操作后,自动缩放都会记录该次操作发生的时间,并在再次向任一方向缩放之前等待一段冷却时间。 实际生效的冷却时间是最近触发的规则对应的冷却时间,而不是每个方向分别有单独的冷却时间。 横向扩展会临时阻止横向扩展冷却的下一项缩放操作,而横向缩减会临时阻止横向缩减冷却的下一项缩放操作。
假设有一个配置,其横向扩展冷却时间为 60 分钟,横向缩减冷却时间为 40 分钟:
- 10:00 时,CPU 峰值触发横向扩展操作。 60 分钟的横向扩展冷却时间生效,因此在 11:00 之前不会执行进一步的扩展操作。
- CPU 恢复正常,并于 13:00 运行横向缩减操作。 现在应用 40 分钟的降温刻度,因此在 13:40 之前,任何方向都不会发生缩放操作。
- CPU 在 13:20 再次出现峰值,并且满足横向扩展规则的条件。 由于横向缩减冷却仍然有效,因此自动缩放会延迟横向扩展。
- 横向扩展操作在 13:40 执行,此时最近一次缩放操作(即 13:00 的横向缩减操作)的冷却时间已结束。
后续步骤
详细了解自动缩放: