在 Windows 上创建虚拟机规模集和部署高度可用的应用利用
2017-11-21 11:31
651 查看
利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率、内存需求或网络流量)进行自动缩放。 在本教程中,将在 Azure 中部署虚拟机规模集。 你将学习如何执行以下操作:
使用自定义脚本扩展定义要缩放的 IIS 站点
为规模集创建负载均衡器
创建虚拟机规模集
增加或减少规模集中的实例数
创建自动缩放规则
本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行
Azure PowerShell 模块。
利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 规模集中的 VM 将分布在逻辑容错域和更新域的一个或多个放置组中。 这些放置组由配置类似的 VM 组成,与可用性集相似。
可以根据需要在规模集中创建 VM。 可以定义自动缩放规则来控制如何以及何时在规模集中添加或删除 VM。 这些规则可以根据 CPU 负载、内存用量或网络流量等指标触发。
使用 Azure 平台映像时,规模集最多支持 1,000 个 VM。 对于有重要安装或 VM 自定义要求的工作负荷,可能需要创建自定义
VM 映像。 使用自定义映像时,在规模集中最多可以创建 300 个 VM。
创建规模集之前,需使用 New-AzureRmResourceGroup 创建一个资源组。
以下示例在 ChinaEast 位置创建一个名为 myResourceGroupAutomate 的资源组:
PowerShell
复制
在前面的教程中,你已了解如何使用自定义脚本扩展来自动执行 VM 配置。 创建一个规模集配置,然后应用自定义脚本扩展来安装并配置
IIS:
PowerShell
复制
Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,并仅将流量分发给正常运行的 VM。 有关详细信息,请参阅有关如何对
Windows 虚拟机进行负载均衡的下一个教程。
创建一个具有公共 IP 地址、对端口 80 上的 Web 流量进行分发的负载均衡器:
PowerShell
复制
现在,使用 New-AzureRmVmss 创建一个虚拟机规模集。 以下示例创建一个名为 myScaleSet
的规模集:
PowerShell
复制
创建和配置所有的规模集资源和 VM 需要几分钟时间。
若要查看 IIS 网站的实际运行情况,请使用 Get-AzureRmPublicIPAddress 获取负载均衡器的公共
IP 地址。 以下示例获取作为规模集的一部分创建的 myPublicIP 的 IP 地址:
PowerShell
复制
将公共 IP 地址输入到 Web 浏览器中。 将显示应用,包括负载均衡器将流量分发到的 VM 的主机名:
若要查看规模集的实际运行情况,可以强制刷新 Web 浏览器,以查看负载均衡器如何在运行应用的所有 VM 之间分发流量。
在规模集的整个生命周期内,可能需要运行一个或多个管理任务。 此外,可能还需要创建自动执行各种生命周期任务的脚本。 Azure PowerShell 提供了一种用于执行这些任务的快速方法。 以下是一些常见任务。
若要查看规模集中运行的 VM 的列表,请使用 Get-AzureRmVmssVM,如下所示:
PowerShell
复制
若要查看规模集中当前包含的实例数,请使用 Get-AzureRmVmss 并查询 sku.capacity:
PowerShell
复制
然后,可以使用 Update-AzureRmVmss 手动增加或减少规模集中虚拟机的数目。
以下示例将规模集中 VM 的数目设置为 5:
PowerShell
复制
这将花费数分钟来更新规模集中指定数目的实例。
你可以定义自动缩放规则,而不是手动缩放规模集中实例的数目。 这些规则监视规模集中的实例,并根据所定义的指标和阈值做出相应响应。 如果平均 CPU 负载高于 60% 且持续时间超过 5 分钟,以下示例将增加一个实例。 如果平均 CPU 负载低于 30% 且持续时间超过 5 分钟,则将减少一个实例:
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 上创建虚拟机规模集和部署高度可用的应用
- 利用Failovr Cluster的Hyper-v创建高可用虚拟机
- centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
- 开发者可在WindowsCoreOS创建自己的应用了
- 使用 Windows Virtual PC 创建一个虚拟机 推荐
- 利用AD冗余环境部署Windows冗余文件服务器
- 利用samba实现虚拟机中ubuntu与物理机windows文件共享
- 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
- Windows 下 redis 的安装、部署、java应用示例
- javaWeb 手动建目录树创建web应用并部署
- Memcached高速缓存服务器部署及应用(一、Memcached在Windows平台下安装与配置)
- 利用xshell从windows上传文件到虚拟机
- 把windows 8 应用部署到其它计算机
- Vmware Workstation 7利用链接克隆功能创建多程序应用平台
- 利用NLB群集实现WEB站点的高可用部署
- 开启Windows 8自带Hyper-V功能创建虚拟机
- .net 下C# 创建windows 服务应用系统
- 微软私有云部署指南之一:HyperV网络配置\虚拟机创建