我們計劃對 10 個 .NET 3.5 Web 伺服器進行負載平衡。我們使用 SQL 2008 會話狀態伺服器進行會話管理。
我們需要什麼來平衡 .NET Web 伺服器的負載?
到目前為止我們已經確定的事情:
- 網頁內容需要相同。
- 會話狀態伺服器需要指向相同的 SQL 2008 以取得會話狀態資訊。
- web.config 檔案中的機器金鑰需要相同。
答案1
如果您實際上要從單伺服器環境遷移到由 10 台伺服器組成的負載平衡集群,那麼這立即給我敲響了警鐘。我有很多問題,希望您已經弄清楚,但無論如何我都會指出它們,然後提供一些一般性考慮因素。
你是如何到達第10名的?為什麼不擴展到 2 或 3,並根據需要添加更多?
首先為什麼要進行負載平衡?例如,您想要高負載、高可用性還是兩者兼而有之?是有即時需求,還是有預見性需求?
如果您現在處於負載之下,並試圖透過擴展來解決它,那麼我要問的一個大問題是您是否真正確定了瓶頸。您提到您正在使用 .NET 和 SQL 來處理會話狀態,所以我猜您也在使用 SQL 支援的應用程式。您還在平衡 SQL 伺服器嗎? SQL Server 能否處理您現在擁有的 10 倍的連線?
如果您追求可用性,您是否考慮過所有其他故障點?您的負載平衡器有冗餘嗎?您的資料庫伺服器上有冗餘嗎?您的網路上行鏈路是否有冗餘(考慮所有要點:單一電纜、單交換器等)?就可用性而言,您的安全程度取決於您最薄弱的環節。如果您只有一台資料庫伺服器並且發生故障,那麼即使您擁有 10 台甚至 100 台前端 Web 伺服器也沒關係。
很多時候你的瓶頸是你的資料庫伺服器。如果是這樣的話,你有多少前端都沒關係。
如果您使用 SSL,負載平衡器通常運行在兩種典型模式下,這會影響 SSL 的工作方式:
- 第 4 層:這是 TCP 等級。 SSL 由每台伺服器處理,因此必須在每台伺服器上安裝 SSL 憑證。
- 第 7 層:這是應用程式級別,也稱為反向代理。負載平衡器處理 HTTP 會話,並與應用程式伺服器建立第二個連線。在此模式下,SSL 憑證僅安裝在平衡器上,與應用程式伺服器的連線通常為 HTTP。這有時稱為“SSL 卸載”,如果您的負載平衡器功能強大,並且您不希望應用程式伺服器處理 SSL 的加密開銷(例如,您的應用程式是 CPU 密集型),則通常很有用。
確保您的平衡器設定為在伺服器發生故障時停止旋轉,並測試此功能。您應該能夠關閉伺服器而不影響其他伺服器。注意 PING 與 HTTP 與回應時間檢查。 (Ping 並不意味著 HTTP 正在回應)
對您的環境進行負載測試。您可能無法全力以赴,但您應該能夠加載至少幾台伺服器(平衡器中只有這兩台)。
運作暫存環境。這可能不是 10 台伺服器,但應該足以複製生產系統以進行部署測試。
擁有自動化部署腳本,並且對原始碼管理和配置管理非常嚴格。理想情況下,這意味著所有內容(包括設定檔)都在原始碼控制系統中,並且您可以自動建置來建立安裝程式/腳本的所有內容。
取得一個工具來監視面向外部的網站和所有內部伺服器。如果伺服器死機,從外界的角度來看,沒有什麼真正改變,但無論如何你都想了解並修復伺服器。如果您確實開始遇到效能或可用性問題,您肯定不希望發現 3 台伺服器已停機一個月,而其餘伺服器則承受額外負載。