孫光懿, 熊 杰
(1.天津音樂學院圖書信息中心,天津300171;2.黃岡師范學院物理與電信學院,湖北黃岡438000)
為使廣大師生方便快捷的獲得教學科研以及專業學習所需的西方宗教音樂資源,開發了西方宗教音樂資源檢索平臺。但是隨著用戶數的增加,單臺服務器的計算與數據處理能力已無法應對如此巨大的訪問量,為有效解決這一問題,采用在校園網內部署多臺應用服務器并在出口路由器上應用服務器負載均衡(Server Load Balancing,SLB)[1-3]技術,實施服務器冗余和流量負載均衡的設計方案,這樣可使用戶請求的流量將由多臺服務器負責處理,不僅可以有效解決單臺服務器流量負載過重和發生單點故障的問題,而且還可以充分利用現有服務器資源,節省購買高性能服務器的經費。西方宗教音樂資源檢索平臺實際運行在各真實服務器之中,對外呈現出的則是SLB虛擬服務器。另外出口路由器還可根據多種不同因素來配置服務器負載分擔,在特殊情況下,可以指定同一臺服務器對用戶的請求做出響應。例如當使用文件傳輸協議FTP時,用戶必須與同一臺服務器進行會話,才能完成文件的傳輸任務。
SLB可以看作是熱備份路由協議(Hot Standy Router Protocol,HSRP)協議的擴展,屬于思科私有協議。主要應用在思科3層網絡設備上,多用來實現服務器之間流量負載均衡[4-6]。SLB組可以由多臺服務器組成,但是虛擬服務器只能有1臺,(虛擬服務器可以看作是真實服務器的群集)虛擬服務器負責響應客戶發起的訪問請求,再根據WRR或WLC負載均衡算法將數據包轉發到一臺或多臺真實服務器上,在這一過程中用戶只需知道虛擬服務器的IP地址即可完成對應用系統的訪問,而無需知道真實服務器的IP地址,從而使真實服務器得到了有效的安全保護。另外應用SLB技術還可以獲得如下好處:①可以增強應用系統運行的可靠性,當真實服務器發生故障無法響應用戶的請求時,路由器可以立刻檢測到并不再向其轉發用戶請求數據包,直到這臺故障真實服務器能夠正常工作為止。響應用戶請求的工作則由其他真實服務器來繼續完成,整個過程中用戶對應用系統的訪問不會受到絲毫影響。②可以極大減輕系統管理員的工作負擔,由于用戶只知道在2層網絡中存在的虛擬服務器,因此當系統管理員對真實服務器進行重新調整時,無需考慮當前用戶的狀態。
(1)分派工作模式。在分派工作模式中,用戶數據包的目的IP地址為虛擬服務器的IP地址,當運行SLB的路由器收到用戶數據包后,即按照某種負載均衡算法[7]將數據包轉發到真實服務器中,在此過程中并不改變數據包的目的地址。真實服務器為了響應用戶的請求,不僅需要將虛擬服務器的IP地址設置為各真實服務器接口的第2地址,而且需要保證與運行SLB的路由器以及虛擬服務器在數據鏈路層中可達,否則真實服務器將無法響應用戶的請求。
(2)定向工作模式。定向工作模式與分派工作模式略有不同,運行SLB的路由器也是按照某種負載均衡算法把收到的用戶數據包(此時數據包的目的IP地址同樣為虛擬服務器IP地址[8-9])發往各真實的服務器,但是會通過NAT技術把數據包中的目的IP地址轉換為真實服務器的IP地址(需要注意的一點是路由器iOS的版本不同,有可能所支持的NAT類型也會不同)。在定向工作模式下,真實服務器不會認為2層網絡中有虛擬服務器的存在,對于目的IP地址為自己的數據包,也不會將其丟棄。由于分派工作模式可使真實服務器獲得更高的性能與安全性,因此在默認情況下,運行SLB的路由器多使用分派工作模式。
仿真實驗由3臺服務器(分別用路由器R1、R2、R3來模擬)、1臺思科3640路由器R4、1臺思科3550 3層交換機SW1和1臺終端計算機(用路由器R5來模擬)構成。3臺服務器作為TELNET SERVER主要用來響應并處理用戶TELNET服務請求,3層交換機SW1則用來與路由器R4和3臺服務器互連。為了提高用戶訪問TELNET SERVER的可靠性與安全性,將路由器R4部署在網絡出口處的同時,將3臺服務器部署在內網,并且在路由器R4上應用SLB技術,使3臺服務器在邏輯上組成1個虛擬服務器,用戶對TELNET SERVER的請求均先由路由器R4負責處理。當路由器R4收到路由器R5的TELNET請求后,首先會向R5呈現出虛擬服務器的IP地址,然后再把R5的請求轉發到3臺真實服務器上,3臺服務器會按照在路由器R4上制定的負載均衡算法來決定自己所承載的流量。如果采用的是加權輪詢算法,則根據每臺真實服務器處理能力的不同,制定相應的權值,使其可以處理相應的用戶訪問請求。如果采用的是加權最小連接調度算法,則每臺真實服務器已建立連接的用戶訪問請求與所設定的權值會成一定比例。仿真實驗網絡結構如圖1所示。
路由器R4的f0/0與e1/3接口分別連接路由器R5和3層交換機SW1。而3層交換機SW1的f1/1、f1/2、f1/3接口分別與路由器R1的e1/0接口、路由器R2的e1/1接口、路由器R3的e1/2接口相連。仿真實驗各設備接口IP地址分配詳細情況如下:

設備名稱接口IP地址子網掩碼R1 e1/0 2.1.1.3 255.255.255.0 R2 e1/1 2.1.1.4 255.255.255.0 R3 e1/2 2.1.1.5 255.255.255.0 R4 e1/3 2.1.1.2 255.255.255.0 f0/0 211.68.193.3 255.255.255.0 R5 f0/0 211.68.193.2 255.255.255.0
(1)配置路由器R1
R1(config)#int e1/0//進入接口e1/0
R1(config-if)#ip add 2.1.1.3 255.255.255.0
R1(config)#int LOOPBACK 1//建立環回接口
R1(config-if)#ip add 5.5.5.5 255.0.0.0
R1(config)#line vty 0 5
R1(config-line)#password sgy
R1(config-line)#login
(2)配置路由器R2
R2(config)#int e1/1//進入接口e1/1
R2(config-if)#ip add 2.1.1.4 255.255.255.0
R2(config)#int LOOPBACK 1
R2(config-if)#ip add 6.6.6.6 255.0.0.0
R2(config)#line vty 0 5
R2(config-line)#password sgy
R2(config-line)#login
(3)配置路由器R3
R3(config)#int e1/2//進入接口e1/2
R3(config-if)#ip add 2.1.1.5 255.255.255.0
R3(config)#int LOOPBACK 1
R3(config-if)#ip add 7.7.7.7 255.0.0.0
R3(config)#line vty 0 5
R3(config-line)#password sgy
R3(config-line)#login
(4)配置路由器R4
R4(config)#int e1/3//進入接口e1/3
R4(config-if)#ip add 2.1.1.2 255.255.255.0
R4(config)#int f0/0//進入接口f0/0
R4(config-if)#ip add 211.68.193.3 255.255.255.0//此接口地址用于與路由器R5互連
(5)配置路由器R4
R5(config)#int f0/0//進入接口f0/0
R5(config-if)#ip add 211.68.193.2 255.255.255.0//此接口地址用于與路由器R4互連
(6)配置3層交換機SW1
SW1(config)#vlan database
SW1(vlan)#vlan 2
SW1(config)#int range f1/0-3
SW1(config-if-range)#sw access vlan 2
由于路由器R5與路由器R1、R2、R3不在同一網段中,如需互相通信就必須為其配置路由,在這里為各路由器配置可靠性更高的靜態路由。
R1(config)#ip route 0.0.0.0 0.0.0.0 2.1.1.2
R2(config)#ip route 0.0.0.0 0.0.0.0 2.1.1.2
R3(config)#ip route 0.0.0.0 0.0.0.0 2.1.1.2
R5(config)#ip route 0.0.0.0 0.0.0.0 211.68.193.3
R4(config)#ip route 5.0.0.0 255.0.0.0 2.1.1.3
R4(config)#ip route 6.0.0.0 255.0.0.0 2.1.1.4
R4(config)#ip route 7.0.0.0 255.0.0.0 2.1.1.5
在分配工作模式下,不僅需要將路由器R1、R2、R3、R4以及虛擬服務器地址配置在同一個網段,而且還要在路由器R1、R2、R3與3層交換機SW1互連的接口下增加一個secondary地址(此地址為虛擬服務器IP地址),從而保證它們之間在2層網絡可以相互通信。
R4(config)#ip slb server lzz//創建名為lzz的服務器組
R4(config-slb-sfarm)#real 2.1.1.3//服務器組內其中的一個真實服務器 IP地址為1.1.1.3
R4(config-slb-real)#weight 1//配置這個真實服務器的權重,SLB按照權重值來分配各服務器所承載流量的大小
R4(config-slb-real)#inserv//啟用服務器
R4(config-slb-real)#faildetect//配置檢測服務器的可用狀態,如果服務器發生故障,SLB將不會把流量轉發到該服務器
R4(config-slb-sfarm)#real 2.1.1.4
R4(config-slb-real)#weight 1
R4(config-slb-real)#inserv
R4(config-slb-real)#faildetect
R4(config-slb-sfarm)#real 2.1.1.5
R4(config-slb-real)#weight 1
R4(config-slb-real)#inserv
R4(config-slb-real)#faildetect
R4(config-slb-real)#exit
R4(config-slb-sfarm)#predictor roundrobin//采用輪詢負載均衡方式
R4(config)#ip slb vserver lzz//創建虛擬的服務器
R4(config-slb-vserver)#virtual 2.1.1.100 tcp telnet//設置虛擬服務器 IP 地址為2.1.1.100
R4(config-slb-vserver)#serverfarm lzz//使用前面創建的服務器組
R4(config-slb-vserver)#client 211.68.193.0 255.255.255.0//只允許此網段的用戶訪問虛擬服務器
R4(config-slb-vserver)#inservice//啟用虛擬的服務器
R1(config)#int e1/0
R1(config-if)#ip add 2.1.1.100 255.255.255.0 secondary//增加虛擬服務器的IP地址
R2(config)#int e1/1
R2(config-if)#ip add 2.1.1.100 255.255.255.0 secondary
R3(config)#int e1/2
R3(config-if)#ip add 2.1.1.100 255.255.255.0 secondary
在定向工作模式下,不需要將路由器R1、R2、R3、R4以及虛擬服務器地址配置在同一個網段,路由器R4會更改用戶請求的數據包,將數據包中的目的IP地址更改為真實服務器的地址(即路由器R1、R2、R3的環回接口地址)。
R4(config)#ip slb server lzz
R4(config-slb-sfarm)#nat server//設置SLB的工作模式為定向模式
R4(config-slb-sfarm)#real 5.5.5.5//模擬路由器 R1 的環回接口作為真實服務器的地址
R4(config-slb-real)#weight 1
R4(config-slb-real)#inservice
R4(config-slb-real)#faildetect
R4(config-slb-sfarm)#real 6.6.6.6//模擬路由器 R2 的環回接口作為真實服務器的地址
R4(config-slb-real)#weight 1
R4(config-slb-real)#inservice
R4(config-slb-real)#faildetect
R4(config-slb-sfarm)#real 7.7.7.7//模擬路由器 R3 的環回接口作為真實服務器的地址
R4(config-slb-real)#weight 1
R4(config-slb-real)#inservice
R4(config-slb-real)#faildetect
R4(config-slb-real)#exit
R4(config-slb-sfarm)#predictor roundrobin//采用輪詢負載均衡方式
R4(config)#ip slb vserver lzz//創建虛擬的服務器
R4(config-slb-vserver)#virtual 173.17.1.100 tcp telnet//設置虛擬服務器 IP地址為173.17.1.100
R4(config-slb-vserver)#serverfarm lzz//使用服務器組lzz
R4(config-slb-vserver)#client 211.68.193.0 255.255.255.0//只允許此網段的用戶訪問虛擬服務器
R4(config-slb-vserver)#inservice//啟用虛擬的服務器
在這里以分配工作模式下的SLB為例,測試用戶(路由器 R5)TELNET遠程訪問虛擬服務器2.1.1.100,查看是否實現服務器之間流量負載均衡以及虛擬服務器和服務器組的工作狀態。
(1)使用TELNET命令進行負載均衡測試
R5#telnet 2.1.1.100
Trying 2.1.1.100 ...Open
User Access Verification
Password:
R1 > exit[Connection to 2.1.1.100 closed by foreign host]//連接到了R1路由器
R5#telnet 2.1.1.100
Trying 2.1.1.100 ...Open
User Access Verification
Password:
R2>exit
[Connection to 2.1.1.100 closed by foreign host]//連接到了R2路由器
R5#telnet 2.1.1.100
Trying 2.1.1.100 ...Open
User Access Verification
Password:
R3>exit
[Connection to 2.1.1.100 closed by foreign host]//連接到了R3路由器
(2)服務器組的詳細信息如圖3所示。

圖3 服務器組的詳細信息
(3)虛擬服務器的詳細信息如圖4所示。

圖4 虛擬服務器的詳細信息
通過以上測試,可以得出以下結論:虛擬服務器lzz由3臺真實服務器構成(用路由器R1、R2、R3來模擬),它們之間采用輪詢負載均衡算法響應用戶請求,且每臺服務器的權重值均為1。當用戶(路由器R5)對虛擬服務器發起訪問請求時,(此時數據包的目的地址為虛擬服務器地址2.1.1.100)3臺真實服務器(即路由器R1、R2、R3)會按照輪詢負載均衡算法依次分別響應用戶的訪問請求,從而實現了服務器之間流量負載均衡。
在這里通過手動關掉路由器R1模擬真實服務器發生故障。測試后發現,用戶(路由器R5)仍然可以對虛擬服務器地址進行正常訪問,虛擬路由器檢測到路由器R1發生故障,進而不再向路由器R1轉發用戶的服務請求,路由器R2和路由器R3會按照輪詢負載均衡算法繼續響應用戶的訪問請求。由此可見,在啟用SLB技術后服務器組內的某臺服務器即使發生故障,也不會影響用戶對資源檢索平臺的正常訪問。
SLB技術是實現服務器之間流量負載均衡的重要技術之一,可以提供第4層或第7層交換特性。通過在網絡中應用SLB技術,將多臺低性能的服務器虛擬成一臺高性能的虛擬服務器,不僅服務器之間可以按照預先設定的算法實現流量負載均衡,而且還使服務器組具有了容錯性。