基於 Windows 的 Web 伺服器的冗餘負載均衡器?
我在試圖弄清楚以下設計的技術細節時遇到了一些麻煩;特別是在冗餘負載平衡器領域。
Web 伺服器執行 Windows Server 2003 R2 64 並通過 IIS 為 .NET 應用程序提供服務。數據庫伺服器在帶有 SQL Server 2008 的 SQL Server 故障轉移群集中執行 Windows Server 2008 Enterprise 64。目前有兩個 Web 伺服器和兩個數據庫伺服器。
我要完成的工作:
- 如果負載平衡器出現故障,則自動進行冗餘故障轉移。
- 能夠無縫地將 Web 伺服器從負載平衡組合中取出以進行維護,而不會中斷使用者。我不確定這有多大可能,因為我們的應用程序的工作方式 - 使用者傾向於說他們整個班次都登錄了應用程序。
- 根據需要擴展 Web 伺服器的能力(不需要實時完成)。
這是一家純微軟商店;所以不幸的是,我們無法使用標準的 Linux 工具。
我試過的:
- Microsoft NLB(網路負載平衡服務):這對於一個簡單的解決方案來說效果相對較好,而且由於它只在 Web 伺服器上執行,因此非常划算,但我還沒有找到一種方法來使該服務滿足上述要求。每次我們嘗試將系統從負載平衡組合中取出時,向負載平衡 url/ip 發出請求的客戶端仍試圖將其定向到離線機器。這可能會產生巨大的問題,尤其是考慮到我們的使用者將通過這些系統送出客戶付款。也許我們在這裡做錯了什麼……
該設計:
那麼,鑑於以上所有情況,Microsoft NLB 是唯一的答案嗎?或者是否有更好的工具可用於我們的情況?
2011 年 4 月 21 日編輯
感謝您的快速回饋。只是為了澄清幾點:
- 這些是Intranet Web 伺服器。他們不接觸網際網路。曾經。
- 說服我的老闆讓我部署一對 Linux 伺服器不會太困難。她不是 Linux 環境的障礙——而是我們的員工。他們唯一的技能是 Windows。開始在我們的數據中心部署 Linux 伺服器會扼殺我的社交生活。;-)
- 我最終正在尋找負載平衡 Web 伺服器的“Microsoft 方式”,同時在負載平衡子系統中提供冗餘。如果那真的是 Microsoft 的 NLB 服務,那麼……也許我應該對此提出一個新問題。:)
- 如果這是一個更好(或唯一)的解決方案,我對硬體負載平衡器持開放態度。
您想要的稱為Microsoft 應用程序請求路由 2 (ARR )。(也許這個笨拙的名字是為什麼很少有人知道它的存在的部分原因?)
Microsoft ARR 是免費的 HTTP 層負載平衡器,作為 IIS 7+ 的模組實現。(ARR 本身是免費的,但底層作業系統當然需要 Windows Server 許可證。)
由於 ARR 只是 IIS 之上的一個薄墊片,因此它非常快速且絕對健壯。管理 ARR 對你們來說很熟悉,因為您已經是一家 IIS 商店。ARR 只是將自身安裝在 IIS 管理器 GUI 中。
**對於真正的高可用性設置,**您應該結合 NLB 和 ARR,以便 NLB 保持 ARR 伺服器層的高可用性,而 ARR 保持後端 Web 伺服器層的高可用性。請參閱 Microsoft 的文件,並在頂部連結的 ARR 概述頁面末尾查看長長的文件列表。
ARR 唯一真正的缺點是,如果您實現真正的高可用性,那麼您將需要至少 2 個 Windows Server 許可證和物理伺服器。鑑於此,並且考慮到設置所需的時間,像Coyote Point或loadbalancer.org這樣的低端負載平衡器設備有時可能是一種具有成本效益的替代方案(或 Kemp、梭子魚網路或任何其他低端供應商)。
能夠無縫地將 Web 伺服器從負載平衡組合中取出以進行維護,而不會中斷使用者。
這將取決於如何處理會話狀態,即您的後端伺服器如何共享或不共享“此使用者已登錄”資訊。
如果 webapp 層是無狀態的(即將會話狀態放在共享數據儲存中,fx 共享 RAM 記憶體或 MSSQL),那麼您只需將伺服器拉出池即可。如果沒有,那麼您可以在負載均衡器上使用“粘性會話”,並從負載均衡器池中刪除後端伺服器,然後等到所有使用者都“耗盡”有問題的伺服器。
HAProxy 的作者 Willy Tarreau 在此處對負載平衡技術和問題進行了很好的概述。