如何在 Azure 中均衡 Windows 虛擬機負載以創(chuàng)建具有高可用性的應用程序

負載均衡通過將傳入請求分布到多個虛擬機來提供更高級別的可用性。 本教程介紹了 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)絡。

管理 VM 和虛擬網(wǎng)絡

立即訪問http://market.azure.cn

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內(nèi)容