Load-Balancing

haproxy 和持久連接

  • August 22, 2017

我正在使用 HAproxy 在更多 Web 伺服器之間進行負載平衡。這些網路伺服器使用 PHP 和會話來保持會話打開。

現在,我認為當使用者刷新頁面時,它會被發送到其中一個伺服器,但是,如果他被發送到另一台伺服器,他當然會失去他的會話,不是嗎?

問題主要是:如何使客戶端連接到同一台伺服器?

這是我的後端配置。

backend social_backend
mode http
option httplog
option http-server-close
option forceclose
no option httpclose
balance roundrobin
option forwardfor
timeout queue 5000
timeout server 86400000
timeout connect 86400000
timeout check 1s

server socket1 10.10.10.1:81 weight 1 maxconn 1024 check
server socket2 10.10.10.2:81 weight 1 maxconn 1024 check
server socket3 10.10.10.3:81 weight 1 maxconn 1024 check

您正在尋找的是“粘性會話”,您可以使用appsessionHAProxy 中的參數來啟用它:

appsession <cookie> len <length> timeout <holdtime> 
          [request-learn] [prefix] [mode <path-parameters|query-string>]

當在後端定義了應用程序 cookie 時,HAProxy 將檢查伺服器何時設置了此類 cookie,並將其值儲存在表中,並將其與伺服器的標識符相關聯。最多保留該值中的字元。在每個連接上,haproxy 都會在“Cookie:”標頭中以及作為 URL 參數(取決於所使用的模式)中查找此 cookie。如果找到已知值,客戶端將被定向到與該值關聯的伺服器。否則,應用負載平衡算法。當 Cookie 的使用時間超過 .

應用程序 cookie 的定義僅限於每個後端一個。

範例:appsession JSESSIONID len 52 timeout 3h

有關更多詳細資訊,請參閱 HAProxy文件

引用自:https://serverfault.com/questions/381856