2011-10-25 78 views
3

我們正在使用haproxy進行負載平衡的HTTP Web服務。 Web服務通過SSL訪問。它是一個RESTful HTTP服務,只是接受JSON,做了一些工作,並返回JSON。沒有一個會話的概念。如何將持久連接支持添加到負載平衡HTTP Web服務

我們在一對冗餘Web服務器服務器前設置了冗餘負載均衡器。每個服務器都位於Apache後面,Apache用作代理來處理SSL和日誌記錄。如果它很重要,我們的webservice是一個使用compojure(jetty)來處理HTTP的Clojure(java)應用程序。

這是通過我們現有系統顯示客戶端請求路徑的簡圖。

client request -> haproxy (load balancing) -> apache (ssl, logging) -> webservice

我們希望負載平衡器任何連接建立持久連接,然後通過該永久連接發送的所有後續請求相同的服務器提供服務。換句話說,我們不希望持久連接haproxy向多個webservice服務器發送請求。

您會如何建議我們這樣做?我們如何將一個給定的負載均衡器連接「綁定」到特定的web服務器?我們如何防止意外加載具有多個密集請求的特定Web服務服務器?

回答

2

defaults塊中使用balance source,以及刪除option httpclose條目的技巧。

1

在我們的HAProxy配置中,我們使用cookie選項在後端級別執行此操作。這是因爲他有許多網站,其中一些網站我們確實希望堅持 - 其他網站我們沒有。

在那些我們做後端看起來像這樣在haproxy.cfg

backend examplesite 
cookie STK insert indirect nocache maxidle 30m maxlife 8h 
server server1 192.168.0.1:80 cookie n1 
server server2 192.168.0.2:80 cookie n2 

這將設置一個cookie與第一個請求的名稱STK。 Haproxy會自動爲這個cookie分配一個值,然後它將使用它發送後續請求到同一個節點。

我們決定也添加n1n2餅乾前綴......這意味着cookie值將與任何n1爲前綴,如果請求將節點1或n2如果他們要到節點2.這是調試時非常有幫助。


無論哪種方式,我建議採取看看configuration documentation左右cookie選項。

您可能還想看看appsession選項。這允許HAProxy使用現有的cookie(例如ASPNetSessionId或PHPSESSIONID)來達到同樣的目的。

我以前遇到問題,但最近有一個服務器故障問題的答案應該解決這個問題。您可以放棄它,因爲它會在您的請求中使用額外的Cookie進行保存。 Can't get appsession setting in HAProxy to work

+0

謝謝。我們正在運行一個接受並返回JSON的HTTP webservice。連接到webservice的客戶端不是瀏覽器,所以我懷疑cookie在這種情況下可能會有用。 – jkndrkn

相關問題