天天看點

IIS搭建負載均衡WebFarm+Arr

--- 本文所述僅針對IIS7.0或更高版本

--- 本文中提到的ServerFarm、WebFarm、web農場都是指WFF

一、IIS簡介

IIS( Internet Information Services),微軟官方Windows平台上面web容器服務。支援http協定和ftp協定,類似于Linux上面的Apache。

IIS和Windows作業系統綁定在一起,安裝了windows作業系統也就安裝了iis;iis生态高度子產品化,本身僅支援部署靜态網站,安裝相應的拓展程式和更新檔包可以拓展iis提供的服務範疇。例如安裝aspnet_regiis.exe,即可在IIS中部署asp.net應用程式。iis常用于部署基于DotNet平台和php開發的web程式。

二、負載均衡簡介

負載均衡是一種web伺服器部署架構,主要為了達到水準擴充伺服器和解決伺服器單點故障的問題。

三、IIS中負載均衡解決方案-WFF(WebFarmFramework)

1:web農場簡介
           

WFF是IIS的一個拓展程式,是IIS中負載均衡的解決方案,能夠幫助我們輕松實作Web網站的高性能、高可用性,用來在Web伺服器群上提供和管理系統,進而使得叢集的軟體元件安裝和配置成為可能,另外它還支援對ASP.NET應用的自動配置。可以通過配置來更新群裡面的伺服器。另外,也可以做反向代理伺服器。

2:web農場提供的功能
           

内容同步:包括應用的同步和平台的同步。應用同步是指在叢集内部同步應用程式部署包和配置檔案等;平台同步是指在叢集中同步web應用程式運作的環境和平台提供的支援元件,保證各個伺服器中應用程式的運作環境是一緻的。 比如:.NET 4.0 Runtime、PHP、ASP.NET MVC等

負載均衡。Web Farm内部有多個Web伺服器,請求過來以後,會真正的被哪台伺服器處理?這需要用到WFF的負載均衡政策。WFF 預設提供了幾種政策,WeightedRoundRobin、ServerVariableHash(伺服器變量)、QueryStringHash、RequestHash。根據這些政策,可以實作請求的配置設定

     監控和管理。WFF允許檢視目前Web Farm内伺服器的運作狀況,包括:Web 伺服器是否健康、接受了多少請求、每台伺服器的總流量是多少。同時還能測試某台伺服器是否處于運作狀态。另外還允許我們暫時停用某台伺服器,請求就不會路由到停用的伺服器。

    緩存。對于部分變化不大的内容,可以采用緩存的方式。緩存有兩種,記憶體緩存和磁盤緩存。緩存可以降低網絡内部的流量,提高響應速度。嚴格來說,以上這些功能不是依靠WFF一個工具實作的,而是以WFF為中心的一系列工具實作的,其中包括:Microsoft Web Farm Framework (WFF) 、Web Deployment Tools(WDT)、URL Rewrite、Application Request Route(ARR)、External Cache等小工具。這些工具可以內建在Web Farm中配合工作,也可以單獨安裝使用。工具多了點兒,不過安裝起來不算太麻煩,使用WPI(WebPlatformInstaller)安裝WFF的時候會一并安裝相關插件。

3:常見問題

        WFF依賴什麼?

            IIS7.0或更高; Microsoft Web Platform Installer,Microsoft Web Deploy

        WFF是否必須使用ARR(application request routing)來實作負載均衡?

            不是的,WFF僅提供叢集管理,負載均衡等工作,無法監聽用戶端請求。

4:搭建WFF

        1:WFF整體架構

            用戶端請求由ControllerServer接收,接收之後會分發給web農場中的SecondaryServers。




            ControllerServer、SecondaryServer伺服器需要有相同的體系結構, 如果主伺服器是32位計算機,則每個輔助伺服器也必須是32位計算機。如果主伺服器是64位計算機,則輔助伺服器也必須是64位。 ControllerServer、SecondaryServer伺服器需要具有相同的作業系統和Service Pack

         2:防火牆設定

            為了使Web Farm Framework元件與伺服器場中的伺服器通信,必須允許以下程式和功能通過防火牆進行通信:

            * 核心網絡

            * 遠端管理

        3:安裝相關IIS拓展

            * 安裝方式一,單個元件安裝(不推薦)

            * 安裝方式二,使用WPI(WebPlatformInstaller)進行安裝(推薦),此方式,會一并安裝所需全部依賴插件
           

下載下傳并安裝WPI,位址 https://www.microsoft.com/web/downloads/platform.aspx安裝成功之後有兩種打開方式,通過Windows應用程式的快捷方式;重新開機IIS(或重新開機計算機之後)在IIS中有一個圖示。

選擇産品頁籤,然後選擇伺服器。

找到Web Farm Framework 2.0,然後單擊“添加”。

點選安裝。

4:建立ServerFarm

            打開IIS管理器,然後在“ 連接配接”窗格中展開節點。右鍵單擊“ 伺服器場”,然後單擊“ 建立伺服器場”。将啟動“ 建立伺服器場”向導。


    輸入web農場的名字。點選下一步,進行SecondaryServer伺服器的配置,如下圖。需要按照圖中先後順序配置伺服器ip或者域名(ServerAddress可填寫區域網路ip位址,公網ip位址,域名),以及請求端口。注意,若輸入ip之後直接點選“添加”,再去修改端口是無法儲存成功的,端口任然是預設的80端口。另外SecondaryServer隻可以添加和移除,無法修改,是以若添加伺服器的時候端口填寫錯誤了,隻能先删除掉,再次重新添加。




    此時,172.18.6.81這個機器就已經添加進來了,配置的http端口為8001,我們點選“确定”。

    在添加完所有的機器之後,ServerFarm中的機器清單如下,至此WebFarm叢集已經配置完成。
           

四、配置webFarm通路路由--ARR(ApplicationRequestRouting)。

目前webFarm已經配置成功,多個機器已經組成了叢集,但是現在用戶端的請求還無法到達SecondaryServers,因為缺少請求的路由。 可以簡單的了解為,WebFarm負責提供服務,ARR負責将流量引入到WebFarm。

1:ARR簡介

        ARR是IIS 的一個插件,可以攔截所有通路IIS的http請求,并基于HttpHeader和ServerVariables對請求的下一步去處做出決定。

2:安裝ARR

    *IIS插件的安裝,推薦使用WPI

    在使用WPI安裝ARR的過程中,會附帶安裝url重寫子產品(URLRewriteModule)(若目前IIS未安裝url重寫)。url重寫子產品也是IIS的一個插件,可以單獨使用,例如用作http請求轉發到https。這裡是和ARR配合使用,作為ARR的一個核心子產品。url重寫子產品識别用戶端請求頭資訊或者是ARR提供的伺服器變量,結合通配符和正規表達式将請求按照一定的規則分發到WebFarm。
           

五:為站點配置負載均衡

1:準備三台機器

5.1.1、172.18.8.88:作為ControllerServer,并在此機器上面安裝WFF和ARR。在IIS中建立一個站點Leading。




站點部署包:
           

此站點為一個靜态網站,部署包中僅一個html檔案,

設定此站點的應用程式池

        *.NET_CLR版本為:無托管代碼。建立leading的目的是分發通路此站點的流量,此站點并不提供服務,是以無需程式安裝包,也無需啟用任何的isapi擴充。




        *回收-固定時間間隔:設定為0。即永遠不會回收。此項設定是為了讓leading時刻保持活躍狀态,一直穩定的運作。鑒于此站點是一個靜态站點,個人覺得沒有必要對此處的預設設定做更改,但是官方網站是這樣建議的。官網說明: https://docs.microsoft.com/zh-cn/iis/extensions/installing-application-request-routing-arr/install-application-request-routing

        *程序模型-閑置逾時:設定為0.即永遠不閑置。目的:同上。

嘗試通路leading
           

5.1.2、172.18.6.81:作為SecondaryServer,此機器上面不需要安裝WFF和ARR。在IIS中建立一個站點SecondaryServer81。此站點部署包為一個ASP.NET MVC開發的網站。

站點部署包為:


部署包的根目錄有一個check.txt的檔案,裡面的内容為:
           

此站點應用程式池按照正常ASP.NET MVC站點設定。嘗試通路此站點。

網站可以正常打開,并且172.18.8.88機器也可以通路到此網站的内容。注意到首頁頂部有一個辨別,指代此網站是部署在172.18.6.81這台機器上面。

5.1.2、172.18.3.249:作為SecondaryServer,此機器上面不需要安裝WFF和ARR。在IIS中建立一個站點SecondaryServer249。此站點部署包為一個ASP.NET MVC開發的網站。

部署包和172.18.6.81上面的一樣,隻不過首頁頂部的辨別改成了172.18.3.249。嘗試通路:

5.2、為兩個SecondaryServer網站配置session伺服器。

5.2.1:為什麼要做這一步

        在負載均衡的環境中,使用者的請求會分流到不同的伺服器,session資訊需要集中存儲,避免回話丢失需要使用者重新登入的問題。若站點不是使用sessin來儲存使用者會話,可以跳過此步驟。

    5.2.2:設定session伺服器

        在172.18.8.88機器(也可以是另外的其他機器)上面開啟Asp.NetStateServicee,這是一個windows服務,随DotNetFramework一起安裝的。此服務的功能就是管理sessin會話。

    Asp.NetStateServicee此服務預設工作端口是42424,若開啟了防火牆,需要配置此端口的出站規則,若未開啟防火牆,不予理會。

    要讓其他機器可以通路到172.18.8.88上面的Asp.NetStateServicee服務,還需要修改系統資料庫來提供相應的支援。
           

打開系統資料庫:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters

AllowRemoteConnection需要設定為1

Port可以根據需要自行修改,這裡保持預設。
           

5.2.3:修改兩個SecondaryServer站點的配置檔案,配置session伺服器位址。

5.2.4:需要注意的地方

修改兩個SecondaryServer伺服器IIS中站點的編号,他們的編号必須一緻。狀态伺服器是使用IIS中的站點編号和Cookie中的SessionId來确定session請求的唯一性。若SecondaryServer站點的IIS編号不一緻會出現會話狀态丢失的問題。如下圖,箭頭指向的“22”就是IIS網站編号,是IIS為每一個網站配置設定的一個唯一id。
           

5.3、在172.18.8.88上面配置流量分發規則

5.3.1:設定url重寫規則,所有通路172.18.8.88的請求都轉發到WebFarm中。

打開IIS,在左邊連接配接窗格中,選中根目錄,點選右邊的url重寫。

點選右邊的添加規則

在入站規則中選中空白規則

進入到“編輯入站規則”

名稱我們設定為:ARR_TestArr_loadbalance

比對URL--->請求的URL:下拉框選中“與模式比對”

比對URL--->使用:下拉框選中“正規表達式”

比對URL--->模式:填寫“.*”

注意:一定要清楚【比對URL--->模式 】是比對URL中的哪一部分,假設目前請求的URL位址為https://shiyousan.com/Home/Index?page=1,那麼規則模式比對的部分就是Home/Index, 一定要注意比對URL的隻是路徑部分,不包含主機域名部分,也不包含查詢字元串。

比對URL-→忽略大小寫:勾選中

條件:目前不做任何修改

伺服器變量:不做任何修改

操作--->操作類型:下拉框選中“路由到伺服器場”

操作--->操作屬性:當選中了“路由到伺服器場”之後,操作屬性會自動填寫,不用任何修改。

操作-→停止處理後續規則:不要勾選。入站規則可以有很多條,若勾選中“停止處理後續規則”,則規則清單中位于此規則下面的規則将不會起作用。

點選右上角的“應用”

此時,入站規則已經設定完畢

嘗試通路http://172.18.8.88

通過首頁頂部的辨別,我們知道此次請求已經分發到了172.18.3.249.

配置WebFarm的時候,負載均衡算法預設的是權重輪詢,當再次重新整理後,首頁辨別變成了172.18.3.81。

5.3.2:過濾靜态檔案,靜态檔案不做分發

網站所有的商品圖檔都存放在阿裡雲nas中,nas是挂在在ControllerServer上面,當使用者通路商品圖檔的時候,該請求不應該分發到SecondaryServer上面。為了實作此要求,在5.3.1的基礎上,編輯入站規則的條件。

{URL}:為前文提到的伺服器變量,簡單來說,伺服器變量(ServerVariables)就是IIS内置的一些變量,這些變量由使用者請求産生, 提供有關伺服器,與用戶端的連接配接以及該連接配接上的目前請求的資訊。變量中的值就是使用者http請求頭和請求URI的相關資訊。此處{URL}伺服器變量是指使用者請求中的路徑部分,不包含域名、端口和查詢字元串。

與模式比對:模式即規則,也就是說{URL}中的值要能夠滿足正規表達式的規則。

模式(^/Photos/*):這是一個正規表達式,比對從“/Photos”開頭,後面跟任意字元。

其他靜态檔案的過濾思路與此一緻。常見的伺服器變量有:

https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN

根據IIS提供的伺服器變量,可以編寫非常複雜的入站條件和入站規則以應對不同的業務場景。

參考:

部落格園教程: https://www.cnblogs.com/Leo_wl/p/5104006.html

微軟官方文檔-IIS7的WFF概述: https://docs.microsoft.com/en-us/iis/web-hosting/microsoft-web-farm-framework-20-for-iis-7/overview-of-the-web-farm-framework-20-for-iis

微軟官方文檔-ASP.NET4企業應用部署簡介: https://docs.microsoft.com/zh-cn/aspnet/web-forms/overview/deployment/deploying-web-applications-in-enterprise-scenarios/

微軟官方文檔-方案:使用IIS伺服器建構Web農場: https://docs.microsoft.com/en-us/iis/web-hosting/scenario-build-a-web-farm-with-iis-servers/overview-build-a-web-farm-with-iis-servers

微軟官方文檔-應用程式請求路由(ARR)概述: https://docs.microsoft.com/en-us/iis/extensions/planning-for-arr/application-request-routing-version-2-overview

微軟官方文檔-定義和配置應用程式請求路由到Web農場: https://docs.microsoft.com/en-us/iis/extensions/configuring-application-request-routing-arr/define-and-configure-an-application-request-routing-server-farm

詳解URL重寫插件規則和條件: https://shiyousan.com/post/635654920639643421

詳解URL重寫插件規則和模式: https://shiyousan.com/post/635659901987610088

微軟官方文檔-URL重寫配置參考: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

使用ARR實作同一台機器IIS和Tomcat共用80端口: https://www.cnblogs.com/aphason/p/4571899.html

微軟官方文檔-伺服器變量: https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN

IIS大牛部落格: https://blog.lextudio.com/tagged/iis

六、WebFarm進階

1:内容同步

2:持續內建
           

七、使用ARR+NLB搭建高可用服務體系

NLB:NetworkLoadBalancing 群集允許使用者把兩台或更多的伺服器結合起來使用,在用戶端看起來就像是一台伺服器,進入NBL 群集的連接配接請求可以分解傳送給兩個或更多的叢集成員.

https://docs.microsoft.com/zh-cn/iis/extensions/configuring-application-request-routing-arr/achieving-high-availability-and-scalability-arr-and-nlb

https://wenku.baidu.com/view/fda62dfa0242a8956bece48b.html

郵箱:[email protected]

技術交流QQ群:1158377441