1暑刃、ip_hash
ip_hash使用源地址哈希算法整份,將同一客戶端的請求總是發(fā)往同一個后端服務(wù)器,除非該服務(wù)器不可用褐澎。
ip_hash語法:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
ip_hash簡單易用会钝,但有如下問題:
當(dāng)后端服務(wù)器宕機后,session會話丟失工三;
同一客戶端會被轉(zhuǎn)發(fā)到同一個后端服務(wù)器迁酸,可能導(dǎo)致負載失衡;
2俭正、sticky_cookie_insert
使用sticky_cookie_insert啟用會話親緣關(guān)系奸鬓,這會導(dǎo)致來自同一客戶端的請求被傳遞到一組服務(wù)器的同一臺服務(wù)器。與ip_hash不同之處在于掸读,它不是基于IP來判斷客戶端的全蝶,而是基于cookie來判斷。因此可以避免上述ip_hash中來自同一客戶端導(dǎo)致負載失衡的情況寺枉。(需要引入第三方模塊才能實現(xiàn))
sticky模塊語法:
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/;
}
server {
listen 80;
server_name 3evip.cn;
location / {
proxy_pass http://backen;
}
}
說明:
expires:設(shè)置瀏覽器中保持cookie的時間
domain:定義cookie的域
path:為cookie定義路徑
3.jvm_route
jvm_route的原理
- 一開始請求過來,沒有帶session信息绷落,jvm_route就根據(jù)round robin的方法姥闪,發(fā)到一臺tomcat上面。
- tomcat添加上session 信息砌烁,并返回給客戶筐喳。
- 用戶再此請求,jvm_route看到session中有后端服務(wù)器的名稱函喉,它就把請求轉(zhuǎn)到對應(yīng)的服務(wù)器上避归。