負載均衡設(shè)置故障的修復(fù)思路
網(wǎng)絡(luò)技術(shù)雖然日新月異,但是我們龐大的網(wǎng)絡(luò)硬件,和數(shù)目眾多的服務(wù)器并不是短時間內(nèi)就能跟新?lián)Q代的。所以,隨著業(yè)務(wù)量的巨增,網(wǎng)絡(luò)負載均衡就迫在眉睫。通過對網(wǎng)上的負載均衡的帖子的瀏覽,小編發(fā)現(xiàn)一篇關(guān)于負載均衡設(shè)置問題的文章,感覺受益匪淺,在此分享給大家。
環(huán)境說明:開發(fā)平臺是DOTNET B/S .NET Framework 1.1,正式WEB服務(wù)器和測試機,均為win2003,原有一個主網(wǎng)站,在六臺WEB服務(wù)器做負載均衡。運行比較穩(wěn)定。現(xiàn)新開發(fā)一個子站,將布署在另三臺WEB服務(wù)器上做負載均衡。這個負載均衡設(shè)置類似主網(wǎng)站的設(shè)置。
載均衡設(shè)置問題解決步驟:
1)子站在測試機測試通過,運行正常。準備布署到正式環(huán)境下(三臺WEB服務(wù)器)
2)將子站程序拷貝到那三臺WEB服務(wù)器上,配置好子站相關(guān)負載均衡設(shè)置,開放站點與負載均衡開始測試。
3)測試時,頁面顯示正常,但在觸發(fā)服務(wù)端事件時出現(xiàn)異常。
錯誤信息“Viewstate is invalid for this page"(此頁的視圖狀態(tài)無效)沒有為解決此問題提供足夠信息
同樣的程序為何在測試機運行沒問題,放到正式環(huán)境下,就出現(xiàn)異常呢?
在微軟網(wǎng)站要查到這個異常的解釋(http://support.microsoft.com/default.aspx?scid=kb;zh-cn;831150),說建議安裝Microsoft .NET Framework 1.1 Service Pack 1。于是,懷疑沒有裝這個補丁,就查看注冊表項:項名稱:HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322,SP值為0,表明沒有裝Framework 1.1 Service Pack,然后去微軟網(wǎng)站下載了.NET Framework 1.1 Service Pack 1和.NET Framework 1.1 Service Pack 1 ASP.NET 安全更新 - Windows Server 2003
4)裝上這兩個補丁后,運行子站程序,在觸發(fā)服務(wù)端事件時仍舊出現(xiàn)異常。異常如下:
異常詳細信息: System.Web.HttpException: 無法驗證數(shù)據(jù)。
堆棧跟蹤:
[HttpException (0x80004005): 無法驗證數(shù)據(jù)。]
[HttpException (0x80004005): Authentication of viewstate failed. 1) If this is a cluster, edit configuration so all servers use the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. 2) Viewstate can only be posted back to the same page. 3) The viewstate for this page might be corrupted.]
在此之前我了解到:“應(yīng)用此修復(fù)程序后,視圖狀態(tài)錯誤信息標題將變成“Unable to Validate Data"。盡管新的錯誤信息格式?jīng)]有對問題進行具體描述,但它比以前的錯誤信息格式提供了更多信息。"得知應(yīng)該是ViewState值已被截斷?!
載均衡設(shè)置問題就轉(zhuǎn)化:什么原因?qū)е?quot;ViewState值已被截斷"呢?
因為程序在測試環(huán)境下運行沒問題的,那么可能是系統(tǒng)級的問題。
比較一下正式和測試環(huán)境:正式環(huán)境是三臺Server做負載均衡,而測試環(huán)境只一臺Server。
5)將負載均衡設(shè)置修改了一下,只開放一臺WEB Server。測試后,發(fā)現(xiàn)不出現(xiàn)那個異常。三臺機分別測試,均無異常。
推測:可能是負載均衡設(shè)置有問題。于是找來系統(tǒng)管理員,他說,子站的負載均衡設(shè)置跟主站一樣的啊。但還是請他再確認一下兩個負載均衡設(shè)置的不同之處。
經(jīng)再次的仔細檢查,發(fā)現(xiàn)負載均衡Pool的Persistence Type(進程延續(xù))為None,也就是說服務(wù)端不保持連接狀態(tài)。這樣,每次服務(wù)端事件被觸發(fā)時,就會導(dǎo)致"ViewState值已被截斷"。于是將Persistence Type(進程延續(xù))的值改為Simple,Timeout設(shè)為600秒。