1)ip_hash
簡單易用,但是有如下缺點
- 后端服務器宕機后,session會丟失
- 來自同一局域網的客戶端會被轉發到同一個后端服務器,可能導致負載失衡
- 不適用CDN網絡,不適用於前段還有代理的情況
2)sticky_cookie_insert
使用sticky_cookie_insert啟用會話親緣關系,這會導致來自同一客戶端的請求被傳遞到一組服務器的同一台服務器;與ip_hash不同之處在於,他不是基於ip來判斷客戶端的,而是基於cookie來判斷;因此可以避免上述ip_hash中來自同一局域網的客戶端和前段代理導致負載失衡的情況。
說明:
- expires:設置瀏覽器中保持cookie的時間
- domain:定義cookie的域
- path:為cookie定義路徑
3)jvm_route方式
這個模塊通過session_cookie的方式來獲取session粘性。如果在cookie和url中並沒有session,則這只是個簡單的round-robin負載均衡。
jvm_route的原理
- 一開始請求過來,沒有帶session的信息,jvm_route就根據round robin的方法,發到一台Tomcat上面
- Tomcat添加上session信息,並返回給客戶
- 用戶再次請求,jvm_route看到session中有后端服務器的名稱,他就把請求轉到對應的服務器上
暫時jvm_route模塊還不支持fair的模式。jvm_route的工作模式和fair是沖突的。對於某個特定用戶,當一直為他服務的Tomcat宕機后,默認情況下它會重試max_fails的次數,如果還是失敗,就重新啟用round robin的方式,而這種情況下就會導致用戶的session丟失。
jvm_route是通過session_cookie這種方式來實現session粘性,將特定會話附屬到特定tomcat上,從而解決session不同步問題,但是無法解決宕機后會話轉移問題。