在 Windows 上创建虚拟机规模集和部署高度可用的应用
2017-11-21 11:32
543 查看
利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率、内存需求或网络流量)进行自动缩放。 在本教程中,将在 Azure 中部署虚拟机规模集。 你将学习如何执行以下操作:
使用自定义脚本扩展定义要缩放的 IIS 站点
为规模集创建负载均衡器
创建虚拟机规模集
增加或减少规模集中的实例数
创建自动缩放规则
本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行
可以根据需要在规模集中创建 VM。 可以定义自动缩放规则来控制如何以及何时在规模集中添加或删除 VM。 这些规则可以根据 CPU 负载、内存用量或网络流量等指标触发。
使用 Azure 平台映像时,规模集最多支持 1,000 个 VM。 对于有重要安装或 VM 自定义要求的工作负荷,可能需要创建自定义 VM 映像。 使用自定义映像时,在规模集中最多可以创建 300 个 VM。
PowerShell复制
在前面的教程中,你已了解如何使用自定义脚本扩展来自动执行 VM 配置。 创建一个规模集配置,然后应用自定义脚本扩展来安装并配置 IIS:
PowerShell复制
创建一个具有公共 IP 地址、对端口 80 上的 Web 流量进行分发的负载均衡器:
PowerShell复制
PowerShell复制
创建和配置所有的规模集资源和 VM 需要几分钟时间。
PowerShell复制
将公共 IP 地址输入到 Web 浏览器中。 将显示应用,包括负载均衡器将流量分发到的 VM 的主机名:
若要查看规模集的实际运行情况,可以强制刷新 Web 浏览器,以查看负载均衡器如何在运行应用的所有 VM 之间分发流量。
PowerShell复制
PowerShell复制
然后,可以使用 Update-AzureRmVmss 手动增加或减少规模集中虚拟机的数目。 以下示例将规模集中 VM 的数目设置为 5:
PowerShell复制
这将花费数分钟来更新规模集中指定数目的实例。
PowerShell复制
使用自定义脚本扩展定义要缩放的 IIS 站点
为规模集创建负载均衡器
创建虚拟机规模集
增加或减少规模集中的实例数
创建自动缩放规则
请继续学习下一教程,详细了解虚拟机的负载均衡概念。
对虚拟机进行负载均衡
立即访问http://market.azure.cn
使用自定义脚本扩展定义要缩放的 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 -ResourceGroupName myResourceGroupScaleSet -Location ChinaEast
在前面的教程中,你已了解如何使用自定义脚本扩展来自动执行 VM 配置。 创建一个规模集配置,然后应用自定义脚本扩展来安装并配置 IIS:
PowerShell复制
# Create a config object $vmssConfig = New-AzureRmVmssConfig ` -Location ChinaEast ` -SkuCapacity 2 ` -SkuName Standard_DS2 ` -UpgradePolicyMode Automatic # 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 website Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmssConfig ` -Name "customScript" ` -Publisher "Microsoft.Compute" ` -Type "CustomScriptExtension" ` -TypeHandlerVersion 1.8 ` -Setting $publicSettings
创建规模负载均衡器
Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,并仅将流量分发给正常运行的 VM。 有关详细信息,请参阅有关如何对 Windows 虚拟机进行负载均衡的下一个教程。创建一个具有公共 IP 地址、对端口 80 上的 Web 流量进行分发的负载均衡器:
PowerShell复制
# Create a public IP address $publicIP = New-AzureRmPublicIpAddress ` -ResourceGroupName myResourceGroupScaleSet ` -Location ChinaEast ` -AllocationMethod Static ` -Name myPublicIP # Create a frontend and backend IP pool $frontendIP = New-AzureRmLoadBalancerFrontendIpConfig ` -Name myFrontEndPool ` -PublicIpAddress $publicIP $backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name myBackEndPool # Create the load balancer $lb = New-AzureRmLoadBalancer ` -ResourceGroupName myResourceGroupScaleSet ` -Name myLoadBalancer ` -Location ChinaEast ` -FrontendIpConfiguration $frontendIP ` -BackendAddressPool $backendPool # Create a load balancer health probe on port 80 Add-AzureRmLoadBalancerProbeConfig -Name myHealthProbe ` -LoadBalancer $lb ` -Protocol tcp ` -Port 80 ` -IntervalInSeconds 15 ` -ProbeCount 2 # Create a load balancer rule to distribute traffic on port 80 Add-AzureRmLoadBalancerRuleConfig ` -Name myLoadBalancerRule ` -LoadBalancer $lb ` -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] ` -BackendAddressPool $lb.BackendAddressPools[0] ` -Protocol Tcp ` -FrontendPort 80 ` -BackendPort 80 # Update the load balancer configuration Set-AzureRmLoadBalancer -LoadBalancer $lb
创建规模集
现在,使用 New-AzureRmVmss 创建一个虚拟机规模集。 以下示例创建一个名为 myScaleSet 的规模集:PowerShell复制
# Reference a virtual machine image from the gallery Set-AzureRmVmssStorageProfile $vmssConfig ` -ImageReferencePublisher MicrosoftWindowsServer ` -ImageReferenceOffer WindowsServer ` -ImageReferenceSku 2016-Datacenter ` -ImageReferenceVersion latest # Set up information for authenticating with the virtual machine Set-AzureRmVmssOsProfile $vmssConfig ` -AdminUsername azureuser ` -AdminPassword P@ssword! ` -ComputerNamePrefix myVM # Create the virtual network resources $subnet = New-AzureRmVirtualNetworkSubnetConfig ` -Name "mySubnet" ` -AddressPrefix 10.0.0.0/24 $vnet = New-AzureRmVirtualNetwork ` -ResourceGroupName "myResourceGroupScaleSet" ` -Name "myVnet" ` -Location "ChinaEast" ` -AddressPrefix 10.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 object Add-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 ` -ResourceGroupName myResourceGroupScaleSet ` -Name myScaleSet ` -VirtualMachineScaleSet $vmssConfig
创建和配置所有的规模集资源和 VM 需要几分钟时间。
测试应用
若要查看 IIS 网站的实际运行情况,请使用 Get-AzureRmPublicIPAddress 获取负载均衡器的公共 IP 地址。 以下示例获取作为规模集的一部分创建的 myPublicIP 的 IP 地址:PowerShell复制
Get-AzureRmPublicIPAddress -ResourceGroupName myResourceGroupScaleSet -Name myPublicIP | select IpAddress
将公共 IP 地址输入到 Web 浏览器中。 将显示应用,包括负载均衡器将流量分发到的 VM 的主机名:
若要查看规模集的实际运行情况,可以强制刷新 Web 浏览器,以查看负载均衡器如何在运行应用的所有 VM 之间分发流量。
管理任务
在规模集的整个生命周期内,可能需要运行一个或多个管理任务。 此外,可能还需要创建自动执行各种生命周期任务的脚本。 Azure PowerShell 提供了一种用于执行这些任务的快速方法。 以下是一些常见任务。查看规模集中的 VM
若要查看规模集中运行的 VM 的列表,请使用 Get-AzureRmVmssVM,如下所示:PowerShell复制
# Get current scale set $scaleset = Get-AzureRmVmss ` -ResourceGroupName myResourceGroupScaleSet ` -VMScaleSetName myScaleSet # Loop through the instanaces in your scale set for ($i=1; $i -le ($scaleset.Sku.Capacity - 1); $i++) { Get-AzureRmVmssVM -ResourceGroupName myResourceGroupScaleSet ` -VMScaleSetName myScaleSet ` -InstanceId $i }
增加或减少 VM 实例
若要查看规模集中当前包含的实例数,请使用 Get-AzureRmVmss 并查询 sku.capacity:PowerShell复制
Get-AzureRmVmss -ResourceGroupName myResourceGroupScaleSet ` -VMScaleSetName myScaleSet | ` Select -ExpandProperty Sku
然后,可以使用 Update-AzureRmVmss 手动增加或减少规模集中虚拟机的数目。 以下示例将规模集中 VM 的数目设置为 5:
PowerShell复制
# Get current scale set $scaleset = Get-AzureRmVmss ` -ResourceGroupName myResourceGroupScaleSet ` -VMScaleSetName myScaleSet # Set and update the capacity of your scale set $scaleset.sku.capacity = 5 Update-AzureRmVmss -ResourceGroupName myResourceGroupScaleSet ` -Name myScaleSet ` -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 ` -Operator GreaterThan ` -MetricStatistic Average ` -Threshold 60 ` -TimeGrain 00:01:00 ` -TimeWindow 00:05:00 ` -ScaleActionCooldown 00:05:00 ` -ScaleActionDirection Increase ` -ScaleActionValue 1 # 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 ` -Operator LessThan ` -MetricStatistic Average ` -Threshold 30 ` -TimeGrain 00:01:00 ` -TimeWindow 00:05:00 ` -ScaleActionCooldown 00:05:00 ` -ScaleActionDirection Decrease ` -ScaleActionValue 1 # Create a scale profile with your scale up and scale down rules $myScaleProfile = New-AzureRmAutoscaleProfile ` -DefaultCapacity 2 ` -MaximumCapacity 10 ` -MinimumCapacity 2 ` -Rules $myRuleScaleUp,$myRuleScaleDown ` -Name "autoprofile" # Apply the autoscale rules Add-AzureRmAutoscaleSetting ` -Location $myLocation ` -Name "autosetting" ` -ResourceGroup $myResourceGroup ` -TargetResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet ` -AutoscaleProfiles $myScaleProfile
后续步骤
在本教程中,你已创建了一个虚拟机规模集。 你已学习了如何执行以下操作:使用自定义脚本扩展定义要缩放的 IIS 站点
为规模集创建负载均衡器
创建虚拟机规模集
增加或减少规模集中的实例数
创建自动缩放规则
请继续学习下一教程,详细了解虚拟机的负载均衡概念。
对虚拟机进行负载均衡
立即访问http://market.azure.cn
相关文章推荐
- 在 Windows 上创建虚拟机规模集和部署高度可用的应用利用
- 在 Linux 上创建虚拟机规模集和部署高度可用的应用
- 在 Linux 上创建虚拟机规模集和部署高度可用的应用
- Qt 5.9.1 在Windows下部署小工具、企业级应用总结
- 用MDT 2012为企业部署windows 7(七)--创建标准操作系统部署任务序列
- Memcached高速缓存服务器部署及应用(一、Memcached在Windows平台下安装与配置)
- Linux应用服务器搭建手册—Weblogic服务域的创建与部署
- 继之前SCVMM WinRM问题后重新添加群集后Windows Azure Pack创建虚拟机失败
- Azure 项目构建 – 部署高可用的 Python Web 应用
- Windows 安装Django并创建第一个应用
- 从一台 Windows 10 上访问另一台 Windows 10上创建的Docker虚拟机
- 在Windows 2003上面,部署ASP应用注意事项
- WebService 应用- .Net 平台WebService的创建、部署和使用介绍(转)
- Windows下使用Hudson部署ADF应用
- javaWeb 手动建目录树创建web应用并部署
- Windows下Python的Django框架环境部署及应用编写入门
- Kubernetes1.91(K8s)安装部署过程(三)--创建高可用etcd集群
- 在Centos 5.2上安装Xen并创建windows 2003虚拟机
- 64位Windows操作系统部署ASP.NET Web应用常见问题
- 快速部署Windows Nano Server 2016 Hyper-V虚拟机