如何实现虚机实例动态伸缩

云计算的一个主要的好处就是你能为应用程序增加或减少的所需的虚机实例。虚机在云计算中是相对比较昂贵的资源,减少不必要的虚机消耗能够在Windows Azure中节约可观的费用

在许多常用的场景中,大多数用户使用应用程序的时间在上午9点和下午5之间,如果你有2~3台虚机提供负载均衡的服务,在晚上5点到第二天上午9点之间,可能只要一台虚机就能满足需求,这样每天就能省下16个小时的虚机成本。在Windows Azure中,使用一些简单的 PowerShell 脚本和任务计划程序作业,您可以轻松地依据日程安排的需求实现虚机资源的动态伸缩。

下面演示如何实现这一做法:

  1. 首先假设我有两个虚机”Shvm01”和” Shvm02”组成一个负载均衡的服务,现在我们要根据日程安排移除和恢复其中的一个虚机” Shvm02”。为了确保服务名和虚机名的正确,在编辑PowerShell 脚本之前,你可以在powershell里面运行”get-Azurevm”查看一下你当前的VM信息, 下面命令返回ServiceName = “shvm01”, 和虚机名”shvm02”。如果你已经知道服务名和虚机名,可以略过步骤1和2

 

2. 在能够运行”get-Azurevm”的命令之前,你还需要运行Set-AzureSubscription [SUBSCRIPTION NAME] -CurrentStorageAccount [STORAGE ACCOUNT]来指定你的Windows Azure订阅名。注意推荐使用”administrator”的权限来启动PowerShell

3. 现在创建两个PowerShell的脚本分别实现恢复虚机和移除虚机的功能

3.1 remove.ps1脚本,用来移除虚机,并把虚机配置存在本机的一个目录里面

#remove.ps1

Import-Module 'C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1'       

# 用你的Windows Azure订阅名和创建虚机的Storage Account来取代[SUBSCRIPTION NAME]和[STORAGE ACCOUNT]

Set-AzureSubscription [SUBSCRIPTION NAME] -CurrentStorageAccount [STORAGE ACCOUNT]

Select-AzureSubscription [SUBSCRIPTION NAME]

 $svcName = ‘shvm01’

 # 输出虚机'shvm02' 的配置并存到C盘的temp目录里面

Export-AzureVM -ServiceName $svcName -Name 'shvm02' -Path 'C:\Temp\shvm02.xml' 

# 移除虚机'shvm02'

Remove-AzureVM -ServiceName $svcName -Name 'shvm02'

 3.2 add.ps1脚本,用来恢复虚机。

#add.ps1

Import-Module 'C:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Azure\Azure.psd1'

 # 用你的Windows Azure订阅名和创建虚机的Storage Account来取代[SUBSCRIPTION NAME]和[STORAGE ACCOUNT]

Set-AzureSubscription [SUBSCRIPTION NAME] -CurrentStorageAccount [STORAGE ACCOUNT]

Select-AzureSubscription [SUBSCRIPTION NAME] 

$svcName = 'shvm01' 

# 恢复虚机'shvm02'

$VM = Import-AzureVM -Path 'C:\Temp\shvm02.xml' 

New-AzureVM -ServiceName $svcName -VM $VM

 

现在就在”Task Scheduler”创建两个任务来调度两个脚本, 由于比较简单,我下面只列出如何创建移除虚机任务

  1. 在命令行下,运行” Taskschd.msc
  2. 在”Task Scheduler Library”,创建一个新的任务
  3. 取一个名字,并选择”Run whether user is logged on or not”

4. 新建一个触发器(trigger),选择每天5:30PM运行

5. 新建一个action, 让它运行powershell脚本。点OK的时候输入的用户和密码,这样任务就能按调度运行。重复同样的步骤来调用add.ps1的脚本就可以了