WEB服務器負載均衡解決方案_Web服務器教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      環境說明:

      開發平臺是DOTNET B/S .NET Framework 1.1

      正式Web服務器和測試機,均為win2003

      原有一個主網站,在六臺Web服務器做負載均衡。運行比較穩定。

      現新開發一個子站,將布署在另三臺Web服務器上做負載均衡。這個負載均衡設置類似主網站的設置。

      解決步驟:

      1)子站在測試機測試通過,運行正常。準備布署到正式環境下(三臺Web服務器)

      2)將子站程序拷貝到那三臺Web服務器上,配置好子站相關配置,開放站點與負載均衡開始測試。

      3)測試時,頁面顯示正常,但在觸發服務端事件時出現異常。

      錯誤信息“Viewstate is invalid for this page”(此頁的視圖狀態無效)沒有為解決此問題提供足夠信息

      同樣的程序為何在測試機運行沒問題,放到正式環境下,就出現異常呢?

      在微軟網站要查到這個異常的解釋(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,

      然后去微軟網站下載了.NET Framework 1.1 Service Pack 1和.NET Framework 1.1 Service Pack 1 ASP.NET 安全更新 - Windows Server 2003

      4)裝上這兩個補丁后,運行子站程序,在觸發服務端事件時仍舊出現異常。異常如下:

      異常詳細信息: System.Web.HttpException: 無法驗證數據。

      堆棧跟蹤:

      [HttpException (0x80004005): 無法驗證數據。]

      [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.]

      再回到831150那篇文章看:“應用此修復程序后,視圖狀態錯誤信息標題將變成“Unable to Validate Data”。盡管新的錯誤信息格式沒有對問題進行具體描述,但它比以前的錯誤信息格式提供了更多信息。”

      得知應該是ViewState值已被截斷?!

      問題就轉化:什么原因導致"ViewState值已被截斷"呢?

      因為程序在測試環境下運行沒問題的,那么可能是系統級的問題。

      比較一下正式和測試環境:正式環境是三臺Server做負載均衡,而測試環境只一臺Server。

      5)將負載均衡設置修改了一下,只開放一臺WEB Server。測試后,發現不出現那個異常。三臺機分別測試,均無異常。

      推測:可能是負載均衡設置有問題。于是找來系統管理員,他說,子站的負載均衡設置跟主站一樣的啊。但還是請他再確認一下兩個負載均衡設置的不同之處。

      經再次的仔細檢查,發現負載均衡Pool的Persistence Type(進程延續)為None,也就是說服務端不保持連接狀態。這樣,每次服務端事件被觸發時,就會導致"ViewState值已被截斷"。于是將Persistence Type(進程延續)的值改為Simple,Timeout設為600秒。

      總結:

      程序員不單要寫好程序,也要適當的了解系統。這個問題,不一定會經常遇到,作為一個解決問題的思路,供大家分享。

      附:負載均衡一般設三個地方來保證進程延續。首先啟動負載均衡,然后設置“Enable Connection Rebind”為true.最后Persistence Type一般設為Simple再加上超時時間。

      注:本人對負載均衡研究甚少,不知其他類似軟件是否也如此設置,其原理應該都差不多。

      來源:網絡搜集//所屬分類:Web服務器教程/更新時間:2012-07-24
      相關Web服務器教程