Load-Balancing
haproxy 和持久連接
我正在使用 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
您正在尋找的是“粘性會話”,您可以使用
appsession
HAProxy 中的參數來啟用它: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文件。