個人博客地址:Hue Load Balance配置 | 一張假鈔的真實世界
直接上配置:
server {server_name 192.168.72.31;listen 8001;charset utf-8;proxy_connect_timeout 600s;proxy_read_timeout 600s;proxy_send_timeout 600s;location / {proxy_set_header Host $http_x_forwarded_for;proxy_set_header X-Forwarded-For $http_x_forwarded_for;proxy_pass http://hue;}
}upstream hue {hash $cookie_sessionid;server 192.168.72.22:8888 max_fails=3;server 192.168.72.31:8888 max_fails=3;
}
重點是調整upstream hash
的策略。因為Hue是需要保持session的,同一個session的請求需要發送到同一臺后端服務器上。簡單的可以采用ip_hash策略,這個策略存在兩個重要的問題:
- 對隱藏在局域網后的用戶不起作用。
- ip_hash只取IPV4的前三段值做Hash,在非公網大并發場景下會出現負載非常不均衡的情況。參見:Module ngx_http_upstream_module
基于以上兩點修改了Nginx的配置采用$cookie_sessionid
做為hash值,達到session級別的負載均衡。
主要的問題其實是這種方式未做到按照后端服務器實際負載再按照session級別來分配請求。后續打算研究HAProxy是否可以做到。