建立高可用度和擴充度的 Web Farm

 

Duwamish Online

Paul Johns and Aaron Ching
Microsoft Developer Network

2000 年 12 月

摘要:本文以 Duwamish Online 所實作的負載平衡方案為例,討論如何以「網路負載平衡」 (NLB),來設定一個高可用度和擴充度的Web Farm。下面是三種負載平衡的方法:「Round Robin 網域名稱系統」 (RRDNS)、負載平衡切換、以及 Microsoft Windows 2000 NLB。

簡介
通常一家公司的 Web 應用程式都是負責相當重要的作業,如果可用性不高,很容易便超出應用程式和基礎結構的成本。因此,這些應用程式一定要好用而且可靠。而要有效達到好用而且可靠的目的,就是使用多餘的伺服器。如果您的站台上有不只一部伺服器,即使其中一部當掉了,處理要求還可以重新導向到另外一部。這樣一來,便提高了網站的可用度。

您只要加上少少幾部伺服器,就可以創造出大大好用的網站。如果您只有一部好用程度達百分之 90 的伺服器,那就表示它不能平均一天工作 24 小時。(其實大部份的伺服器都比這個可靠得多,採用這個極端的例子,只是為了說明我們所強調的重點)。這部伺服器當機的可能性是 0.1。只要多加一部一樣不可靠的伺服器,就可以把兩部伺服器同時當機的機率降到 0.1 * 0.1 或 0.01。而把其中一部伺服器可以使用的機率提高到百分之 99,或是把不能使用的時間降到每天只有 14.4 分鐘。如果有七部不太可靠的伺服器,那麼其中一部可以使用的機率至少高達百分之 99.99999。當然,好一點的硬體也會大幅提高可用度。如果您考慮採用低成本的 Microsoft® Windows® 2000 硬體時,不妨多加幾部伺服器,這樣不但可以增加可用度,而且相當划算。

額外增加 Web 伺服器也可以幫助網站從容處理更大的資料量,如果叢集設計合乎規定 (本文將會討論這一部份),那麼增加伺服器的確可以提供近乎等差比例的可用度 (也就是說,其輸送量與增加的伺服器數目成等差正比)。

圖 1 所示範的,是在額外增加 Web 伺服器的情況下,所展現的 Duwamish Online 網站效能。


如果您的瀏覽器不支援內嵌框架,請按一下這裡,在單獨的頁面檢視。


圖 1 在 Web Farm 額外增加幾部 Web 伺服器之後所展現的 Duwamish Online 擴充度

當您在 Web Farm 架設使用站台時,處理負載量一定會分配到各個主機上。叢集所收到的處理要求,會導向叢集不同的主機,而延緩回應時間,並提高應用程式的輸送量。叢集上的每一部主機都會執行該應用程式所要求的伺服器程式。比方說,每一部主機可能是一部 Web 伺服器、「檔案傳送通訊協定」(FTP) 伺服器、也可能是一部郵件伺服器。負載平衡會將送進來的用戶端要求,分配到各個叢集主機上。

Web 伺服器的負載平衡方案
實作負載平衡的方法有好幾種。為了討論方便,我們將負載平衡的範圍縮小為三種主要方法:

Round Robin 網域名稱系統 (RRDNS)

負載平衡切換,如 Cisco LocalDirector, F5 Networks 的 BIG-IP 和 Alteon Websystems ACEdirector

Windows 2000 網路負載平衡

現在我們要分別詳細的討論這三種負載平衡方案。

Round Robin DNS
如果 Internet 伺服器田所用的 TCP/IP 負載平衡形式有限,那麼 RRDNS 無疑是一種簡單且便宜的方法。它通常都免費附在一般最常用的作業系統上,成為一種標準功能,這些作業系統有:檢附 Service Pack 4 的 Microsoft Windows NT® 4.0 和 Windows 2000,以及其他許多支援 BIND 4.9 以上的系統。

請注意 Berkeley Internet Name Domain (BIND) 是實際使用的 DNS。

RRDNS 可以讓用戶端把一組伺服器當作一部主機使用,事實上用戶端要求都是導向集區內所有的伺服器,因此,資料量是分配給這些伺服器的。

雖然許多有成本顧慮的網站都很喜歡採用 Round Robin DNS,但它的可用度其實不能算很高。如果伺服器當掉的話,除非您以人工方式將它從 DNS 移除,否則 RRDNS 還是會繼續把要求傳給當掉的伺服器,而使用者這時候也必須耐心等待 DNS,也許在尚未順利存取到想要的網站之前,就超過連線時限了。

如果您希望更深入討論 RRDNS 的運作,請參閱附錄部分。

負載平衡切換
負載平衡切換 (如 Cisco LocalDirector、F5 Networks 的 BIG-IP、以及 Alteon Websystems ACEdirector) 可以將 TCP/IP 要求重新導向至伺服器田當中的多部伺服器,提供更高的擴充度、互動性、以及可靠度。

這些切換是介於 Internet 和 Web Farm 的連線之間。所有的要求都是利用同一個 IP 位址來到該切換,讓它根據其中實作的各種演算法,將每一個要求轉遞給不同的 Web 伺服器。這些切換開關會三不五時的 ping Web Farm 的伺服器,確定它們仍在運作當中,並且評估它們的忙碌程度 --- 讓它們有效執行負載平衡。

另一種常用的演算法,就是根據要求的內容來負載平衡 --- 這個內容也許是要求者的 IP 位址,也許是要求的其他資訊。光使用 IP 位址的效果並不是那麼好,因為有的 Internet 服務提供廠商 (ISP) 和公司所用的 proxy 伺服器,會改變所有經由 proxy 到達同一位址的要求者的 IP 位址。

使用負載平衡切換,遠比 Round Robin DNS 更好而且更有擴充的彈性,但是也相當昂貴 --- 您得使用好幾個切換,才能避免這個切換成為整個 Web 應用程式的單一失敗點。下面這個方案 Windows 2000 Network NLB 就比負載平衡切換便宜,也可以避免產生單一失敗點。

Windows 2000 NLB
「網路負載平衡」(NLB) 是 Windows 2000 Advanced Server 和 Windows 2000 Datacenter Server 中一種可用的叢集技術。它可以對以 IP 為主的應用程式 (如 Web 伺服器和 Lightweight Directory Access Protocol (LDAP) 伺服器),提供高度的可用度和擴充度。Microsoft Application Center 2000 可以在 Windows 2000 伺服器 (而不是 Advanced Server) 提供 NLB。

NLB 會把內送的 IP 資料流量,分配到叢集上多部提供 TCP/IP 服務的伺服器。它會善用整個叢集的一個共用虛擬 IP 位址,以透明的方式,將用戶端要求分割到叢集上的多部伺服器。

圖 2 將示範 NLB 的運作方式。

 

圖 2 網路負載平衡架構

除了叢集的共用外部 IP 位址之外,叢集上的每一部伺服器也都個別回應到指定的網路位址。因此,每一部機器都個別回應到兩個網路位址:一個叢集網路位址以及一個指定網路位址。「網路負載平衡」是利用網路驅動程式來實作,而網路驅動程式則以邏輯方式置於主機的網路介面卡和較高層的通訊協定 TCP/IP 之間。所有的叢集主機都會收到內送的資料流量。NLB 網路驅動程式是作為篩選器使用,它容許主機只處理一部份的內送資料流量。內送要求則是根據主機的 NLB 設定而被接受。我們稍後會討論 NLB 設定。

下面是部署 NLB 的優點:

容錯。「網路負載平衡」會自動偵測到運作不良的主機,並且將它修復。如果主機離線,內送的資料流量也會分配給所有的伺服器。而且它不需要額外加上其他硬體,來避開單一失敗點。

擴充度更高。雖然 16 到 24 部電腦的小型叢集效能較佳,不過「網路負載平衡」還是能夠支援多達 32 部電腦的叢集。如果需要加強效能,可以將 NLB 和先前所提的兩種負載平衡法的其中一種搭配使用,在多個 NLB 叢集之間負載平衡。

效能更佳。 「網路負載平衡」與大部份負載平衡切換不同的是,其效能會隨著叢集主機和區域網路 (LAN) 的速度加快而自動提高,這樣可以確保它在 LAN 和主機加速時,不會成為瓶頸。

管理能力您可以為一個 TCP 埠指定負載平衡,來自訂主機的處理負載量。同時也可以阻隔對某些連接埠的存取。

好用。「網路負載平衡」不需要執行任何特殊的硬體,就可以安裝標準的網路驅動程式元件。這樣一來,要在叢集內增加或移除機器就很方便了 --- 如果 Application Center 2000 伺服器是後半年出貨,就更加方便了。(其他詳細資訊,請參閱 http://go.microsoft.com/fwlink/?linkid=591)。

Duwamish Online Web Farm with NLB
現在讓我們看看已由 Duwamish Online 實作的負載平衡方案。對 Duwamish Online 來說,網路硬體是採用 100-Mbps 的切換。

這個切換對應於 Open Systems Interconnection (OSI) 資料連結層。它可以讓網路裝置之間的通信免於碰撞,並且讓兩個連接埠之間進行多筆資料同時傳輸,提高網路的容量。

當切換啟動時,它會建立每一個網路介面卡的媒體存取控制位址表格,上面並標有每個介面卡所連接的埠號。因此,當「連接埠 1」上的主機需要傳送資料封包給「連接埠 2」上的另一部主機時,切換會直接把資料封包轉送給「連接埠 2」,這樣一來,另一部主機或連接埠就不必為了傳給「連接埠 2」,而回應資料封包了。

在「網路負載平衡」中,媒體存取控制位址會換成叢集網路介面卡的媒體存取控制位址。這個媒體控制位址是由叢集當中所有的主機所用。當要求送入時,切換會把要求轉送給與該叢集媒體存取控制位置相關的所有連接埠。其中一部主機會根據雜湊演算法接收這個封包,而其他主機則略過不管。處理之後,資料封包便會從最初接收它的地方被送回該連接埠。

我們已經用過切換,因為切換可以用全頻寬同時處理好幾個交談作業。因此,如果一個叢集主機在處理一個要求時,又收到另一個要求,這時候另一部主機就會收取該資料封包,開始處理。這樣就可以確保提高系統的效能。

圖 3 所示範的,是 Duwamish Online 網站的網路架構,以及切換目前的部署方式。


如果您的瀏覽器不支援內嵌框架,請按一下這裡,在單獨的頁面檢視。


圖 3 Duwamish Online 硬體架構

設定 NLB 叢集
您必須指定特定的 NLB 設定,給叢集中的每一部主機。同時,也要指定一些參數給整個叢集。因此,叢集當中所有主機的叢集層設定必須一致。

架構伺服器的 NLB

在 Windows 桌面的 [網路上的芳鄰] 圖示按一下滑鼠右鍵,選取 [內容]。在從 [網路及撥號連線] 視窗連接到外部網路區段的網路介面卡上,按一下滑鼠右鍵。選取 [內容],開啟 [區域網路連線內容] 對話方塊。

勾選 [網路負載平衡] 核取方塊,然後按一下 [內容] 按鈕,開啟 [網路負載平衡內容] 對話方塊。

按一下 [叢集參數] 標籤。

叢集當中所有伺服器的叢集參數必須一致。下表將說明一些叢集參數。

表 1 叢集參數 參數
說明

主要 IP 位址
這個位址是以標準記號表示法指定,是叢集的虛擬 IP 位址。

子網路遮罩
這個參數可指定叢集的子網路遮罩,它是以標準記號表示法指定。

完整的 Internet 名稱
這個參數可指定用戶端所要存取的叢集的 Internet 名稱。

在 Duwamish Online 網站上,我們使用 "www.duwamishonline.com."

網路位址

這個參數可指定用來處理用戶端對叢集之資料流量的叢集的媒體存取控制位址。它是根據叢集的 IP 位址所產生。Duwamish Online 是採用 NLB 所設定的預設值。



按一下 [主機參數] 標籤。

主機參數對叢集上的每一部主機來說都是唯一的。

表 2 主機參數 參數
說明

優先順序 ID

這個參數可指定處理 TCP 和 UDP 埠之資料流量的優先順序。每一部機器的優先順序 ID 值都不能重複。Duwamish Online 是使用 1、2、3 和 4 當作叢集的四部機器。

起始的叢集狀態

這個參數可指定當 Windows 2000 在主機上啟動時,「網路負載平衡」是否應該啟動,而且該主機是否該加入叢集當中。Duwamish Online 是使用預設值,也就是作用中。

指定的 IP 位址
這個參數可指定與叢集無關之資料流量所用的 IP 位址。

子網路遮罩
這個參數可指定所指定之 IP 位址的子網路遮罩。



按一下 [連接埠規則] 標籤。

您需要指定規則,來定義每一個 TCP 和 UDP 連接埠叢集資料流量的處理方法。

連接埠規則是針對相鄰的位址範圍而指定。連接埠 443 需要特殊的組態設定,因為它是由 Secure Sockets Layer (SSL) 所用。請加上下表所列的連接埠規則。

表 3 連接埠規則 連接埠範圍
連接埠規則

0-442

篩選模式:多部主機

特殊的用戶端關聯性:無

443-443

篩選模式:多部主機

特殊的用戶端關聯性:單一

444-64000

篩選模式:多部主機

特殊的用戶端關聯性:無



您可以為主機指定下列三種篩選模式的一種:

多部主機指定網路資料流量是由叢集當中的多部主機共同處理。

單一主機指定與某一連接埠相關的網路資料流量,由叢集當中的一部主機所處理。

停用是指定某一部特定主機的所有網路資料流量被全部阻隔。

在 Duwamish Online 網站上,我們為大部份的連接埠選擇多部主機,讓資料流量可以平均分配給叢集上的所有主機。

您也可以指定用戶端關聯性,來確保由叢集當中的某一部主機,處理來自某一個用戶端的資料流量:

無是指出「網路負載平衡」不需要將來自同一個用戶端的多個要求,導向同一部主機。

單一是指出來自同一個用戶端的多個要求,應該導向某一部特定主機。

類別 C 則指出「網路負載平衡」會把來自同一個 TCP/IP 類別 C 範圍的多個要求,導向同一部主機。

在 Duwamish Online 網站上,我們為大部份的連接埠指定無,讓來自同一個用戶端的要求,能夠被多個伺服器共同處理。

從叢集移除節點
對於已經排好時程的維護作業 (如系統硬體或應用軟體升級),我們經常需要去掉一個 Web 伺服器節點。有時候,其中一部 Web 伺服器無法正常回應,作業小組就得決定拿下這個節點,做進一步的檢查。

要從 NLB 叢集移除 Web 伺服器相當簡單:

在命令提示輸入 "wlbs stop",即可將該節點自叢集當中退出。

在該叢集另一部現有節點的命令提示下,輸入 "wlbs query",驗證被移除之節點的優先順序 ID 已經不見了。

這時候作業小組就可以對移除的節點進行任何作業,因為它不會再接受來自 Internet 的任何要求。

將節點加入叢集當中
當網站的資料流量增加時,您可能會希望在 NLB 叢集當中加入更多的 Web 伺服器節點,以增加額外負載量的容量。下面是擴展 NLB 叢集的步驟 (最多擴展到 32 個節點):

使用一部其硬體組態與其他現有 Web 伺服器相似或相同的伺服器機器。

將完全相同的軟體安裝在新伺服器上,包括作業系統、任何協力廠商軟體、以及應用程式的所有元件。

將完全相同的系統組態和效能調整程序套用在新的伺服器上。

在該伺服器使用同樣的 NLB 設定參數,當然唯一優先順序 ID 和指定的 IP 位址是例外。

驗證所有的網路纜線都已妥善安裝。啟動新的伺服器。

在命令提示下輸入 "wlbs start",伺服器便會加入 NLB 叢集當中成為一個節點。

在命令提示下輸入 "wlbs query",驗證新伺服器的優先順序 ID 是已擴展的叢集當中的一部份。

管理叢集中的應用程式狀態
在叢集當中,伺服器田很難維護應用程式狀態 (也就是說,用戶端工作階段專屬的資料)。如果只用一部 Web 伺服器,工作階段狀態可以儲存在這部 Web 伺服器當中。但是,當用戶端和伺服器之間沒有任何關聯性要維護,使得來自同一個用戶端的要求被導向叢集中不同的伺服器時,負載平衡配置才能發揮最好的效率。因此,工作階段資料需要在 Web 伺服器外面維護。Duwamish Online 是將工作階段狀態儲存在另一個資料庫當中,而叢集當中所有的伺服器都有權存取這個資料庫。為了避免資料庫造成單一失敗點,一定要用容錯移轉叢集和 RAID 陣列作為磁碟存放區,儘量保持資料庫伺服器的可靠性。

叢集的容錯移轉測試
為了示範 NLB 如何在容錯移轉時運作,我們利用 Microsoft Web Application Stress Tool (http://www.microsoft.com/technet/archive/itsolutions/intranet/downloads/
webstres.mspx),針對一個具備兩個節點的 NLB 叢集,執行了負載測試。有關對網站進行負載測試的其他詳細資訊,請參閱我們即將發表的一篇文章,內容是有關對 Duwamish Online 進行效能測試。

在這個測試當中,兩部 Web 伺服器和一部資料庫伺服器都已設定妥當。一開始時,兩部 Web 伺服器都以等量的負載在 NLB 叢集當中執行。測試進行大約一分鐘後,便故意移除 Web 伺服器 #2 的網路連線,以模擬伺服器的網路或硬體失敗。大約一分鐘後,再重新建立網路連線,讓 Web 伺服器 #2 再度自動進入 NLB 叢集。

這項測試結果顯示,Web 伺服器 #1 在 Web 伺服器 #2 無法運作之後大約 20 秒內,即接收了所有新的要求 (這時候,Web 伺服器 #2 與網路連線被切斷)。在發生容錯移轉之後,Web 伺服器 #1 一共維護了大約每秒 55 頁的整體系統輸送量。這項結果顯示,NLB 叢集中剩下的那一部伺服器,會在極短的時間之內,自動繼續接收新的要求。

Web 伺服器 #2 只要 15 到 20 秒的時間,待伺服器再次連上網路之後,就可以恢復原始系統輸出量。圖 4 所示範的,是 Web 伺服器 #2 在極短的時間內併回 NLB 叢集,然後繼續與 Web 伺服器 #1 一起接受新的要求。



如果您的瀏覽器不支援內嵌框架,請按一下這裡,在單獨的頁面檢視。


圖 4 在容錯移轉時,NLB 叢集的系統輸出量

叢集的擴充度測試
圖 5 所示範的,是 Duwamish Online 網站的負載測試結果,這個網站的 NLB 叢集中有各種數量的 Web 伺服器。它所用的伺服器都是便宜的雙重處理器、工作站類型的機器。請注意,當我們在叢集當中加入機器時,容量是以等差比例來計算。一如先前所提的,通常當叢集的伺服器數目限制在 16 到 24 部時 (遠低於 NLB 所支援的 32 部上限),資源利用的效果最好。較大型的叢集可以用 Round Robin DNS 或負載平衡切換,在多個 NLB 叢集之間負載平衡而加以建立。多處理器伺服器的 NLB 叢集,也很具高度的擴充性。



如果您的瀏覽器不支援內嵌框架,請按一下這裡,在單獨的頁面檢視。

圖 5 藉由增加 Web 伺服器來增加系統輸出量上限

結論
如果您希望達到可靠性和擴充性的標準,最好能夠有多部 Web 伺服器共同處理您的網站。而要善用多部伺服器,就必須執行負載平衡。

最簡單的形式莫過於 Round Robin DNS --- 但是 RRDNS 仍有許多技術上的限制,其中最大的缺點就是它無法偵測到伺服器過慢或當掉,不管這些伺服器能不能夠運作,仍然繼續傳送要求給它們。但是,RRDNS 有時候用在小型、不重要的網站、或是在一組叢集之間執行負載平衡時,效果卻非常成功。

有許多網站 --- 尤其是那些在 Web 伺服器上不使用 Microsoft Windows NT Server 或 Windows 2000 的網站 --- 都是使用負載平衡切換來分配要求。負載平衡切換可以幫助分配負載量,但卻相當昂貴貴,而且會產生單一失敗點,從而降低 Web 應用程式的可靠性和可用性。

如果您是執行 Windows 2000,可以考慮使用 Windows 2000 Advanced Server 網路負載平衡。它不會增加單一失敗點,不需要昂貴的硬體,而且通常比一組負載平衡切換來得便宜。(仍在使用 Windows NT 的人,則可以採用 Windows Load Balancing Service (WLBS))。

附錄:Round Robin DNS 如何運作
當應用程式或使用者要求 Internet 上的資源時,可以使用該資源的 Internet 名稱。比方說,應用程式會使用 "msdn.microsoft.com" 而不是 IP 位址。但是,要找出 Internet 上的資源,就得知道該項資源的 IP 位址。「網域名稱系統」 (DNS) 是將資源的 Internet 名稱轉換成 IP 位址的標準方法。將名稱轉換成對應 IP 位址的方法,稱為名稱解析。有關 DNS 的詳細資訊,請參閱我們的文章<設定網域名稱系統> .

每當網域的 DNS 伺服器被查詢時,可能會得出不同的 IP 位址 (或是不同順序的可能 IP 位址組)。每一個 IP 位址都指向一個邏輯方面相同、具有同樣處理要求能力的伺服器。由於不同的用戶端是指到不同的機器 (IP 位址不同),因此我們會得到原始形式的負載平衡。

RRDNS 的主要優點是,它不需要額外的硬體,只要妥善設定 DNS 伺服器就可以使用了。但是它卻有許多缺點,使得許多網站無法使用 RRDNS 來執行負載平衡:

DNS 的快取功能使得負載平衡無法完成,因為並不是每一個進來的要求,都會直接從我們的 DNS 伺服器取得其位址。

當然您只要停用快取,就可以解決這個問題,但這就表示每一個方案都必須由您的伺服器產生,這麼一來成本就相當昂貴,而且對使用者來說也慢了點。

DNS 伺服器不可能會知道Web Farm當中是否有一部或一部以上的伺服器超載或沒有服務。因此,round-robin 配置會輪流將資料流量傳給所有的伺服器,即使其中有些已經超過負荷或當掉了也一樣。雖然這時候使用者可以按一下 [重新整理],再重試一次 (假設沒有執行快取的話,也許有成功的機會),但還是不希望發生這種事。

正是因為這個原因,大型或重要的Web Farm並不常使用 Round Robin DNS (至少不會任意使用)。不過您可以用 RRDNS 在只有二或三部伺服器的Web Farm上執行負載平衡 --- 或者用它在二或三部伺服器叢集之間平衡負載,每一個伺服器都用本文所提的其中一種負載平衡方案來平衡負載。(會導致整個叢集失敗的可能性微乎其微)。



http://www.microsoft.com/taiwan/technet/itsolutions/ecommerce/maintain/operate/d5nlb.aspx?mfr=true

留言

這個網誌中的熱門文章

嘗試卸載資料庫時,發生資料庫正在使用的而無法卸載的可能解決方案

ASP.NET常用的RegularExpressionValidator驗證