摘要:負(fù)載均衡器目前在大型的應(yīng)用系統(tǒng)中廣泛使用,起到了數(shù)據(jù)分發(fā)、提高系統(tǒng)性能等作用。但在實(shí)際應(yīng)用中,可能會(huì)碰到很多問(wèn)題造成系統(tǒng)不能正常運(yùn)行。在電力企業(yè)的某個(gè)大型應(yīng)用系統(tǒng)使用中,出現(xiàn)了負(fù)載均衡器成員節(jié)點(diǎn)啟動(dòng)很慢以及服務(wù)自動(dòng)斷開(kāi)的問(wèn)題,通過(guò)各種檢測(cè),根據(jù)檢測(cè)結(jié)果進(jìn)行分析,推斷出系統(tǒng)中故障所在,提出了合理的解決辦法,并在實(shí)際應(yīng)用中進(jìn)行了觀察、測(cè)試,證明了解決辦法的正確、可用性。
關(guān)鍵詞:負(fù)載均衡器;網(wǎng)絡(luò)拓?fù)?交換機(jī);STP協(xié)議
中圖分類(lèi)號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)33-9400-03
Trouble Analysis and Solution of Application System Based on Load Balancer
LI Zhi-ru1,WU Zhong-dong1,MA Zhi-cheng2,ZHU Wei-wei2
(1.School of Electronic and Information Engineering, Lanzhou Jiaotong University, Lanzhou 730070, China; 2.Gansu Electrical Information and Communication Company, Lanzhou 730050, China)
Abstract: Load Balancer is now be used widely in large application systems,it provides such as data distribution and improvement of system performance and so on.But it is probable that there are many problems occur that make application systems be unable in practical applications.In a large application system of electrical enterprise,there were problems include that Load Balancer’s pool members changed up very slowly and service disconnected automatically.By detecting, the paper found the troubles of the system according to results and raised a proper solution,then observed and tested in order to prove that the solution is correct and useful.
Key words: load balancer; network topology; switch; STP protocol
隨著Internet迅猛發(fā)展,Web技術(shù)應(yīng)用領(lǐng)域范圍的不斷擴(kuò)展,Web服務(wù)器必須面對(duì)急劇增長(zhǎng)的Web訪問(wèn)請(qǐng)求,以及進(jìn)行更為復(fù)雜的邏輯、事務(wù)處理等處理需求。Web服務(wù)器必須提供大量并發(fā)訪問(wèn)服務(wù)的功能以及具有極強(qiáng)的計(jì)算處理能力。在單Web服務(wù)器的情況下,要解決這樣的問(wèn)題,唯一的路徑就是通過(guò)提高服務(wù)器的CPU速度,擴(kuò)大內(nèi)存容量以及采用高性能磁盤(pán)陣列。但是這樣仍不可能從根本上解決問(wèn)題,因?yàn)閱闻_(tái)服務(wù)器的性能是有限的。當(dāng)有重大的處理請(qǐng)求,突發(fā)的大量處理數(shù)據(jù)涌向服務(wù)器時(shí),使用更大的、更昂貴的服務(wù)器并不一定能夠保證響應(yīng)時(shí)間的縮短[1]。解決上述問(wèn)題更為行之有效的方法是采用負(fù)載均衡方法。
負(fù)載均衡器(Load Balancer,以下簡(jiǎn)稱LB)是一種采用各種分配算法把網(wǎng)絡(luò)請(qǐng)求分散到一個(gè)服務(wù)器集群中的可用服務(wù)器上去,通過(guò)管理進(jìn)入的Web數(shù)據(jù)流量和增加有效的網(wǎng)絡(luò)帶寬,從而使網(wǎng)絡(luò)訪問(wèn)者獲得盡可能最佳的聯(lián)網(wǎng)體驗(yàn)的硬件設(shè)備。它將TCP/IP會(huì)話請(qǐng)求引導(dǎo)到一組服務(wù)器內(nèi)的不同服務(wù)器上,從而能顯著提高服務(wù)的性能;通過(guò)這種方法平衡了所有服務(wù)請(qǐng)求,使得服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明的,客戶訪問(wèn)集群系統(tǒng)提供的網(wǎng)絡(luò)服務(wù)就像訪問(wèn)一臺(tái)高性能、高可用的服務(wù)器一樣[2]。
1 系統(tǒng)部署及接入網(wǎng)絡(luò)后的問(wèn)題
1.1 系統(tǒng)部署情況
電力企業(yè)某系統(tǒng)采用兩臺(tái)硬件負(fù)載均衡器做互備,應(yīng)用服務(wù)器組由6臺(tái)PC服務(wù)器構(gòu)成,數(shù)據(jù)庫(kù)服務(wù)器組由2臺(tái)小型機(jī)構(gòu)成,上端連接交換機(jī)。
系統(tǒng)中負(fù)載均衡器采用常用的單臂部署(旁掛結(jié)構(gòu)),此結(jié)構(gòu)不需要改動(dòng)用戶的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),兩臺(tái)負(fù)載均衡器用網(wǎng)線互聯(lián),配以私網(wǎng)地址,作為心跳線。如圖1所示。
系統(tǒng)部署時(shí),配置文件中的訪問(wèn)地址設(shè)置為兩臺(tái)LB的漂移IP地址,則外界訪問(wèn)數(shù)據(jù)先經(jīng)過(guò)LB,然后再由LB分發(fā)到配置好的各個(gè)實(shí)際服務(wù)器上。
1.2 出現(xiàn)問(wèn)題
在兩臺(tái)LB配置完成,接入網(wǎng)絡(luò)后,出現(xiàn)了一系列問(wèn)題,描述如下:
1) 第一次用網(wǎng)線連接LB和交換機(jī)時(shí),LB的pool members需要近2 、3分鐘才能啟動(dòng)起來(lái);
2) 配置好一臺(tái)LB后,同步。經(jīng)過(guò)測(cè)試表明,系統(tǒng)服務(wù)正常,主、備可正常切換。但在實(shí)施后不管哪臺(tái)LB為主機(jī),平時(shí)正常,但在某個(gè)不確定的時(shí)間服務(wù)自動(dòng)斷開(kāi),必須手動(dòng)切換LB的主備恢復(fù)。
2 問(wèn)題檢查方法與結(jié)果
2.1 檢查配置、查看日志
要找出問(wèn)題所在,首先進(jìn)行各種檢查,查看日志。
2.1.1 檢查L(zhǎng)B的配置
1) 在LB的web頁(yè)面進(jìn)行配置檢查;
2) 在SSH命令行下檢查L(zhǎng)B的配置文件;
3) 通過(guò)Qkview工具搜集LB上面的各種參數(shù);
2.1.2 查看LB的log文件
1) 在LB的web頁(yè)面查看log文件;
2) 在SSH命令行下面可以查看實(shí)時(shí)的LB log記錄,存放在/var/log目錄下。
2.1.3 在SSH窗口中使用命令行查看
1) 打開(kāi)一個(gè)SSH窗口,使用bigtop命令,做插、拔線工作;
2) 同時(shí)打開(kāi)另一SSH窗口,使用tcpdump命令檢查設(shè)備在做插拔線操作時(shí)間內(nèi)做了哪些工作。
2.2 初步檢測(cè)結(jié)果
2.2.1 LB的配置
經(jīng)過(guò)反復(fù)查證,證實(shí)LB的配置沒(méi)有問(wèn)題。
2.2.2 LB的log文件
在LB的log里只有手動(dòng)切換的記錄,無(wú)其他異常記錄。
2.2.3 SSH得到的窗口信息
1) 拔掉LB的網(wǎng)線并重新插上后,LB所連的交換機(jī)端口從狀態(tài)”down”到”up”經(jīng)歷了92秒的運(yùn)算過(guò)程,在正常情況下一個(gè)端口最多需要50秒鐘就可以”up”起來(lái),這就解釋了問(wèn)題1中為什么LB的pool members需要很長(zhǎng)的時(shí)間才能啟起來(lái)。
2) tcpdump抓包信息顯示出一個(gè)物理端口的撥插引起了網(wǎng)絡(luò)拓?fù)涞淖兓?802.1d config TOP_CHANGE 8030.00:23:ac:d8:5d:00.8017 root 8000.00:04:4d:63:7a:a1 pathcost 3027 age 4 max 20 hello 2 fdelay 15,綜合以上分析可以得出問(wèn)題2服務(wù)自動(dòng)斷開(kāi)的情況,很可能是拓?fù)渲匦逻\(yùn)算導(dǎo)致的問(wèn)題。
3 分析與解決
通過(guò)以上得到的檢測(cè)結(jié)果及分析,得出網(wǎng)絡(luò)拓?fù)溥M(jìn)行了重新運(yùn)算并引起了變化。生成樹(shù)協(xié)議是在網(wǎng)絡(luò)中能導(dǎo)致網(wǎng)絡(luò)拓?fù)浒l(fā)生改變的重要協(xié)議。
為了提高數(shù)據(jù)傳輸?shù)目煽啃裕3T诙鄠€(gè)LAN之間設(shè)置冗余的鏈路和交換機(jī),使兩個(gè)LAN之間存在不止一條路徑,這種做法一方面提高了網(wǎng)絡(luò)的可靠性,而另一方面卻可能使得網(wǎng)絡(luò)中出現(xiàn)邏輯環(huán)路。邏輯環(huán)路會(huì)導(dǎo)致兩種不利情況的發(fā)生:一種情況是廣播數(shù)據(jù)包(或未知目的地的數(shù)據(jù)包)在網(wǎng)絡(luò)中永無(wú)止境地循環(huán),從而導(dǎo)致過(guò)度的系統(tǒng)開(kāi)銷(xiāo)。另一種情況是死鎖的發(fā)生。數(shù)據(jù)包中的每一個(gè)占有一些資源(鏈路或緩存),同時(shí)申請(qǐng)被別的數(shù)據(jù)包所占據(jù)的資源,形成若干包對(duì)資源的循環(huán)依賴,使這些數(shù)據(jù)包永遠(yuǎn)被阻塞。為了防止上述現(xiàn)象的發(fā)生,IEEE發(fā)布802.1d“生成樹(shù)協(xié)議”(Spanning Tree Protocol),并定義了一個(gè)生成樹(shù)算法來(lái)打破網(wǎng)絡(luò)中的邏輯環(huán)路[3]。
生成樹(shù)協(xié)議是一種橋到橋的鏈路管理協(xié)議,它在防止產(chǎn)生自循環(huán)的基礎(chǔ)上提供路徑冗余[4],是交換式以太網(wǎng)中的重要概念和技術(shù)。該協(xié)議的目的是在實(shí)現(xiàn)交換機(jī)之間的冗余連接的同時(shí),避免網(wǎng)絡(luò)環(huán)路的出現(xiàn),實(shí)現(xiàn)網(wǎng)絡(luò)的高可靠性。它通過(guò)在交換機(jī)之間傳遞橋接協(xié)議數(shù)據(jù)單元(Bridge Protocol Data Unit,BPDU)來(lái)互相告知諸如交換機(jī)的橋ID、鏈路性質(zhì)、根橋(Root Bridge)ID等信息,以確定根橋,決定哪些端口處于轉(zhuǎn)發(fā)狀態(tài),哪些端口處于阻斷狀態(tài),以免引起網(wǎng)絡(luò)環(huán)路。
生成樹(shù)的主要思想是每個(gè)網(wǎng)橋定期發(fā)送網(wǎng)橋協(xié)議數(shù)據(jù)單元BPDU,向其他網(wǎng)橋表明自己的存在;以太網(wǎng)中所有的網(wǎng)橋在收到其他網(wǎng)橋的BPDU幀后運(yùn)行生成樹(shù)算法,以確定根網(wǎng)橋,決定端口處于轉(zhuǎn)發(fā)還是阻塞狀態(tài),形成唯一的生成樹(shù),從而形成拓?fù)鋱D。
STP的主要任務(wù)是阻止在第2層網(wǎng)絡(luò)(網(wǎng)橋或交換機(jī))上產(chǎn)生網(wǎng)絡(luò)環(huán)路。它警惕地監(jiān)視著網(wǎng)絡(luò)中的所有鏈路,通過(guò)關(guān)閉任何冗余的接口來(lái)確保在在網(wǎng)絡(luò)中不會(huì)出現(xiàn)環(huán)路。STP采用生成樹(shù)算法,它首先創(chuàng)建一個(gè)拓?fù)鋽?shù)據(jù)庫(kù),然后搜索并破壞掉冗余的鏈路。運(yùn)行了STP算法之后,幀就只能被轉(zhuǎn)發(fā)到保險(xiǎn)的由STP挑選出來(lái)的鏈路上[5]。
3.1 問(wèn)題分析
1) 交換機(jī)端口之所以經(jīng)歷了92秒,超出正常情況最大值的近一倍時(shí)間才UP,是此端口經(jīng)歷了STP協(xié)議的運(yùn)算過(guò)程,根據(jù)LAN內(nèi)各個(gè)網(wǎng)絡(luò)設(shè)備的連接狀況建立一個(gè)網(wǎng)絡(luò)動(dòng)態(tài)拓?fù)浣Y(jié)構(gòu),該結(jié)構(gòu)建立后,數(shù)據(jù)包只通過(guò)指定交換機(jī)的指定端口進(jìn)行傳輸,其他的端口將被自動(dòng)阻塞掉,被阻塞的端口將不接收和轉(zhuǎn)發(fā)一般的數(shù)據(jù)包,但仍然可以接受和轉(zhuǎn)發(fā)BPDU包,以避免數(shù)據(jù)環(huán)路的產(chǎn)生;
2) 對(duì)于一個(gè)重要的系統(tǒng)來(lái)說(shuō),服務(wù)的停止幾乎是不允許的,很可能造成非常重大的損失。下面重點(diǎn)分析問(wèn)題2:
STP協(xié)議是針對(duì)2層網(wǎng)絡(luò)設(shè)備的重要協(xié)議,由于負(fù)載均衡器具有簡(jiǎn)單的交換機(jī)功能,因此在此系統(tǒng)中STP協(xié)議是有效的。由于負(fù)載均衡器接在交換機(jī)的端口上,而交換機(jī)默認(rèn)開(kāi)啟STP協(xié)議,那么一旦交換機(jī)上網(wǎng)絡(luò)的拓?fù)涓淖兞?可能是鏈路失效了,或者有人添加了一臺(tái)新的交換機(jī)等),就會(huì)進(jìn)行STP協(xié)議的運(yùn)算,重新建立網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。由于作為主、備的兩臺(tái)LB配置完全相同,若拓?fù)浣Y(jié)構(gòu)改變?yōu)橥ㄟ^(guò)備機(jī)的網(wǎng)絡(luò)訪問(wèn)路徑(如圖2所示),而由于業(yè)務(wù)是跑在主機(jī)上的,因此服務(wù)斷開(kāi)。進(jìn)行主備機(jī)切換時(shí),LB對(duì)外重新發(fā)了一次arp包,通告網(wǎng)絡(luò)中的數(shù)據(jù)要訪問(wèn)其IP地址,只需找到其Mac地址。網(wǎng)絡(luò)拓?fù)鋾?huì)根據(jù)網(wǎng)絡(luò)中的拓?fù)涓淖冞M(jìn)行STP計(jì)算,切換到正確的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(指向主LB的路徑)。這也就解釋了為什么在服務(wù)斷開(kāi)時(shí),通過(guò)切換LB的主備可以恢復(fù)。
3) 通過(guò)2)的闡述可以看出,若系統(tǒng)中只存在一臺(tái)LB,則不會(huì)出現(xiàn)因?yàn)镾TP協(xié)議改變拓?fù)渎窂蕉狗?wù)斷開(kāi)的情況。為了證明2),在不改變系統(tǒng)網(wǎng)絡(luò)拓?fù)涞那疤嵯拢サ羝渲幸慌_(tái)LB,不更改LB的配置,進(jìn)行測(cè)試。經(jīng)過(guò)觀察,系統(tǒng)未出現(xiàn)服務(wù)自動(dòng)斷開(kāi)的情況,運(yùn)行穩(wěn)定,因此證明了之前系統(tǒng)中出現(xiàn)的問(wèn)題是負(fù)載均衡器與交換機(jī)的配合中出現(xiàn)了問(wèn)題,主要體現(xiàn)在交換機(jī)開(kāi)啟了STP協(xié)議。
3.2 解決辦法
雖然以上提出并通過(guò)測(cè)試確定了只使用一臺(tái)負(fù)載混均衡器便可以解決問(wèn)題,但是通常對(duì)于一個(gè)比較重要的應(yīng)用系統(tǒng)來(lái)說(shuō),只使用一臺(tái)LB,容易發(fā)生LB的單點(diǎn)故障而造成整個(gè)系統(tǒng)癱瘓,對(duì)應(yīng)用系統(tǒng)造成了很大的風(fēng)險(xiǎn)。因此,為了系統(tǒng)運(yùn)行更穩(wěn)定、可靠,應(yīng)在LB雙機(jī)的基礎(chǔ)上,解決問(wèn)題,解決辦法如下:
1) 將LB所連的交換機(jī)端口模式改為access類(lèi)型接口,避免STP運(yùn)算;
2) 檢查交換機(jī)上相關(guān)物理端口配置,是否配置了STP,若配置了,去除相應(yīng)端口的STP協(xié)議。
具體解決操作:
1) 進(jìn)入交換機(jī)的相應(yīng)端口,使用switchport mode access(6)命令行設(shè)置相應(yīng)端口模式為access,再用命令no shutdown激活該端口;
2) 由于交換機(jī)上還運(yùn)行有其它的業(yè)務(wù),不能輕易改動(dòng)其它端口的配置,因此去除整個(gè)交換機(jī)的STP協(xié)議是不可行的。鑒于此系統(tǒng)中所有設(shè)備在交換機(jī)中處于同一vlan中,因此可以去除此vlan的STP協(xié)議配置。
進(jìn)入交換機(jī)的配置模式后,通過(guò)命令no spanning-tree vlan (vlan-id) 去除連接LB端口的STP協(xié)議。
4 結(jié)果及結(jié)論
4.1 解決后進(jìn)行測(cè)試,結(jié)果如下
1) 進(jìn)行插拔線測(cè)試
由表3可以看出,拔線后重新插入,僅需要10秒即可啟動(dòng)起來(lái);
2) 觀察系統(tǒng)服務(wù)是否有自動(dòng)斷開(kāi)的情況
經(jīng)過(guò)一個(gè)月的密切觀察,從未出現(xiàn)服務(wù)自動(dòng)斷開(kāi)的情況,系統(tǒng)運(yùn)行正常、良好。
4.2 結(jié)論
目前的大型應(yīng)用系統(tǒng)中,越來(lái)越多地使用到不同種類(lèi)的設(shè)備,以達(dá)到高性能、高可靠性、安全性等要求。由于各種設(shè)備之間存在配合、兼容性的問(wèn)題,時(shí)常會(huì)造成系統(tǒng)運(yùn)行故障,需要對(duì)系統(tǒng)進(jìn)行整體檢測(cè)和分析,才能確定問(wèn)題所在并得到解決。
本文描述的電力企業(yè)應(yīng)用系統(tǒng),使用了目前大型系統(tǒng)較常用的負(fù)載均衡器,出現(xiàn)了負(fù)載均衡器啟動(dòng)很慢以及應(yīng)用系統(tǒng)自動(dòng)斷開(kāi)的重大故障,通過(guò)檢測(cè)分析,進(jìn)行故障推斷,最終更改交換機(jī)配置使故障得到了解決,并進(jìn)行了后期觀察測(cè)試。相信在實(shí)際應(yīng)用中能起到一定的參考借鑒作用。
參考文獻(xiàn):
[1] 唐海濤,王樹(shù)義,孫效里.一種有效的Web負(fù)載均衡器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006:279-281.
[2] 楊曉寧,伍衛(wèi)國(guó),劉愛(ài),等.多負(fù)載均衡器集群系統(tǒng)中負(fù)載均衡器故障恢復(fù)機(jī)制[J].計(jì)算機(jī)工程,2004:45-46,97.
[3] 葛建芳,等.千兆以太網(wǎng)路由算法研究[J].微計(jì)算機(jī)信息,2006,7(3):80-82.
[4] Javvin Technologies,Inc. STP:Spanning Tree Protocol in IEEE 802.1D.http://www.javvin.com/protocolSTP.html.
[5] Todd Lammle.CCNA:Cisco Certified Network Associate Study Guide.John WileySons,2007.
[6] 梁瑋栗.VLAN的幾種配制方法[J].計(jì)算機(jī)與網(wǎng)絡(luò),2005:44-46.