原文地址:http://www.cnblogs.com/shanyou/archive/2010/04/28/1723276.htmlhtml
在現行的許多網絡應用中,有時一臺服務器每每不能知足客戶端的要求,那麼有沒有什麼辦法解決服務器的高可伸縮性、高可用、高可靠性和高性能,提高服務器的SLA? 使用Windows Server 2008/R2中的網絡負載平衡(Network Load Balancing,如下簡稱NLB)和IIS 7的ARP模塊就是解決這個問題的方法。web
首先解釋一下羣集,羣集是指一組服務器,經過彼此的協同做業,提供一個相同的服務或應用程序,用於提高服務或應用程序的可用性(availability)、可靠性(reliability)和可擴展性(scalability)。當羣集內的服務器down掉之後,服務請求會轉給其它羣集內的節點,以實現24小時不中斷的服務shell
網絡負載平衡(NLB)是Microsoft在全部 Windows 2000 Server、Windows Server 200三、Windows Server 2008和Windows Server 2008 R2 操做系統上提供的一種負載平衡技術。網絡負載平衡(NLB)是將網絡鏈接客戶與服務器應用分佈在同一個NLB羣集內的多個服務器上。NLB容許添加額外的服務器,所以具有了可擴展性。此外NBL容許用戶替換運行不良的服務器,從而確保了可靠性。NBL對於須要將多個客戶請求分佈在一組服務器上的企業來講相當重要。特別是它可以確保運行在互聯網信息服務(IIS)上的基於Web的應用,可經過添加額外的服務器增長工做負載量而使應用得到擴展。緩存
網絡負載平衡(NLB)包括如下功能:服務器
² 可伸縮性網絡
可伸縮性是度量計算機、服務或應用程序如何更好地改進以知足持續增加的性能需求的標準。對於NLB羣集而言,可伸縮性是指當羣集的所有負載超過其能力時逐步將一個或多個系統添加到現有羣集中的功能。下表詳細介紹了NLB的可伸縮性功能:架構
——平衡NLB羣集上對各個TCP/IP服務的負載請求app
——在一個羣集中最多支持32臺計算機負載均衡
——平衡羣集中多個主機之間的多個服務器負載請求(來自同一個客戶端或者來自幾個客戶端)asp.net
——支持在負載增長時,可以在不關閉羣集的狀況下向NLB羣集中添加主機
——支持在負載下降時,可以從羣集中刪除主機
——經過所有實現管道化提升性能並下降開銷。管道容許向NLB羣集發送請求,而無需等待響應上一個發送的請求
² 高可用性
經過最大程度地減小停機時間,高可用系統可以可靠地提供可接受級別的服務。NLB包括一些內置功能,能夠經過自動執行如下操做來提供高可用性:
——檢測發生故障或脫機的羣集主機並對其進行恢復。
——在添加或刪除主機時平衡網絡負載。
——在十秒以內恢復並從新分發負載。
² 可管理性
NLB提供如下可管理性功能:
——使用NLB管理器,能夠從單個計算機管理和配置多個NLB羣集和羣集主機。
——使用端口管理規則,能夠爲單個IP端口或一組端口指定負載平衡行爲。
——能夠爲每一個網站定義不一樣的端口規則。若是您對多個應用程序或網站使用相同的一組負載平衡服務器,則端口規則基於目標虛擬IP地址(使用虛擬羣集)。
——使用可選的單主機規則,能夠將全部客戶端請求引導至單個主機。NLB將客戶端請求路由到運行特定應用程序的特定主機。
——能夠阻止對某些IP端口進行不須要的網絡訪問。
——能夠在羣集主機上啓用Internet 組管理協議(IGMP)支持,以控制交換機廣播(在多播模式中操做時)。
——使用shell命令或腳本,能夠從運行Windows的任何聯網計算機上遠程啓動、中止和控制NLB操做。
——能夠查看Windows事件日誌以檢查NLB事件。NLB在事件日誌中記錄全部操做和羣集更改。
² 易用性
NLB提供了許多便於使用的功能:
——能夠做爲標準的Windows網絡驅動程序組件安裝NLB。
——NLB不須要更改任何硬件便可啓用和運行。
——使用NLB管理器能夠新建NLB羣集。
——使用NLB管理器,能夠從一臺遠程或本地計算機上配置和管理多個羣集以及羣集的全部主機。
——NLB容許客戶端使用單個邏輯Internet名稱和虛擬IP地址(稱爲羣集IP地址,它保留每臺計算機的各個名稱)訪問羣集。NLB容許多宿主服務器具備多個虛擬IP地址。
注:若是是虛擬羣集,則不須要服務器是多宿主服務器便可具備多個虛擬IP地址。
——能夠將NLB綁定到多個網絡適配器,這樣您即可以在每一個主機上配置多個獨立的羣集。支持多個網絡適配器與虛擬羣集不一樣,由於虛擬羣集容許您在單個網絡適配器上配置多個羣集。
² NLB配置
NLB做爲Windows網絡驅動程序運行。它的操做對於TCP/IP網絡堆棧是透明的。
上圖顯示了在NLB主機的典型配置中,NLB和其餘軟件組件之間的關係。
——不須要修改服務器應用程序便可在NLB羣集中運行。
——若是羣集主機出現故障而且後來又恢復聯機,則能夠將NLB配置爲自動將該主機添加到羣集。以後,添加的主機將可以開始處理來自客戶端的新的服務器請求。
——能夠在不打擾其餘主機上羣集操做的狀況下使計算機脫機進行預防性的維護。
Windows Server 2008 R2 中的網絡負載平衡的功能,爲了支持更多的用戶同時使用。 Windows Server 2008 R2 中的網絡負載平衡的功能改進包括:
1. 更好的支持應用程序和服務的持久鏈接
在網絡負載平衡 IP 粘性功能容許您配置客戶端與羣集節點之間長鏈接。 默認狀況下,網絡負載平衡每一個請求分佈在羣集中的節點。某些應用程序例如購物的購物車應用程序的服務須要一個將保持與特定羣集節點持久鏈接。
2. 改進對應用程序和服務的健康監測
在Windows Server 2008 R2網絡負載平衡管理包容許您監視應用程序和在網絡負載平衡羣集中運行的服務的運行情況。
3. 支持下一代 TCP/IP
Windows Server 2008 R2 支持Internet 協議版本 4 (IPv4) 和 Internet 協議版本 6 (IPv6)。 NLB 支持IPv4同時 徹底支持IPv6的全部通訊。
4. 多個 IP 地址支持
如今,在 NLB 羣集中的每一個節點有多個專用的 IP 地址。
5. Microsoft ISA Server 集成
Microsoft ISA Server支持混合IPv4 和 IPv6 基礎結構的網絡環境的客戶端經過Microsoft ISA Server訪問每個NLB節點。 ISA Server 還能夠提供入侵檢測服務,以保護您的 NLB 羣集。
網絡負載平衡的缺點
² NLB集羣自己會消耗掉一部分CPU資源,所以實際應用中並非集羣節點越多性能越好。MS官方有提供這樣一份測試報告,模擬web 客戶端從羣集中下載了 10 KB 的靜態 web 頁。在羣集大小超過 8 到 10 個成員時,擴展因子會顯著偏離了線性擴展。以下圖所示
² NLB只能檢測到服務器的狀態,沒法檢測到應用程序的狀態,假如某節點服務器的IIS不可用,但客戶依然會被分配到該節點服務器,從而致使請求失敗。要解決應用層面的問題,須要使用IIS 7的Application Request Routing(如下簡稱ARR),經過監控應用程序狀態,反向控制節點服務器。同時NLB能夠爲IIS 7的ARR模塊提供高可用性。
ARR簡單的說就是一個IIS7的負載均衡模塊,能夠一次管理多個IIS 6/7的服務器集羣,規則基於URL,或者基於HOST NAME,或者基於HTTP HEADER。微軟的Application Request Routing(ARR) 2.0使得Web管理員,虛擬主機提供商,內容分發網絡(CDN)經過基於規則路由,機器名匹配,HTTP請求的負載均衡和分佈式磁盤緩存來提升Web應用程序的的可擴展性和可靠性。有了ARR技術,管理員能夠優化資源以及應用服務器的管理成本。
² 負載均衡能夠有效的提升資源的利用率
使用ARR,管理員能夠建立強大的基於規則的URL,HTTP HEADERS 變量,並決定最合適的WEB應用服務器。ARR在應用層進行路由選擇,並能夠在其上加上BIG IP 5這類硬件負載均衡器或者是Windows 負載均衡技術,進行三層架構路由。典型的幾種方式:使用ARR,管理員能夠將*.aspx路由到一個獨立應用服務器上。
² 使用標準的IIS MANAGER更容易管理多個WEB FARMS
ARR給予管理員,建立、管理、應用LOAD BALANCING(負載均衡)規則的能力,管理員能夠需求輕鬆地添加一個服務器到WEB FARMS裏去,ARR同時包含了對每臺單獨的服務器實時流量、URL測試的監視能力。管理員這時有能力在IIS 7的MANAGER中查看WEB FARMS中每一個服務器的統計信息。
² 優化帶寬的使用和經過緩存擴展服務器的能力
ARR能夠在磁盤上緩存任何通過服務器的HTTP通訊。 經過結合磁盤緩存連同層次化的IIS網站運行ARR的IIS web服務器,CDN和層次化服務器的能力能夠大大下降到達源服務器的網絡流量。
具體的配置文檔這裏就再也不詳細羅列,只給出IIS.NET上的文檔連接。主要的配置步驟:
步驟1:按照這篇文檔Install Application Request Routing安裝ARR v2,重啓服務器後接着完成後續的步驟。
步驟2:按照這篇文檔Achieving High Availability and Scalability - ARR and NLB配置你的ARR Server Farm. 這裏還有一個以F5的配置文檔Achieving High Availability and Scalability - ARR and Hardware Load Balancer
應用程序具備擴展性還要求應用程序的架構上支持,對於ASP.NET的應用程序來講,主要是要解決兩個問題ASP.NET Session State和ASP.NET Cache,這個在Windows Server AppFabric裏頭有很好地解決方案。能夠參看文章Windows Server AppFabric Beta 2 for For Vistual Studio 2010已經發布,WizardWu有篇博文用 IIS 七、ARR 與 Velocity 建設高性能的大型網站 供參考。
下載:
ARR v2 x86: http://download.microsoft.com/download/4/D/F/4DFDA851-515F-474E-BA7A-5802B3C95101/ARRv2_setup_x86.EXE
ARR v2 x64: http://download.microsoft.com/download/3/4/1/3415F3F9-5698-44FE-A072-D4AF09728390/ARRv2_setup_x64.EXE
使用IIS ARR (Application Request Routing) 來作Exchange 2010的負載平衡器
Part 1: Reverse Proxy for Exchange Server 2013 using IIS ARR
Web farms in .NET and IIS using Web Farm Framework 2.2 part 1: how to set up a webfarm using WFF
Web farms in .NET and IIS using Web Farm Framework 2.2 part 2: provisioning a server farm
Web farms in .NET and IIS using Web Farm Framework 2.2 part 3: deployment and tests
Configure IIS ARR as a reverse-proxy replacement for TMG
Does IIS with ARR support fully transparent reverse proxy?
http://weblogs.asp.net/owscott/archive/tags/ARR/default.aspx