目前的項目網站架構中使用了F5和nginx,F5用來做負載均衡,nginx只用作反向代理服務器。最近應客戶的要求准備去掉F5,使用軟負載。大家都知道nginx抗並發能力強,又可以做負載均衡,而且使用nginx對我們目前的網站架構不會有大的變動,所以首選方案是nginx。但問題來了,nginx在會話保持這方面比較弱,用ip_hash做會話保持有很大的缺陷,它是通過客戶端ip來實現,根據訪問ip的hash結果分配請求到后端的app服務器,負載不會很均勻。之前在一個小項目前中使用過這種方法,已經得到驗證。還有一個重要原因是我們的nginx不在最前端,所以只能放棄使用ip_hash。上網搜索了一番,知道了nginx-sticky-module這個第三方模塊可以基於cookie實現會話保持,決定試試。
一、平滑升級nginx,安裝nginx-sticky-module
模塊下載地址:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz
# tar zxf nginx-goodies-nginx-sticky-module-ng-1e96371de59f.tar.gz # mv nginx-goodies-nginx-sticky-module-ng-1e96371de59f nginx-sticky # tar zxf nginx-1.6.1.tar.gz # cd nginx-1.6.1 # ./configure --prefix=/app/nginx --with-http_gzip_static_module --with-http_flv_module --with-http_dav_module --with-http_stub_status_module --with-http_realip_module --add-module=/app/soft/nginx-sticky/ # make # cd /app/nginx/sbin # mv nginx nginx.old # cp /app/soft/nginx-1.6.1/objs/nginx ./ # cd - # make upgrade
二、生產服務器nginx關鍵配置如下:
upstream my_upstream{ sticky; server 10.20.35.11:8001; server 10.20.35.11:8002; server 10.20.35.11:8003; server 10.20.35.11:8004; server 10.20.35.11:8005; .... } server { listen 80; server_name localhost; ..... location ~/xxxxx/.*\.jsp|do|htm$ { proxy_pass http://my_upstream; ..... } }
測試環境驗證通過,順利上生產。最近搞活動,遇到一次訪問高峰,4台nginx,單台並發連接數接近40000,截圖一張,留作紀念~