Linux
如何配置 mod_proxy_balancer 在高負載下優雅地失敗
我們有一個系統,它在多個 tomcat 前面有一個 Apache 實例。然後這些 tomcat 連接到各種數據庫。我們使用 mod_proxy_balancer 平衡 tomcat 的負載。
目前我們每秒接收 100 個請求,Apache 伺服器上的負載非常低,但由於 tomcats 上的數據庫操作繁重,負載大約為 25%(我估計它們可以處理)。
幾週後有一個事件發生,我們估計我們的請求將顯著增加,可能會增加 10 倍。
我正在盡我所能減少我們的 tomcat 的負載,但我知道我們將耗盡容量,所以我想優雅地失敗。我的意思是,與其嘗試處理所有超時的太多連接,我希望 Apache 以某種方式監控平均響應時間,並且一旦對 Tomcat 的響應時間超過某個門檻值,我想要一個錯誤頁面顯示。
這意味著幸運的使用者仍然會很快得到一個頁面,而那些不幸的使用者很快就會得到一個錯誤頁面。而不是每個人都為他們的頁面等待太久,最終每個人都超時,並且數據庫被從未使用過的查詢淹沒。
希望這是有道理的,所以我一直在尋找有關如何實現這一目標的建議。
謝謝
我將其稱為“抱歉伺服器”。如果您使用的是 Apache 2.2,您可以將另一台主機添加到您的 LB 池作為熱備件,當實際應用程序伺服器達到容量時,您的平衡器會將請求定向到“Sorry Server”,直到應用程序伺服器再次可用。這是一個粗略的想法:
<Proxy balancer://yourapp> BalancerMember http://10.0.0.1:8080 retry=5 max=50 BalancerMember http://10.0.0.2:8080 retry=5 max=50 BalancerMember http://10.0.0.3:8080 retry=5 max=50 BalancerMember http://10.0.0.4:8080 retry=5 max=50 # the hot standby on server2 BalancerMember http://10.0.0.5:80 status=+H </Proxy> <Location /app> ProxyPass balancer://yourapp </Location>
實際上,您也可以在負載平衡器機器上設置一個額外的虛擬主機,並讓它為“Sorry Server”頁面本身提供服務。希望有幫助:)