原文出處:http://kate.babyface.com.tw/NetAdmin/15200704SLB/
作者:徐秉義(Albert Hsu)

 

使用 Foundry ServerIron XL 設定伺服器負載平衡(SLB,Server Load Balancing)

作者:徐秉義(Albert Hsu)

各類型的網路服務,像是全球資訊網、名稱解析、電子郵件、檔案傳輸、即時通訊、影音串流及線上遊戲這些,當規模發展到中大型以上且已具有企業核心價值的時候,都會採用一堆伺服器(也就是 Server Farm)來抵禦極大量的負載,而在這團伺服器的前端,則需要有一個指揮交通的引向器(Director),此引向器主要是將來自於客戶端的負載平衡到各台伺服器上,達到伺服器負載平衡(SLB,Server Load Balancing)的目地。

伺服器端的負載平衡設備較不常見且單價較高(相較於客戶端網際網路線路的負載平衡設備則是百家爭鳴),幾家知名的廠商像是 Foundry、Cisco、Nortel 與 F5,都已經有相當成熟的 SLB 產品。如果說要使用 Linux 搭配 OpenSource 軟體來做到伺服器負載平衡的話,著名的方式就是採用 Linux Virtual Server(網址 http://www.linuxvirtualserver.org/)如下圖。

lvs

不論是採用硬體式 SLB 設備或是使用 Linux Virtual Server 來分散流量,其 SLB 架構都相當類似,在規劃好 Virtual Server 與 Real Server 後,接著就是一些細部微調與測試,並且搭配 Failover 機制,大致上就完成了基礎功能。接下來筆者先行介紹 SLB 架構後,接著就以 Foundry 的 ServerIron XL 這台具有 SLB 功能 Layer 4 Switch 來建構 Server Load Balancing。

SLB 架構

Server Load Balancing 是用於伺服器端的負載平衡技術,若以 ServerIron XL 原廠使用手冊中的圖來解說:客戶端會向 Virtual Server(也就是網址 www.alterego.com )存取網頁,在此同時 ServerIron XL 的主要功能就是將「向 Virtual Server 的網頁要求,轉換並分散到 Real Server 上」。

slb

溫馨提示:範例中的 IP 皆為 Internet IP(Public IP)位址,待會我們測試時,為求方便起見則是統統使用私有 IP(Private IP)位址。

而針對 Virtual Server 與 Real Server 較為詳細的角色定義如下:

Virtual Server

Virtual Server 由整個叢集(一堆的 Real Server 加上 Load Balancer)組成,客戶端存取的虛擬主機,會被負載平衡器(Load Balancer)分攤到 Server Farm 的機器上(也就是各台 Real Server 上)。至於上圖寫的 Virtual IP 其實也就是整個叢集主機對外的「代表號」(類似電話系統「總機」角色),對外界的使用者來說,只會感覺像是一台主機,並不容易探得內部到底有多少台的真實主機。

Real Server

Real Server 是「真正的服務主機」,Real Server 的數量會依照整個叢集負載量的增加而增加,除此之外,每一台 Real Server 是否健康(Health)的監控任務通常就落到 Load Balancer 身上,而 Load Balancer 有著不同的演算機制來決定要將服務的要求分散給那台 Real Server 上,演算機制像是 Least Connect(最少連線)、Round Robin(隨機)及 Least Respone Time(最小回應時間) 及 Weighted(給予的比重或比率)等等。

SLB 優點

應用 SLB 架構與技術最明顯的優點是「將大量的負載,分散給多台主機」,常見於 PC 所組成的叢集系統;另外還有「可延展性」也是一大優勢,這個「延展性」是利用 Real Server 數量的增加,來減少大量服務時所造成的回應時間增長;叢集還需要利用偵測程式把故障的 Real Server 剔除在服務主機的列表、並且當 Real Server 修復後還需要增加回去,這就是 Failover(故障復原)功能,以上這些功能使得整個應用系統提供全年無休、高可用度(HA, High Available)的服務。

Foundry ServerIron XL 介紹

本文的重點功能:SLB

Foundry ServerIron XL 是一款在業界相當知名的 Load Balancer 產品,其主要功能之一就是做 Server Load Balancing,另外也有人拿來做網頁需求(Web Request)的「重新導向」(Redirect)到快取伺服器(Cache Server),以及 Layer 7 URL Switching 功能,現有基本款為 16 個 10/100 Mbps 埠的機種,而筆者手邊這款年代久遠,為 8 個 10/100 Mbps 埠的機種。

原廠網站上的介紹 http://www.foundrynet.com/products/app-switch/fixed-systems/si-xl.html

serverironxlwebpage

若要簡單一點地來說明 ServerIron XL 用途的話,有以下四大功能:

SLB(Server Load Balancing):伺服器負載平衡,本文主要介紹的功能。

GSLB(Global Server Load Balancing):依照所在「地域」來加速提供服務上的效率及負載平衡。

TCS(Transparent Cache Switching):透通式快取,客戶端不需設定 Proxy 卻還是會被 Proxy Server 快取住,以增進效率。

URL Switching:依照 URL(網址)來交換服務的目地主機。

關於 SLB 功能相信讀者都已經清楚明白了,所以底下以簡單的範本介紹其他三項,也就是 GSLB、TCS 與 URL Switching。

GSLB

關於 ServerIron XL 的另一項知名功能 GSLB,Global Server Load Balancing 簡介如下:

下圖為GSLB(Global Server Load Balancing)示意圖,取自 Foundry ServerIron 產品介紹的 PDF 文件(網址 http://www.foundrynet.com/pdf/an-global-server-load-bal.pdf),此為依照所在「地域」來加速提供服務上的效率並且分散負載,可惜國內甚少有實際應用到此大型企業級的 GSLB,若著眼於兩岸三地的跨區域服務,應用 GSLB 立即就能夠取得效能上的優勢。

圖中客戶端位於德國-法蘭克福(Frankfurt),主要服務主機位於美國-聖荷西(San Jose),次要服務主機位於英國-倫敦(London),客戶端會找較近的倫敦服務主機,提出網頁需求。

gslb

TCS

TCS(Transparent Cache Switching)依照下圖範本所示:客戶端(位於 ServerIron XL 左方),經由 ServerIron XL 透通式快取,客戶端不需設定 Proxy 卻還是會被導向到 Cache Server(位於 ServerIron XL 下方)的代理伺服器快取住,以增進存取 Internet 效率(Internet 位於 ServerIron XL 上方)。

tcs

早期台灣對島外頻寬不甚寬裕時,亦可使用此架構來減少存取島外的頻寬。這架構現在變換成利用 Cache Server 主機的存取規則設定,來允許/拒絕某些 Internet 網頁的存取,類似內地「封網」政策。

URL Switching

依照下圖看來,基礎架構類似 SLB(左方 Virtual IP、右方 Real Server),不同的是在於 ServerIron XL 可針對不同的 URL 網頁要求,導向到不同的 Real Server 去,例如:導向到 Server Group ID=1(圖的上方)的是 URL 開頭為「/home」;導向到 Server Group ID=2(圖的中間)則主要伺服 gif 圖檔;導向到 Server Group ID=3(圖的下方)則是開頭為 /cgi-bin/ 也就是 CGI 程式,而預設值(不是 /home、gif 圖檔、CGI 程式)默認導向到 Server Group ID=1。

urlSwitch

溫馨提示:這與筆者於「伺服器效能瓶頸」一文中,提到『圖文分離』觀念不謀而合。

實戰測試 SLB 功能於 ServerIron XL

接下來就要實際操作 ServerIron XL 在 SLB 方面的功能設定,於開始之前須先了解一下測試環境與架構,這樣才不容易搞混。首先是為了我們方便測試,所以使用私有 IP 區段 172.16.0.0/255.255.0.0 來實驗,實做 Web Server 的 SLB 架構如下:

測試環境的架構

既然是實做 Web Server 的 SLB,為簡化流程所以我們都使用預設的 80 埠,預備使用的 Virtual Server IP 為 172.16.2.110 而 Real Server 則有三台,IP 分別為 172.16.2.102、172.16.2.103、172.16.2.104,另外還有一台客戶端主機,也同屬於 172.16.0.0/255.255.0.0 網段,主要功能是用來測試 Web SLB 是否正常,還有 ServerIron XL 的 IP 則會設定成 172.16.2.120 用來與這些主機溝通(同網段)。

Virtual IP
Real IP
ServerIron XL IP

172.16.2.110
(www.example.com.tw)
172.16.2.102(web2)
172.16.2.120

172.16.2.103(web3)

172.16.2.104(web4)

整個實驗的配置與先前提到的 SLB 架構差不多,若是手邊主機沒有那麼多台,可採用虛擬方式替代,像是使用 Apache VirtualHost 功能來虛擬多個 Web 站台,或是使用 VMWare、Xen 一類的虛擬機器軟體來模擬出幾台 PC,至於一台主機欲使用多個 IP 在 Linux 則使用 ifconfig、ip 指令即可輕鬆辦到。

ServerIron XL 連接 COM 埠的相關設定

網路設備往往在最初始的設定期間,都需要使用 Com 埠來連接,這台 ServerIron XL 也不例外,筆者設定這台的經驗是,調整成「9600 8 n 1」以及「無流量控制」,就可以直接進入控制畫面,此因預設值沒有密碼的,輸入「?」可看到這階層所能夠使用的命令。

Linux 使用 minicom 來連線的設定畫面,請注意 minicom 要按下 Ctrl+A 再放掉「Ctrl 與 A」後再按 Z 來呼叫出主要的功能選單。

minicom

Windows 使用超級終端機(Hyper Terminal)連線的設定畫面,點選「還原預設值」即可。

hyperTerminal

ServerIron XL 之基礎控制指令

設定 Foundry 公司的網路設備與設定 Cisco 設備的指令相當類似,ServerIron XL 也不例外。一進入命令列以後使用指令「enable」切換到 privilege 命令模式,接著再使用指令「configure terminal」進入設定模式、「show running-config」檢視正在執行的設定情形,其他一些像是按下「Tab」鍵可以看到此階層所能使用的指令及指令的補全、「exit」命令離開回到上一層等等。

溫馨提示:指令很多都可以輸入縮寫,例如「enable」打成『en』、「config Terminal」輸入成『conf term』等等。

enConfTerm

設定 ServerIron XL 之 Web SLB 流程

步驟一:先來定義 Real Server 這邊,在「configure terminal」層級後,使用「server real web2 172.16.2.102」、「port http」這兩道指令來設定第一台 Real Server 名稱 web2、IP 172.16.2.102 以及埠號 80(也就是 http),接著使用類似的指令來設定第二台、第三台 Real Server。

ConfReal

步驟二:接下來使用類似的指令,來定義 Virtual Server 這端,使用「server virtual www.example.com.tw 172.16.2.110」、「port http」這兩道指令來設定 Virtual Server 名稱 www.example.com.tw、IP 172.16.2.110、連接埠 http,請注意先前指令中的『real』在此變成了『virtual』。

ConfVirtual

步驟三:當我們定義好 Real Server 與 Virtual Server 後,接下來就是要將兩者聯繫(Bind)起來,在「server virtual www.example.com.tw」指令層級下,使用指令「bind http web2 http」與 web2 的 http 埠 bind 起來,再來依序就是 bind 到 web3 與 web4 的相關設定。

bind

步驟四:設定 ServerIron XL 的 IP 為 172.16.2.120。在「configure terminal」層級使用指令「ip address 172.16.2.120/16」來設定 IP 與網路遮罩,其中 16 為遮罩 255.255.0.0 之意。另外因為我們還沒設定 admin 密碼,所以使用指令「no telnet server」來關閉使用 telnet 連進來設定 ServerIron XL。

ipAddr

noTelnetSrv

溫馨提示:若要將某些設定取消,請使用 no 開頭的指令,例如使用指令「no bind http web4 http」來取消 bind web4 的 http 連接埠。

最後使用「show run」來觀看我們所做好的設定,大致上算是完成了!

showRun

其他常用指令包括:
若要將 running-config 寫入主機則使用指令「write mem」
清除寫入的設定使用「erase startup-config」指令
顯示儲存的設定使用「show config」指令
設定 admin 密碼使用「enable password realpass」指令,其中『realpass』為真正的密碼。

測試 ServerIron XL Web SLB 功能

首先我們先測試 ServerIron XL 是否已經將對於 Virtual IP 172.16.2.110 的 http 要求,分散到 web2、web3 及 web4 那三台主機上。筆者的測試方法相當簡單,也就是做三個不同的首頁,放到 web2、web3、web4,當我們針對 Virtual Server(IP 172.16.2.110)重整網頁的時候,就會發現是分別由那三台 Real Server 主機所提供的網頁。

winfirefox

另外一種方法是從 Server 端來觀察,也就是分別查看那三台 Web Server 的 log 檔案,底下是使用指令「tail -f access_log」情況,觀察 web2 172.16.2.102 那台主機的 Apache log 檔案。

access_log

溫馨提示:tail 指令之「-f」參數能夠將後續附加(Append)到檔案的資料,同步顯示在螢幕上。按下「Ctrl+C」可中斷命令,是 tail 指令相當好用的參數。

其他議題

以上 SLB 設定範例可算是 ServerIron XL 最為精簡的範本之一,其實 ServerIron XL 算得上是一款功能相當強大、穩定的商用產品,針對其他較詳細的設定以及產品特點,分別敘述如下:

關於負載平衡的法則

以下提到 Predictor 筆者翻譯成負載平衡的法則,也就是 Virtual Server 送到 Real Server 所採用的演算機制,在下圖中可看出位於「server virtual www.example.com.tw」層級,使用「predictor」指令所見到可選擇的演算機制有三種,分別為「least-conn」(依照最少連線數)、「round-robin」(隨機)以及「weighted」(依照比重)。

predictor

注:因為此款機器較舊,所以演算機制只有三種,新款說明書中有介紹更多方式。

使用指令「show server virtual www.example.com.tw」觀看設定結果。

溫馨提示:若一台 ServerIron XL 同時運行著多台 Virtual Server 時,還可依照個別的 Virtual Server 選擇不同的平衡分散機制。

showServerVirtual

failover 功能

後端 Real Server 是否健康(稱之為 Health Check),會與整個服務系統品質有相當大的關係。在先前 ServerIron XL 精簡的 SLB 設定好之後,已經內建了基礎的監控機制,由「show run」("HEAD /"那幾行)可看出 ServerIron XL 會利用對後端 Real Server 發出網頁要求,依照 Real Server 是否有回應,來判斷是否要將對 Virtual Server 的網頁要求,導向到健康、合適的 Real Server 上去。

showRunPart

我們也可以實際的將 Real Server 主機服務停掉,或是模擬 Real Server 當機情形,當後端 Real Server 主機 Fail(故障)時,ServerIron XL 就會避免將網頁要求,導向至故障的 Real Server 上去,除此之外這期間 ServerIron XL 還會不停地偵測後端 Real Server 是否已經恢復健康,若恢復健康的話,則將健康的 Real Server 加入回服務主機的行列中。

若嫌預設的偵測機制太過陽春,ServerIron XL 亦提供自訂偵測機制設定。如下圖快照並放大設定的相關網頁,此網頁來自網址 http://www.adobe.com/devnet/coldfusion/articles/foundry.html 是設定成偵測 coldfusion 網頁服務是否正常回應的範例,由 ServerIron XL 向 Real Server 來 GET /btauxdir/cfprobe.cfm 這個網頁,並檢查回應的內容是否為 Hello。

cfm

其他 SLB 架構

在 IPv4 架構下,往往 Public IP 的取得會比較不容易,所以我們若將 Real Server 改放置在 Private IP 區段(例如下圖的 10.x.x.x),這樣可以節省 Public IP 數量損耗,ServerIron XL 提供架構如下,用到 Source NAT(Network Address Translate)功能也就是來源地位址的轉譯。

sourceNAT

ServerIron XL 能夠做到的架構相當彈性,以下是其使用手冊上擷取下來的說明(可惜是英文的),您會發現 ServerIron XL 除了一個 Virtual Server 對應多個 Real Server 的精簡架構外,還有許多相當不錯的架構,像是上圖與 NAT 功能結合應用,或是應用 Reverse Proxy 技術等等。

SLBexample

溫馨提示:進階的還有與防火牆整合的 FWLB(Firewall Load Balancing)。
ServerIron XL 自身的 Redundancy

先前是介紹 Real Server 與 Virtual Server 的「高可用度」(HA, High Available)功能,其實 ServerIron XL 本身亦不遑多讓地提供 Redundancy 機制,由以下圖片可看出主要(Primary)ServerIron XL 上線服務,而次要(Secondary)的則 Standby 在一旁備援,當主要的 ServerIron XL 發生問題時,由次要的設備來接手服務。

standBy

溫馨提示:不論是 Active-Standby 架構或是 Active-Active SLB,ServerIron XL 都能辦得到的。

結語

本文所介紹 SLB 以及 ServerIron XL 設備,主要用意並不是在鼓吹產品優點,而是在說明 SLB 能夠實際在商業應用服務的架構、以及用在那些類型的應用系統(當然也就不只是應用在 Web SLB)。很多線上的網路公司,像是做網路購物電子商務、或是線上遊戲伺服主機、即便是現今當紅 Web 2.0 的部落格與網路影音及網路相簿,在服務需求量突然爆增時,往往應變不暇而發生服務中斷或是品質低落,很容易造成客戶來的快、去的也快,若平日就已經備便好 SLB 配套措施,屆時相對的就比較不會手忙腳亂,也就比較能夠留住客戶,這樣生意也才能夠越做越大而永續經營。

===

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Cliff 的頭像
    Cliff

    Cliff的部落格

    Cliff 發表在 痞客邦 留言(0) 人氣()