连冠华,云计算资深架构师

VMSS 中 Auto Scale 基本原理及诊断

在前面的介绍中,我们看到通过定义规则可以实现虚拟机扩展集的 auto scale,那么在后台执行上 VMSS 的扩展依赖于哪些组件,出现问题(比如自动扩展没有发生的时候),我们在拨打 400 之前,如何快速的检查是否是配置问题?

本文简单介绍一下 VMSS下auto scale 的原理,以及出现问题如何快速的检查问题。下图展示了 Azure 的计算资源监控和数据收集机制,从数据源来讲,Azure 的监控数据可以来自于应用程序,诊断日志,系统、自定义的指标数据,也包括审计和操作日志。

 

例如在我们 VMSS 例子中用于自动化扩展的度量数据,来自于 Linux Diagnostic 扩展,扩展载我们做 ARM 模版定义的时候必须正确配置才能获得数据:

 

通过在 Guest OS 获得的 metric 数据会被保存在 Azure Storage 的 Table 当中,也可以保存在 EventHub 当中进行日志收集处理,收集的数据会被用于告警或者自动扩展处理,对于这些日志数据的访问,你可以通过 Azure 的 portal,或者 Powershell,或者使用命令行,或者使用 REST API 提供给第三方的工具进行监控:

 

在 VMSS 的 ARM 模板中,我们已经预先定义了一自动扩展的规则,获取数据的时间窗口,周期,进行 scale out 或者 scale in 的规则,那么在运行的时候,自动扩展引擎会根据定义的规则,时间窗口和度量值检测是否满足触发条件,一旦满足,就会执行相应的操作,例如增减,减少虚拟机,邮件通知等等:

 

到此为止,我简单介绍了一下 VMSS 的 auto scale 的工作原理和机制,那么现在问题来了,你部署了一个 VMSS 包含多个虚拟机,当压力增加的时候,你发现自动扩展没有发生,应该从哪些地方入手?

1.当然是检查你的 ARM 模版,看看你的 LinuxDiagnotics 是否定义,autoscale 是否设置,规则是否正确等等。

2.打开你的 Powershell 并用 RM 登录,VMSS 的 autoscale 依赖于两个 Resource Provider,一个是 Insights, 一个是 Microsoft.Compute, 要确保他们的状态都是 “Registered”,否则需要使用命令 Register-AzureRmResourceProvider 手工注册这两个 provider:

 

3.登录到新的 Azure Portal,单击你的 VMSS 的资源组,你会看到上次部署的记录,检查部署日志,正常情况下,所有的部署操作都应该是成功的,如果有任何问题,查看详细日志,修复错误操作并重新部署:

 

4.检查你的自动扩展选项是否为打开状态:

 

5.根据我们之前对于 VMSS 自动扩展的机制的了解,metrics 数据会被写到 Azure Storage Account 里面,如果上面的配置都没有问题,那么我们需要看一下 VMSS 里面创建的存储账号,其中一个存储账号是存放诊断数据的:

 

如果你看到 WADMetrics* 这样的表产生了,至少说明你的诊断的存储账号配置是正确的;如果你没有看到任何这样的如下的表产生,则说明你的存储账号和自动扩展配置是错误的

 

6.请下载相关的 Azure 存储管理工具,比如 http://storageexplorer.com/,拷贝你的诊断存储账号的账户名和密码,进行连接,查看 WAD* 表中是否存在数据,WADMetricsPT1H* 存放每小时汇总数据,WADMetricsPT1M* 存放每分钟采集数据,如果你看到数据产生,则说明你的 Linux Diag Agent 工作正常:

 

7.到此为止,如果上述检查都通过,而你看到你的 VMSS中 的虚拟机你所希望的度量值的确达到了要求,那么你需要看看你在 ARM 模板中定义的度量值和采集到的值是否一样,因为就 CPU 而言,也有非常多的度量值,例如早本例中,我们使用的是 “\\Processor\\PercentUserTime”:

 

那么在 storage explorer 中,选择 Query,在查询条件中 field 选择 CounterName,查询值选择 “\Processor\PercentUserTime“,查询该值的大小:

 

在大部分的情况下,如果前面的设置没问题,你的 auto scale 还是不工作,一般都是你的度量值设置有问题,比如如果你使用的是 \Processor\PercentIdleTime,但实际上你看到度量值中这个并不高,你需要检查并调整下你的自动扩展策略。

基本上绝大部分问题都可以在上述的诊断中解决,了解了 VMSS 的基本工作原理,可以帮助我们更好的使用这个强大的功能~