负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性。 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性。 你将学习如何执行以下操作:
创建 Azure 负载均衡器
创建负载均衡器运行状况探测
创建负载均衡器流量规则
使用自定义脚本扩展创建基本的 IIS 站点
创建虚拟机并将其附加到负载均衡器
查看负载均衡器的实际运行情况
在负载均衡器中添加和删除 VM
本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行Get-Module -ListAvailable AzureRM即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。
Azure 负载均衡器概述
Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,仅将流量分发给正常运行的 VM。
定义包含一个或多个公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通过 Internet 访问负载均衡器和应用程序。
虚拟机使用其虚拟网络接口卡 (NIC) 连接到负载均衡器。 若要向 VM 分发流量,后端地址池需包含连接到负载均衡器的虚拟 NIC 的 IP 地址。
若要控制流量流,需为映射到 VM 的特定端口和协议定义负载均衡器规则。
创建 Azure 负载均衡器
本部分详细介绍了如何创建和配置负载均衡器的每个组件。 在创建负载均衡器之前,需使用New-AzureRmResourceGroup创建资源组。 以下示例在 ChinaEast 位置创建名为 myResourceGroupLoadBalancer 的资源组:
PowerShell复制
New-AzureRmResourceGroup`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast
创建公共 IP 地址
若要通过 Internet 访问应用,负载均衡器需要具有一个公共 IP 地址。 使用New-AzureRmPublicIpAddress创建一个公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 资源组中创建名为 myPublicIP 的公共 IP 地址:
PowerShell复制
$publicIP=New-AzureRmPublicIpAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-AllocationMethodStatic `-NamemyPublicIP
创建负载均衡器
使用New-AzureRmLoadBalancerFrontendIpConfig创建一个前端 IP 地址。 以下示例创建名为 myFrontEndPool 的前端 IP 地址:
PowerShell复制
$frontendIP=New-AzureRmLoadBalancerFrontendIpConfig`-NamemyFrontEndPool `-PublicIpAddress$publicIP
使用New-AzureRmLoadBalancerBackendAddressPoolConfig创建一个后端地址池。 以下示例创建名为 myBackEndPool 的后端地址池:
PowerShell复制
$backendPool=New-AzureRmLoadBalancerBackendAddressPoolConfig-NamemyBackEndPool
现在,使用New-AzureRmLoadBalancer创建负载均衡器。 以下示例使用 myPublicIP 地址创建名为 myLoadBalancer 的负载均衡器:
PowerShell复制
$lb=New-AzureRmLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer `-LocationChinaEast `-FrontendIpConfiguration$frontendIP`-BackendAddressPool$backendPool
创建运行状况探测器
若要允许负载均衡器监视应用的状态,可以使用运行状况探测器。 运行状况探测器基于其对运行状况检查的响应,从负载均衡器中动态添加或删除 VM。 默认情况下,在 15 秒时间间隔内发生两次连续的故障后,会从负载均衡器分布中删除 VM。 可以为应用创建基于协议或特定运行状况检查页面的运行状况探测器。
以下示例创建一个 TCP 探测器。 还可创建自定义 HTTP 探测器,以便执行更精细的运行状况检查。 使用自定义 HTTP 探测器时,必须创建运行状况检查页,例如 healthcheck.aspx。 探测器必须为负载均衡器返回 HTTP 200 OK 响应,以保持主机处于旋转状态。
若要创建 TCP 运行状况探测器,请使用Add-AzureRmLoadBalancerProbeConfig。 以下示例创建名为 myHealthProbe 的运行状况探测器,用于监视每个 VM:
PowerShell复制
Add-AzureRmLoadBalancerProbeConfig`-NamemyHealthProbe `-LoadBalancer$lb`-Protocoltcp `-Port80`-IntervalInSeconds15`-ProbeCount2
使用Set-AzureRmLoadBalancer更新负载均衡器:
PowerShell复制
Set-AzureRmLoadBalancer-LoadBalancer$lb
创建负载均衡器规则
负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的 VM 接收流量,还需定义要使用的运行状况探测器。
使用Add-AzureRmLoadBalancerRuleConfig创建一个负载均衡器规则。 以下示例创建名为 myLoadBalancerRule 的负载均衡器规则并均衡端口 80 上的流量:
PowerShell复制
$probe=Get-AzureRmLoadBalancerProbeConfig-LoadBalancer$lb-NamemyHealthProbeAdd-AzureRmLoadBalancerRuleConfig`-NamemyLoadBalancerRule `-LoadBalancer$lb`-FrontendIpConfiguration$lb.FrontendIpConfigurations[0] `-BackendAddressPool$lb.BackendAddressPools[0] `-ProtocolTcp `-FrontendPort80`-BackendPort80`-Probe$probe
使用Set-AzureRmLoadBalancer更新负载均衡器:
PowerShell复制
Set-AzureRmLoadBalancer-LoadBalancer$lb
配置虚拟网络
需要先创建提供支持的虚拟网络资源,然后才能部署某些 VM 并测试均衡器。 有关虚拟网络的详细信息,请参阅管理 Azure 虚拟网络教程。
创建网络资源
使用New-AzureRmVirtualNetwork创建虚拟网络。 以下示例创建包含 mySubnet 的名为 myVnet 的虚拟网络:
PowerShell复制
# Create subnet config$subnetConfig=New-AzureRmVirtualNetworkSubnetConfig`-NamemySubnet `-AddressPrefix192.168.1.0/24# Create the virtual network$vnet=New-AzureRmVirtualNetwork`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-NamemyVnet `-AddressPrefix192.168.0.0/16`-Subnet$subnetConfig
使用New-AzureRmNetworkSecurityRuleConfig创建网络安全组规则,然后使用New-AzureRmNetworkSecurityGroup创建网络安全组。 使用Set-AzureRmVirtualNetworkSubnetConfig将网络安全组添加到子网,然后使用Set-AzureRmVirtualNetwork更新虚拟网络。
以下示例创建一个名为 myNetworkSecurityGroup 的网络安全组规则,并将其应用于 mySubnet:
PowerShell复制
# Create security rule config$nsgRule=New-AzureRmNetworkSecurityRuleConfig`-NamemyNetworkSecurityGroupRule `-ProtocolTcp `-DirectionInbound `-Priority1001`-SourceAddressPrefix* `-SourcePortRange* `-DestinationAddressPrefix* `-DestinationPortRange80`-AccessAllow# Create the network security group$nsg=New-AzureRmNetworkSecurityGroup`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-NamemyNetworkSecurityGroup `-SecurityRules$nsgRule# Apply the network security group to a subnetSet-AzureRmVirtualNetworkSubnetConfig`-VirtualNetwork$vnet`-NamemySubnet `-NetworkSecurityGroup$nsg`-AddressPrefix192.168.1.0/24# Update the virtual networkSet-AzureRmVirtualNetwork-VirtualNetwork$vnet
使用New-AzureRmNetworkInterface创建虚拟 NIC。 以下示例创建三个虚拟 NIC。 (在以下步骤中针对为应用创建的每个 VM 各使用一个虚拟 NIC)。 可随时创建其他虚拟 NIC 和 VM,并将其添加到负载均衡器:
PowerShell复制
for($i=1;$i-le3;$i++){New-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic$i`-LocationChinaEast `-Subnet$vnet.Subnets[0] `-LoadBalancerBackendAddressPool$lb.BackendAddressPools[0]}
创建虚拟机
若要提高应用的高可用性,请将 VM 放置在可用性集中。
使用New-AzureRmAvailabilitySet创建一个可用性集。 以下示例创建名为 myAvailabilitySet 的可用性集:
PowerShell复制
$availabilitySet=New-AzureRmAvailabilitySet`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyAvailabilitySet `-LocationChinaEast `-Managed`-PlatformFaultDomainCount3`-PlatformUpdateDomainCount2
使用New-AzureRmNetworkInterface设置 VM 的管理员用户名和密码:
PowerShell复制
$cred=Get-Credential
现在,可使用New-AzureRmVM创建 VM。 下例创建三个 VM:
PowerShell复制
for($i=1;$i-le3;$i++){$vm=New-AzureRmVMConfig`-VMNamemyVM$i`-VMSizeStandard_D1 `-AvailabilitySetId$availabilitySet.Id$vm=Set-AzureRmVMOperatingSystem`-VM$vm`-Windows`-ComputerNamemyVM$i`-Credential$cred`-ProvisionVMAgent`-EnableAutoUpdate$vm=Set-AzureRmVMSourceImage`-VM$vm`-PublisherNameMicrosoftWindowsServer `-OfferWindowsServer `-Skus2016-Datacenter `-Versionlatest$vm=Set-AzureRmVMOSDisk`-VM$vm`-NamemyOsDisk$i`-DiskSizeInGB128`-CreateOptionFromImage `-CachingReadWrite$nic=Get-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic$i$vm=Add-AzureRmVMNetworkInterface-VM$vm-Id$nic.IdNew-AzureRmVM`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-VM$vm}
创建和配置所有三个 VM 需要几分钟时间。
使用自定义脚本扩展安装 IIS
在有关如何自定义 Windows 虚拟机的上一教程中,你已了解如何使用 Windows 的自定义脚本扩展自动执行 VM 自定义。 可使用相同的方法在 VM 上安装和配置 IIS。
使用Set-AzureRmVMExtension安装自定义脚本扩展。 该扩展运行powershell Add-WindowsFeature Web-Server来安装 IIS Web 服务器,然后更新 Default.htm 页以显示 VM 的主机名:
PowerShell复制
for($i=1;$i-le3;$i++){Set-AzureRmVMExtension`-ResourceGroupNamemyResourceGroupLoadBalancer `-ExtensionNameIIS `-VMNamemyVM$i`-PublisherMicrosoft.Compute `-ExtensionTypeCustomScriptExtension `-TypeHandlerVersion1.4`-SettingString'{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'`-LocationChinaEast}
测试负载均衡器
使用Get-AzureRmPublicIPAddress获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:
PowerShell复制
Get-AzureRmPublicIPAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyPublicIP | select IpAddress
然后,可将公共 IP 地址输入 Web 浏览器中。 网站随即显示,其中包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:
若要查看负载均衡器如何在运行应用的所有三个 VM 之间分发流量,可强制刷新 web 浏览器。
添加和删除 VM
建议对运行应用的 VM 执行维护,例如安装 OS 更新。 若要应对应用增加的流量,建议添加更多 VM。 本部分演示了如何在负载均衡器中删除或添加 VM。
从负载均衡器中删除 VM
使用Get-AzureRmNetworkInterface获取网络接口卡,然后将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 $null。 最后,更新虚拟 NIC:
PowerShell复制
$nic=Get-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic2$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$nullSet-AzureRmNetworkInterface-NetworkInterface$nic
若要查看负载均衡器如何在运行应用的其余两个 VM 之间分发流量,可强制刷新 web 浏览器。 现在可以对 VM 执行维护,例如安装 OS 更新或执行 VM 重新启动。
将 VM 添加到负载均衡器
执行 VM 维护后,或者如果需要扩展容量,请通过Get-AzureRMLoadBalancer将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 BackendAddressPool:
获取负载均衡器:
PowerShell复制
$lb=Get-AzureRMLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]Set-AzureRmNetworkInterface-NetworkInterface$nic
后续步骤
在本教程中,你已创建了一个负载均衡器并已将 VM 附加到它。 你已了解如何:
创建 Azure 负载均衡器
创建负载均衡器运行状况探测
创建负载均衡器流量规则
使用自定义脚本扩展创建基本的 IIS 站点
创建虚拟机并将其附加到负载均衡器
查看负载均衡器的实际运行情况
在负载均衡器中添加和删除 VM
请转到下一教程,了解如何管理 VM 网络。
立即访问http://market.azure.cn