天天看點

[HAProxy]解決haproxy 多用戶端session一緻性問題

1、session知識

   Session是由應用伺服器維持的一個伺服器端的存儲空間,使用者在連接配接伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為辨別符來存取伺服器端的Session存儲空間。而SessionID這一資料則是儲存到用戶端,用Cookie儲存的,使用者送出頁面時,會将這一 SessionID送出到伺服器端,來存取Session資料。

伺服器也通過URL重寫的方式來傳遞SessionID的值,是以不是完全依賴Cookie。如果用戶端Cookie禁用,則伺服器可以自動通過重寫URL的方式來儲存Session的值,并且這個過程對程式員透明。

在後端應用伺服器上php.ini 裡幾個session相關值的,可以進行簡單設定

session.use_cookies = 1  #表示 服務端和用戶端互動session是通過cookie的方式 預設值

session.name = LXSYM      #預設值是PHPSESSID 可以自行定義。比如LXSYM

session.cache_limiter = nocache #此設定確定對每個請求,在可能提供緩存的版本前,先請求發送到最初的伺服器。

   針對session資料推薦使用共享存儲,實作方法很多。比如存于多個memcached中,具體會寫博文說明,敬請關注~

2、實作haproxy與用戶端session一緻的方法有:

2.1 使用者IP 識别

   haroxy 将使用者IP經過hash計算後 指定到固定的真實伺服器上。

配置指令  balance source  (如: balance  uri len 100)

2.2 cookie 識别 

   haproxy 将WEB服務端發送給用戶端的cookie中插入(或添加字首)haproxy定義的後端的伺服器COOKIE ID。

配置指令例舉  cookie  SESSION_COOKIE  insert indirect nocache  

可以使用firebug可以觀察到使用者的請求頭的cookie資訊

2.3 session 識别  

   haproxy 将後端伺服器産生的session和後端伺服器辨別存在haproxy中的一張表裡。用戶端請求時先查詢這張表。

配置指令例舉 appsession LXSYM len 64 timeout 5h request-learn

注意LXSYM這個值替換成 你的php.ini 裡session.name的值。

若有問題可以留言~

繼續閱讀