在 Windows 上创建虚拟机规模集和部署高度可用的应用

利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率、内存需求或网络流量)进行自动缩放。 在本教程中,将在 Azure 中部署虚拟机规模集。 你将学习如何执行以下操作:

使用自定义脚本扩展定义要缩放的 IIS 站点

为规模集创建负载均衡器

创建虚拟机规模集

增加或减少规模集中的实例数

创建自动缩放规则

本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行Get-Module -ListAvailable AzureRM即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块

规模集概述

利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 规模集中的 VM 将分布在逻辑容错域和更新域的一个或多个放置组中。 这些放置组由配置类似的 VM 组成,与可用性集相似。

可以根据需要在规模集中创建 VM。 可以定义自动缩放规则来控制如何以及何时在规模集中添加或删除 VM。 这些规则可以根据 CPU 负载、内存用量或网络流量等指标触发。

使用 Azure 平台映像时,规模集最多支持 1,000 个 VM。 对于有重要安装或 VM 自定义要求的工作负荷,可能需要创建自定义 VM 映像。 使用自定义映像时,在规模集中最多可以创建 300 个 VM。

创建用于缩放的应用

创建规模集之前,需使用New-AzureRmResourceGroup创建一个资源组。 以下示例在 ChinaEast 位置创建一个名为 myResourceGroupAutomate 的资源组:

PowerShell复制

New-AzureRmResourceGroup-ResourceGroupNamemyResourceGroupScaleSet-LocationChinaEast

在前面的教程中,你已了解如何使用自定义脚本扩展来自动执行 VM 配置。 创建一个规模集配置,然后应用自定义脚本扩展来安装并配置 IIS:

PowerShell复制

# Create a config object$vmssConfig=New-AzureRmVmssConfig`-LocationChinaEast `-SkuCapacity2`-SkuNameStandard_DS2 `-UpgradePolicyModeAutomatic# Define the script for your Custom Script Extension to run$publicSettings= @{"fileUris"= (,"https://raw.githubusercontent.com/iainfoulds/azure-samples/master/automate-iis.ps1");"commandToExecute"="powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"}# Use Custom Script Extension to install IIS and configure basic websiteAdd-AzureRmVmssExtension-VirtualMachineScaleSet$vmssConfig`-Name"customScript"`-Publisher"Microsoft.Compute"`-Type"CustomScriptExtension"`-TypeHandlerVersion1.8`-Setting$publicSettings

创建规模负载均衡器

Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,并仅将流量分发给正常运行的 VM。 有关详细信息,请参阅有关如何对 Windows 虚拟机进行负载均衡的下一个教程。

创建一个具有公共 IP 地址、对端口 80 上的 Web 流量进行分发的负载均衡器:

PowerShell复制

# Create a public IP address$publicIP=New-AzureRmPublicIpAddress`-ResourceGroupNamemyResourceGroupScaleSet `-LocationChinaEast `-AllocationMethodStatic `-NamemyPublicIP# Create a frontend and backend IP pool$frontendIP=New-AzureRmLoadBalancerFrontendIpConfig`-NamemyFrontEndPool `-PublicIpAddress$publicIP$backendPool=New-AzureRmLoadBalancerBackendAddressPoolConfig-NamemyBackEndPool# Create the load balancer$lb=New-AzureRmLoadBalancer`-ResourceGroupNamemyResourceGroupScaleSet `-NamemyLoadBalancer `-LocationChinaEast `-FrontendIpConfiguration$frontendIP`-BackendAddressPool$backendPool# Create a load balancer health probe on port 80Add-AzureRmLoadBalancerProbeConfig-NamemyHealthProbe `-LoadBalancer$lb`-Protocoltcp `-Port80`-IntervalInSeconds15`-ProbeCount2# Create a load balancer rule to distribute traffic on port 80Add-AzureRmLoadBalancerRuleConfig`-NamemyLoadBalancerRule `-LoadBalancer$lb`-FrontendIpConfiguration$lb.FrontendIpConfigurations[0] `-BackendAddressPool$lb.BackendAddressPools[0] `-ProtocolTcp `-FrontendPort80`-BackendPort80# Update the load balancer configurationSet-AzureRmLoadBalancer-LoadBalancer$lb

创建规模集

现在,使用New-AzureRmVmss创建一个虚拟机规模集。 以下示例创建一个名为 myScaleSet 的规模集:

PowerShell复制

# Reference a virtual machine image from the gallerySet-AzureRmVmssStorageProfile$vmssConfig`-ImageReferencePublisherMicrosoftWindowsServer `-ImageReferenceOfferWindowsServer `-ImageReferenceSku2016-Datacenter `-ImageReferenceVersionlatest# Set up information for authenticating with the virtual machineSet-AzureRmVmssOsProfile$vmssConfig`-AdminUsernameazureuser `-AdminPasswordP@ssword! `-ComputerNamePrefixmyVM# Create the virtual network resources$subnet=New-AzureRmVirtualNetworkSubnetConfig`-Name"mySubnet"`-AddressPrefix10.0.0.0/24$vnet=New-AzureRmVirtualNetwork`-ResourceGroupName"myResourceGroupScaleSet"`-Name"myVnet"`-Location"ChinaEast"`-AddressPrefix10.0.0.0/16`-Subnet$subnet$ipConfig=New-AzureRmVmssIpConfig`-Name"myIPConfig"`-LoadBalancerBackendAddressPoolsId$lb.BackendAddressPools[0].Id `-SubnetId$vnet.Subnets[0].Id# Attach the virtual network to the config objectAdd-AzureRmVmssNetworkInterfaceConfiguration`-VirtualMachineScaleSet$vmssConfig`-Name"network-config"`-Primary$true`-IPConfiguration$ipConfig# Create the scale set with the config object (this step might take a few minutes)New-AzureRmVmss`-ResourceGroupNamemyResourceGroupScaleSet `-NamemyScaleSet `-VirtualMachineScaleSet$vmssConfig

创建和配置所有的规模集资源和 VM 需要几分钟时间。

测试应用

若要查看 IIS 网站的实际运行情况,请使用Get-AzureRmPublicIPAddress获取负载均衡器的公共 IP 地址。 以下示例获取作为规模集的一部分创建的 myPublicIP 的 IP 地址:

PowerShell复制

Get-AzureRmPublicIPAddress-ResourceGroupNamemyResourceGroupScaleSet-NamemyPublicIP | select IpAddress

将公共 IP 地址输入到 Web 浏览器中。 将显示应用,包括负载均衡器将流量分发到的 VM 的主机名:

若要查看规模集的实际运行情况,可以强制刷新 Web 浏览器,以查看负载均衡器如何在运行应用的所有 VM 之间分发流量。

管理任务

在规模集的整个生命周期内,可能需要运行一个或多个管理任务。 此外,可能还需要创建自动执行各种生命周期任务的脚本。 Azure PowerShell 提供了一种用于执行这些任务的快速方法。 以下是一些常见任务。

查看规模集中的 VM

若要查看规模集中运行的 VM 的列表,请使用Get-AzureRmVmssVM,如下所示:

PowerShell复制

# Get current scale set$scaleset=Get-AzureRmVmss`-ResourceGroupNamemyResourceGroupScaleSet `-VMScaleSetNamemyScaleSet# Loop through the instanaces in your scale setfor($i=1;$i-le($scaleset.Sku.Capacity-1);$i++) {Get-AzureRmVmssVM-ResourceGroupNamemyResourceGroupScaleSet `-VMScaleSetNamemyScaleSet `-InstanceId$i}

增加或减少 VM 实例

若要查看规模集中当前包含的实例数,请使用Get-AzureRmVmss并查询 sku.capacity:

PowerShell复制

Get-AzureRmVmss-ResourceGroupNamemyResourceGroupScaleSet `-VMScaleSetNamemyScaleSet | `    Select-ExpandPropertySku

然后,可以使用Update-AzureRmVmss手动增加或减少规模集中虚拟机的数目。 以下示例将规模集中 VM 的数目设置为 5:

PowerShell复制

# Get current scale set$scaleset=Get-AzureRmVmss`-ResourceGroupNamemyResourceGroupScaleSet `-VMScaleSetNamemyScaleSet# Set and update the capacity of your scale set$scaleset.sku.capacity =5Update-AzureRmVmss-ResourceGroupNamemyResourceGroupScaleSet `-NamemyScaleSet `-VirtualMachineScaleSet$scaleset

这将花费数分钟来更新规模集中指定数目的实例。

配置自动缩放规则

你可以定义自动缩放规则,而不是手动缩放规模集中实例的数目。 这些规则监视规模集中的实例,并根据所定义的指标和阈值做出相应响应。 如果平均 CPU 负载高于 60% 且持续时间超过 5 分钟,以下示例将增加一个实例。 如果平均 CPU 负载低于 30% 且持续时间超过 5 分钟,则将减少一个实例:

PowerShell复制

# Define your scale set information$mySubscriptionId= (Get-AzureRmSubscription).Id$myResourceGroup="myResourceGroupScaleSet"$myScaleSet="myScaleSet"$myLocation="China North"# Create a scale up rule to increase the number instances after 60% average CPU usage exceeded for a 5 minute period$myRuleScaleUp=New-AzureRmAutoscaleRule`-MetricName"Percentage CPU"`-MetricResourceId/subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet`-OperatorGreaterThan `-MetricStatisticAverage `-Threshold60`-TimeGrain00:01:00`-TimeWindow00:05:00`-ScaleActionCooldown00:05:00`-ScaleActionDirectionIncrease `-ScaleActionValue1# Create a scale down rule to decrease the number of instances after 30% average CPU usage over a 5 minute period$myRuleScaleDown=New-AzureRmAutoscaleRule`-MetricName"Percentage CPU"`-MetricResourceId/subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet`-OperatorLessThan `-MetricStatisticAverage `-Threshold30`-TimeGrain00:01:00`-TimeWindow00:05:00`-ScaleActionCooldown00:05:00`-ScaleActionDirectionDecrease `-ScaleActionValue1# Create a scale profile with your scale up and scale down rules$myScaleProfile=New-AzureRmAutoscaleProfile`-DefaultCapacity2`-MaximumCapacity10`-MinimumCapacity2`-Rules$myRuleScaleUp,$myRuleScaleDown`-Name"autoprofile"# Apply the autoscale rulesAdd-AzureRmAutoscaleSetting`-Location$myLocation`-Name"autosetting"`-ResourceGroup$myResourceGroup`-TargetResourceId/subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet`-AutoscaleProfiles$myScaleProfile

后续步骤

在本教程中,你已创建了一个虚拟机规模集。 你已学习了如何执行以下操作:

使用自定义脚本扩展定义要缩放的 IIS 站点

为规模集创建负载均衡器

创建虚拟机规模集

增加或减少规模集中的实例数

创建自动缩放规则

请继续学习下一教程,详细了解虚拟机的负载均衡概念。

对虚拟机进行负载均衡

立即访问http://market.azure.cn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容