負載均衡通過將傳入請求分布到多個虛擬機來提供更高級別的可用性。 本教程介紹了 Azure 負載均衡器的不同組件,這些組件用于分發(fā)流量和提供高可用性。 你將學習如何執(zhí)行以下操作:
創(chuàng)建 Azure 負載均衡器
創(chuàng)建負載均衡器運行狀況探測
創(chuàng)建負載均衡器流量規(guī)則
使用自定義腳本擴展創(chuàng)建基本的 IIS 站點
創(chuàng)建虛擬機并將其附加到負載均衡器
查看負載均衡器的實際運行情況
在負載均衡器中添加和刪除 VM
本教程需要 Azure PowerShell 模塊 3.6 或更高版本。 運行Get-Module -ListAvailable AzureRM即可查找版本。 如果需要升級,請參閱安裝 Azure PowerShell 模塊。
Azure 負載均衡器概述
Azure 負載均衡器是位于第 4 層(TCP、UDP)的負載均衡器,通過在正常運行的 VM 之間分發(fā)傳入流量提供高可用性。 負載均衡器運行狀況探測器監(jiān)視每個 VM 上的給定端口,僅將流量分發(fā)給正常運行的 VM。
定義包含一個或多個公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通過 Internet 訪問負載均衡器和應用程序。
虛擬機使用其虛擬網(wǎng)絡接口卡 (NIC) 連接到負載均衡器。 若要向 VM 分發(fā)流量,后端地址池需包含連接到負載均衡器的虛擬 NIC 的 IP 地址。
若要控制流量流,需為映射到 VM 的特定端口和協(xié)議定義負載均衡器規(guī)則。
創(chuàng)建 Azure 負載均衡器
本部分詳細介紹了如何創(chuàng)建和配置負載均衡器的每個組件。 在創(chuàng)建負載均衡器之前,需使用New-AzureRmResourceGroup創(chuàng)建資源組。 以下示例在 ChinaEast 位置創(chuàng)建名為 myResourceGroupLoadBalancer 的資源組:
PowerShell復制
New-AzureRmResourceGroup`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast
創(chuàng)建公共 IP 地址
若要通過 Internet 訪問應用,負載均衡器需要具有一個公共 IP 地址。 使用New-AzureRmPublicIpAddress創(chuàng)建一個公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 資源組中創(chuàng)建名為 myPublicIP 的公共 IP 地址:
PowerShell復制
$publicIP=New-AzureRmPublicIpAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-AllocationMethodStatic `-NamemyPublicIP
創(chuàng)建負載均衡器
使用New-AzureRmLoadBalancerFrontendIpConfig創(chuàng)建一個前端 IP 地址。 以下示例創(chuàng)建名為 myFrontEndPool 的前端 IP 地址:
PowerShell復制
$frontendIP=New-AzureRmLoadBalancerFrontendIpConfig`-NamemyFrontEndPool `-PublicIpAddress$publicIP
使用New-AzureRmLoadBalancerBackendAddressPoolConfig創(chuàng)建一個后端地址池。 以下示例創(chuàng)建名為 myBackEndPool 的后端地址池:
PowerShell復制
$backendPool=New-AzureRmLoadBalancerBackendAddressPoolConfig-NamemyBackEndPool
現(xiàn)在,使用New-AzureRmLoadBalancer創(chuàng)建負載均衡器。 以下示例使用 myPublicIP 地址創(chuàng)建名為 myLoadBalancer 的負載均衡器:
PowerShell復制
$lb=New-AzureRmLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer `-LocationChinaEast `-FrontendIpConfiguration$frontendIP`-BackendAddressPool$backendPool
創(chuàng)建運行狀況探測器
若要允許負載均衡器監(jiān)視應用的狀態(tài),可以使用運行狀況探測器。 運行狀況探測器基于其對運行狀況檢查的響應,從負載均衡器中動態(tài)添加或刪除 VM。 默認情況下,在 15 秒時間間隔內(nèi)發(fā)生兩次連續(xù)的故障后,會從負載均衡器分布中刪除 VM。 可以為應用創(chuàng)建基于協(xié)議或特定運行狀況檢查頁面的運行狀況探測器。
以下示例創(chuàng)建一個 TCP 探測器。 還可創(chuàng)建自定義 HTTP 探測器,以便執(zhí)行更精細的運行狀況檢查。 使用自定義 HTTP 探測器時,必須創(chuàng)建運行狀況檢查頁,例如 healthcheck.aspx。 探測器必須為負載均衡器返回 HTTP 200 OK 響應,以保持主機處于旋轉狀態(tài)。
若要創(chuàng)建 TCP 運行狀況探測器,請使用Add-AzureRmLoadBalancerProbeConfig。 以下示例創(chuàng)建名為 myHealthProbe 的運行狀況探測器,用于監(jiān)視每個 VM:
PowerShell復制
Add-AzureRmLoadBalancerProbeConfig`-NamemyHealthProbe `-LoadBalancer$lb`-Protocoltcp `-Port80`-IntervalInSeconds15`-ProbeCount2
使用Set-AzureRmLoadBalancer更新負載均衡器:
PowerShell復制
Set-AzureRmLoadBalancer-LoadBalancer$lb
創(chuàng)建負載均衡器規(guī)則
負載均衡器規(guī)則用于定義將流量分配給 VM 的方式。 定義傳入流量的前端 IP 配置和后端 IP 池以接收流量,同時定義所需源和目標端口。 若要確保僅正常運行的 VM 接收流量,還需定義要使用的運行狀況探測器。
使用Add-AzureRmLoadBalancerRuleConfig創(chuàng)建一個負載均衡器規(guī)則。 以下示例創(chuàng)建名為 myLoadBalancerRule 的負載均衡器規(guī)則并均衡端口 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
配置虛擬網(wǎng)絡
需要先創(chuàng)建提供支持的虛擬網(wǎng)絡資源,然后才能部署某些 VM 并測試均衡器。 有關虛擬網(wǎng)絡的詳細信息,請參閱管理 Azure 虛擬網(wǎng)絡教程。
創(chuàng)建網(wǎng)絡資源
使用New-AzureRmVirtualNetwork創(chuàng)建虛擬網(wǎng)絡。 以下示例創(chuàng)建包含 mySubnet 的名為 myVnet 的虛擬網(wǎng)絡:
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創(chuàng)建網(wǎng)絡安全組規(guī)則,然后使用New-AzureRmNetworkSecurityGroup創(chuàng)建網(wǎng)絡安全組。 使用Set-AzureRmVirtualNetworkSubnetConfig將網(wǎng)絡安全組添加到子網(wǎng),然后使用Set-AzureRmVirtualNetwork更新虛擬網(wǎng)絡。
以下示例創(chuàng)建一個名為 myNetworkSecurityGroup 的網(wǎng)絡安全組規(guī)則,并將其應用于 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創(chuàng)建虛擬 NIC。 以下示例創(chuàng)建三個虛擬 NIC。 (在以下步驟中針對為應用創(chuàng)建的每個 VM 各使用一個虛擬 NIC)。 可隨時創(chuàng)建其他虛擬 NIC 和 VM,并將其添加到負載均衡器:
PowerShell復制
for($i=1;$i-le3;$i++){New-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic$i`-LocationChinaEast `-Subnet$vnet.Subnets[0] `-LoadBalancerBackendAddressPool$lb.BackendAddressPools[0]}
創(chuàng)建虛擬機
若要提高應用的高可用性,請將 VM 放置在可用性集中。
使用New-AzureRmAvailabilitySet創(chuàng)建一個可用性集。 以下示例創(chuàng)建名為 myAvailabilitySet 的可用性集:
PowerShell復制
$availabilitySet=New-AzureRmAvailabilitySet`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyAvailabilitySet `-LocationChinaEast `-Managed`-PlatformFaultDomainCount3`-PlatformUpdateDomainCount2
使用New-AzureRmNetworkInterface設置 VM 的管理員用戶名和密碼:
PowerShell復制
$cred=Get-Credential
現(xiàn)在,可使用New-AzureRmVM創(chuàng)建 VM。 下例創(chuàng)建三個 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}
創(chuàng)建和配置所有三個 VM 需要幾分鐘時間。
使用自定義腳本擴展安裝 IIS
在有關如何自定義 Windows 虛擬機的上一教程中,你已了解如何使用 Windows 的自定義腳本擴展自動執(zhí)行 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 地址。 以下示例獲取前面創(chuàng)建的“myPublicIP”的 IP 地址:
PowerShell復制
Get-AzureRmPublicIPAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyPublicIP | select IpAddress
然后,可將公共 IP 地址輸入 Web 瀏覽器中。 網(wǎng)站隨即顯示,其中包括負載均衡器將流量分發(fā)到的 VM 的主機名,如下例所示:
若要查看負載均衡器如何在運行應用的所有三個 VM 之間分發(fā)流量,可強制刷新 web 瀏覽器。
添加和刪除 VM
建議對運行應用的 VM 執(zhí)行維護,例如安裝 OS 更新。 若要應對應用增加的流量,建議添加更多 VM。 本部分演示了如何在負載均衡器中刪除或添加 VM。
從負載均衡器中刪除 VM
使用Get-AzureRmNetworkInterface獲取網(wǎng)絡接口卡,然后將虛擬 NIC 的 LoadBalancerBackendAddressPools 屬性設置為 $null。 最后,更新虛擬 NIC:
PowerShell復制
$nic=Get-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic2$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$nullSet-AzureRmNetworkInterface-NetworkInterface$nic
若要查看負載均衡器如何在運行應用的其余兩個 VM 之間分發(fā)流量,可強制刷新 web 瀏覽器。 現(xiàn)在可以對 VM 執(zhí)行維護,例如安裝 OS 更新或執(zhí)行 VM 重新啟動。
將 VM 添加到負載均衡器
執(zhí)行 VM 維護后,或者如果需要擴展容量,請通過Get-AzureRMLoadBalancer將虛擬 NIC 的 LoadBalancerBackendAddressPools 屬性設置為 BackendAddressPool:
獲取負載均衡器:
PowerShell復制
$lb=Get-AzureRMLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]Set-AzureRmNetworkInterface-NetworkInterface$nic
后續(xù)步驟
在本教程中,你已創(chuàng)建了一個負載均衡器并已將 VM 附加到它。 你已了解如何:
創(chuàng)建 Azure 負載均衡器
創(chuàng)建負載均衡器運行狀況探測
創(chuàng)建負載均衡器流量規(guī)則
使用自定義腳本擴展創(chuàng)建基本的 IIS 站點
創(chuàng)建虛擬機并將其附加到負載均衡器
查看負載均衡器的實際運行情況
在負載均衡器中添加和刪除 VM
請轉到下一教程,了解如何管理 VM 網(wǎng)絡。
立即訪問http://market.azure.cn