RSS訂閱

2012年10月11日 星期四

建置 IIS 7.5 Server Farm 網站 (Setup loadbalance IIS Server Farm using Web Farm Framework and Application Request Routing)

如何建置一個具有負載平衡和高度可用度能力的網站,以提供高效能和永不中斷的網頁服務一向是IT人員管理和維護網站上的重點工作,然而建置一個高效能具負載平衡的網站雖有多種方法可以達成,但大多不脫離叢集(Clustering)技術的範圍,不同之處在於硬體或軟體實作技術 ,負載平衡的實現方法或容錯移轉的使用差別而已。

微軟於2010年發表了Microsoft Web Farm Framework (WFF),這是一個可免費從微軟IIS網站下載的產品,並且可以安裝在IIS 7及以上版本,這個IIS擴充元件提供了簡易建置、部署多部網頁伺服器的架構與技術,並提供了IIS元件安裝和網頁資源更新的同步服務,若再搭配另一個重要模組- Application Request Routing(ARR) ,則可提供多種網路負載平衡演算法的能力,本文將說明如何利用微軟的Web Farm Framework 和Application Request Routing 模組建置一個易於管理與擴充並且兼具高度可用性的負載平衡IIS網站。

IIS Web Farm Framework 架構

IIS Web farm Framework是一群伺服器組合一起而成為易於配置、部署與維護的負載平衡網站伺服器,所以IIS Web Farm Framework架構下,包含一部控制伺服器(Controller),一部主要伺服器(Primary)以及多部次要伺服器(Secondary)。
  • 控制伺服器 (Controller Server)
    這部伺服器主要用來建立與設定WFF網站,控制伺服器也提供管理網站內伺服器間的平台元件、組態設定和網頁應用程式同步,您需要在此機器上安裝Microsoft Web Platform Installer並利用它來安裝 WFF和相關元件(如Microsoft Web Deploy),若需要支援負載平衡能力還需要安裝Application Request Rerouting (ARR)(雖然您可以安裝其它廠商的負載平衡元件),而在觀念上,控制伺服器並不屬於任何 Server Farm,所以您可以利用一部控制伺服器來管理多個Server Farm。
  • 主要伺服器 (Primary Server)
    每個WFF Server Farm 需包含一部單一的主要伺服器,當您在此伺服器安裝IIS元件或部署新的網頁應用程式後,WFF會自動將其同步到Server Farm內的其它伺服器,換言之,主要伺服器主要是做為Server Farm內的元件、組態與網頁同步的來源機器。
  • 次要伺服器 (Secondary Server)
    WFF Server Farm內可以包含一部或多部次要伺服器,當主要伺服器的內容發生任何變動時,就會被複製到Server farm內的所有次要伺服器,所以次要伺服器做為Server Farm內的元件、組態與網頁同步的目的機器。

下圖為 WFF Server Farm的架構圖和伺服器間的關聯性。

webfarmarch

建置Web Server Farm 的需求與條件

本文範例中將利用三部Windows Server 2008 R2伺服器來建置IIS Server Farm,一部設定為控制機器,另一部為主要伺服器,最後一部為次要伺服器,底下說明部署這三部伺服器所需的系統、元件及相關的條件。

控制伺服器

架設WFF Server Farm時第一部需要架設的伺服器就是控制伺服器,要求的條件為:

  1. 控制機器並不必要是伺服器平台,只要較新的Windows作業系統即可,例如 Windows Vista with SP1、Windows 7、Windows Server 2008 with SP1、Windows Server R2 。
  2. 安裝 IIS基本服務和.Net framework 2(或以上版本) 。
  3. 先安裝Web Platform Installer ,再安裝 Web Farm Framework,後安裝Application Request Routing 。
  4. 設定防火牆例外-- Core Networking 、Remote Administration、File and Printer Sharing。

主要與次要伺服器

架設WFF Server Farm時第一部需要架設的伺服器就是控制伺服器,要求的條件為:

  1. 作業系統:Windows Server 2008 或 Windows Server 2008 R2 ,切記,若主要伺服器是32位元系統,則次要伺服器也必需是32位元系統,但若主要伺服器為64位元系統,則次要伺服器為32位元或64位元系統均可,此外,若主要伺服器為Windows Server 2008,則次要伺服器也必須是Windows Server 2008,若主要伺服器為Windows Server 2008 R2,則次要伺服器可以是Windows Server 2008 R2或Windows Server 2008均可。
  2. 主要伺服器安裝 IIS基本服務和.Net framework 2(或以上版本)
  3. 設定防火牆例外-- Core Networking 、Remote Administration、File and Printer Sharing。
  4. 需在主要伺服器上安裝必要的IIS相關元件,新增組態設定與網頁應用程式。

準備WFF控制伺服器

架設控制伺服器為建置整個IIS Server Farm的首要步驟,您需要準備並執行下列工作:

一. 安裝Windows Server 2008 (R2) (雖然可以使用Windows 7等桌面型作業系統,但基於安全性和擴充性的考量並不建議)

二. 安裝IIS 7基本服務

三. 安裝 web Farm Framework

由於WFF並非IIS內建的服務元件,所以您須要先下載 Web Platform Installer 再利用它來安裝 Web Farm Framework,雖然目前Web Platform Installer 最新版本4.0版,但並沒有中文版,而且使用4.0版的Web Platform Installer在Windows Server 2008 R2中文版上直接安裝 Web Farm Framework會出現錯誤, 所以作者的做法是選擇並安裝有中文版的Web Platform Installer 3.0來安裝WFF 2.2,因此首先須連至微軟IIS網站下載並安裝中文版的Web Platform Installer(WPI) 3.0,接下來啟動WPI來安裝Web Deployment Tool,最後再從IIS網站下載並安裝 Web Farm Framework 2.2,整個安裝與順序如下圖所示:

installcontroller

四. 安裝 Application Request Routing (選擇性)

為了建立具有網路負載平衡能力的Server Farm,您還要安裝另一個相當重要的IIS模組-- "Application Request Routing",因為 Web Farm Framework本身並不具備負載平衡轉送能力,Application Request Routing模組是個功能不錯的代理基礎路由模組,可以根據HTTP標頭和伺服器變數資料再加上所支援的負載平衡演算法來將收到的HTTP請求轉送至內容伺服器(主要或次要伺服器),不過它並非絶對必要的,因為您可以搭配使用其它廠商的負載平衡服務。
請使用Web Platform Installer安裝Application Request Routing,下圖為Application Request Routing 2.5安裝畫面。

arr

五. 檢查安裝元件

為了確保安裝的正確性,您可以從【控制台 / 程式集 / 程式與功能】中檢視上述已安裝的WFF與相依服務,並且由【IIS 管理員】內看到了一個新增且空白內容的『Server Farm』資料夾。

check

準備主要和次要伺服器

接下來可以開始準備主要和次要伺服器,主要伺服器是特別重要的,因為它是Server Farm中的同步來源機器,所以您需要在上面安裝並設定IIS,而次要伺服器只要放行適當的防火牆規則即可,完整的做法及步驟說明如下:

一. 主要伺服器和次要伺服器上安裝Windows Server 2008 (R2)作業系統

二. 主要和次要伺服器上設定防火牆例外

由於Server Farm內的機器必需要同步IIS元件、組態與網頁應用程式,所以需要在主要和所有次要機器上設定防火牆例外以放行Core Networking 、Remote Administration、File and Printer Sharing類型的流量,步驟如下:

經由【控制台 / 系統及安全性 / Windows 防火牆 / 允許的程式】途徑,開啟Windows 防火牆【允許的程式】視窗,勾選【核心網路功能】、【遠端系統管理】和【檔案及印表機共用】選項以便放行Server Farm同步管理時所需要通行的流量。
fw2

三. 設定主要與次要伺服器的administrator帳戶具有相同的密碼。

四.  主要伺服器安裝IIS服務元件
請在主要伺服器上安裝Web Platform Installer 3,並利用它來安裝必要的IIS角色與服務,利用它來安裝IIS元件(而不使用伺服器管理員)主要的原因是Web Platform Installer不僅可以安裝預設的IIS角色服務,還可以安裝許多微軟IIS網站可能隨時公佈的額外IIS模組元件。

installiis

五. 主要伺服器上設定IIS組態
一旦在主要伺服器安裝好必要的IIS角色服務後,您就可以開始依據您的規劃與須求設定您的IIS組態,不過為了方便日後對Server Farm的伺服器進行遠端管理及變更設定,建議您啟用遠端連線管理服務。

iisremoteadmin

建立Server Farm

一旦控制伺服器、主要及次要伺服器均已經如上述步驟與方法準備完畢,接下來就可以開始建立負載平衡的Server Farm。

  1. 請在控制機器上開啟【IIS 管理員】。
  2. 以滑鼠右鍵按一下『Server Farms』,並於功能表上選取『Create Server Farm』。
    createserverfarm
  3. 於『Create Server Farm』精靈程式的第一個設定頁『Specify Server Farm Details』輸入 Server Farm名稱、勾選負載平衡和配置Server Farm選項,並輸入Server Farm 管理員帳戶和密碼(主要和次要伺服器administrator的帳戶和密碼)。
    createserverfarm1
  4. 接下來,您需要一一加入規劃中的一部主要伺服器和所有次要伺服器。
    createserverfarm6
  5. 最後畫面會提示是否由控制機器自動建立URL Rewrite規則來繞送HTTP請求至Server Farm 內的伺服器,按『是』。
    createserverfarm5
  6. 完成『Create Server Farm』精靈程式,下圖為完成新增Server Farm後的IIS管理員介面內容。
    serverfarmok2
  7. 一旦成功建立Server Farm之後,Server Farm 就會自動在次要伺服器上同步目前主要伺服器已安裝元件、組態和網頁(Provisioning),請留意Server Trace Messages內是否產生錯誤訊息。
    serverfarminit

 

測試與監控

一旦如上述步驟完成Server Farm的架設工作,您必須檢查(一)Server Farms的伺服器狀況是否正常、(二)是否提供負載平衡的連線服務以及是否(三)組態和網頁程式自動同步處理。

(一)  檢查伺服器狀況是否 "Healthy"與 "Availability"

請在控制伺服器上,按一下" Server Farm" 底下的名稱,這時您可以看到中間窗格內的『Monitoring and Management』圖示,請雙擊啟動這項功能,注意查看監控視窗上的『Availability』和『Health Status』這二個重要的欄位是否為 "Available"和"Healthy" 狀態,如果不是的話,就得進一步診斷來找出原因。

wff_monitor2

(二) 檢查是否執行負載平衡連線

如果您須要知道控制機器上的ARR是否依據負載平衡的演算法來將HTTP請求轉送到Server Farm內的伺服器,而非只是轉送到單一伺服器(除非Server Farm內目前只有一部Available的伺服器),則您可以撰寫了一個簡單如下的ASP測試檔案,然後將它放置在主要伺服器上的網頁目錄以做為測試用途,您可以利用多部電腦連至Server Farm並可以知道控制機器將您的請求轉送到那一部伺服器。

<%@ LANGUAGE = VBScript %>
<% Option Explicit %>
<HTML>
  網路負載平衡測試 : <P>   
    <%   
   Dim WshNetwork   
   Set WshNetwork = CreateObject("Wscript.Network")
   Dim LocalMachine   
   LocalMachine=WshNetwork.ComputerName   
   Set WshNetwork = Nothing   
    %>   
   存取的網站主機為: <% =Request.ServerVariables("HTTP_HOST") %> <P>
   Server Farm 回應伺服器IP位址為: <% =Request.ServerVariables("LOCAL_ADDR") %> <P>
   Server Farm 回應伺服器主機名稱為: <B><I> <%Response.Write  LocalMachine%> </I></B> 
</HTML>

ARR採用的預設負載平衡演算法為"Least current request",如果您了解這些演算法的涵義和差異,再根據您網站應用程式的特性,可以自行選擇擇適合的負載平衡演算法,否則直接接受預設值,而測試簡單靜態檔案時,使用"Weighted Round Robin"來看結果即可。

arr4

如下圖測試結果,您可以看到連至控制機器(192.168.2.65)後,ARR將其送至Server Farm內的次要伺服器(192.168.2.76、SECSERVER),若您按一下『重新整理』,觀察其結果是否變化了呢?
testpage

(三) 確認組態和網頁程式自動同步處理

Web Farm Framework的另一個賣點為支援自動同步Server Farm內的內容與組態設定(Provisioning),所以一旦部署完成後,您可以測試當您在主要伺服器新增一虛擬目錄或應用程式後,所有的次要伺服器是否也會很快的同步成功,而具有相同的內容,如果有問題,請查看"Trace Message"記錄內的錯誤說明以判斷原因,而在經驗上,同步失敗很常與防火牆設定和遠端管理設定有關。

502 的錯誤問題

架設Web Farm Framework和Application Request Routing 的負載平衡Server Farm時,很多人均會遭遇到一個如下圖502代碼的錯誤網頁:

502

這種現象通常是發生在ARR正常將HTTP請求連線轉送至Server Farm 某伺服器後,經過一段閒置時間後企圖再度連線時就會出現此項錯誤,這種錯誤最可能的原因在於IIS工作處理序(w3wp;Worker Process)有預設閒置逾時20分鐘的設計,一旦過了閒置逾期時間,工作處理序將會被回收(Recycle)處理,因此伺服器就會變成Unavailable,所以當有人再度向控制機器請求網頁程式時,是向一部Unavailable的伺服器請求網頁,所以就會發生502代碼的錯誤網頁,雖然您可以從"Monitoring nad management"設定頁中手動的讓伺服器重新成為可用(Available)狀態而恢復正常(下圖),但這只是暫時的解決方法,一段閒置時間過後,恐怕又會重複成為Unavailable而發生錯誤。

unavailable1

另一個解決方法是在將控制機器的工作處理序的閒置逾期時間(idleTimeOut)設成較大,甚至設成 0(不會逾期)以避開這項錯誤,不過若將閒置逾時設定成不會逾期可能對負載量大的網站應用程式(特別是須耗費大量記憶體者)在效能上造成衝擊。

idletime

最後一個解決方法是由微軟IIS論壇上某位高手提出的解決方案,原來作者的解決構想是想要寫一個擴充功能的Web Farm Framework provider來定期ping ARR以便可以定期更新伺服器的狀況,不過他發現原來安裝WFF時微軟就已經提供了一個類似功能的擴充Provider - WFFExtension.dll,只不過預設安裝時這個擴充程式並沒有存放在適當的位置而沒有讓這項功能發生作用,所以只要先停止WFF服務,再將WFFExtension.dll檔案存放在正確位置(c:\program files\iis\Microsoft Web Farm Framework\extensions),然後重新啟動WFF服務就可以讓這個擴充功能運作而因而解決這個502代碼錯誤的問題。

net stop webfarmservice
cd /d "%programfiles%\iis\Microsoft Web Farm Framework"
mkdir extensions
move WFFExtension.dll extensions
net start webfarmservice

後記

許多商業性網站均需要具備容錯和負載平衡能力,以便同時達成高度可性和高效能的品質要求,而微軟IIS的擴充模組Web Farm Framework和Application Request Routing整合起來正提供了企業一個低成本又功能豐富的解決方案,本文說明了架設負載平衡的IIS Server Farm所須的安裝條件、詳細步驟、基本設定及檢查方式,然而WFF和ARR其實也支援了不少功能豐富的進階和自訂設計可便適用於更複雜或較特殊性質的網站之用,例如透過 URL rewrite可讓您以彈性的正規化表達方式來建立更複雜而多樣化的ARR轉送規則,或是利用 Application Provisioning可以定義適合自己網站的應用程式同步方式,日後若有時間再來探和撰寫這些進階的功能。

相關文章