zoukankan      html  css  js  c++  java
  • 在 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 -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 的主机名:

    运行 IIS 网站

    若要查看规模集的实际运行情况,可以强制刷新 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

  • 相关阅读:
    myeclipse的git插件安装
    安装虚拟机和Linux系统
    Windows 10快速在指定目录打开命令行
    更新Maven的本地库
    Maven安装
    html全屏显示
    除法保留两位小数
    springmvcjson中文乱码处理
    office2016 下载直通车
    JAVA面向对象编程深入理解图
  • 原文地址:https://www.cnblogs.com/zangdalei/p/7872378.html
Copyright © 2011-2022 走看看