[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的值。

若有問題可以留言~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章