1. 程式人生 > >Nginx反向代理、負載均衡、session粘滯掃盲

Nginx反向代理、負載均衡、session粘滯掃盲

使用Nginx作為Tomcat的負載平衡器,Tomcat的會話Session資料儲存在Redis,能夠實現0當機的7x24運營效果。因為將會話儲存在Redis中,因此Nginx就不必配置成stick粘粘某個Tomcat方式,這樣才能真正實現後臺多個Tomcat負載平衡,使用者請求能夠發往任何一個tomcat主機,當我們需要部署新應用程式碼時,只要停止任何一臺tomcat,所有當前線上使用者都會導向到執行中的tomcat例項,因為會話資料被序列化到Redis,線上使用者不會受到影響,一旦停掉的tomcat例項上線,另外其他重複部署過程。

1、安裝配置Nginx:

$ sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm

編輯/etc/nginx/nginx.conf,加入負載平衡配置:

http {
upstream tomcat  {
        server localhost:8080;
        server localhost:8081;
    }
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

更新/etc/nginx/conf.d/default.conf,配置反向代理:

location / {
    proxy_pass  http://tomcat;
  }

重新啟動Nginx:

sudo service nginx restart

2、安兩個Tomcat例項

下面我們開始安裝兩個Tomcat例項,改變第二個伺服器埠,防止它們衝突,這時如果你在瀏覽器輸入 https://localhost,我們訪問到預設的Tomcat頁面

3、配置session粘滯

因為我們沒有設定會話粘粘sticky sessions,每個請求分發使用負載平衡round robin演算法,也就是意味著每次請求都會建立一個新的會話,通過tomcat內建案例可以方便看到這種行為,進入http://localhost/examples/servlets/servlet/SessionExample,過一會兒重新整理一下這個頁面,注意到每次Session ID都會改變,讓我們來解決這個問題。

下載安裝Redis,在http://redis.io/download 有文件說明如何安裝和啟動,啟動伺服器以後,使用客戶端程式檢查是否正在工作。

最後,我們需要配置Tomcat儲存會話到Redis,我們需要使用 tomcat-redis-session-manager開源庫包,具體需要一些調整,下載這個專案的原始碼專案,重新構建,本文使用版本為commons-pool2-2.2.jar 和 jedis-2.6.1.jar.複製這些Jar到tomcat的lib目錄。將你的commons-pool, jedis 更新版本和tomcat版本在tomcat-redis-session-manager的build.gradle中配置一下,然後重新構建專案,將構建結果 tomcat-redis-session-manager-1.2.jar 複製到tomcat lib目錄下,兩個例項都要複製,在tomcat的context.xml中配置:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60" />

重新啟動tomcat一切完成,你現在可以看到tomcat會話儲存在redis中,使用先前tomcat內建案例,試驗兩個tomcat開機和關機不同情況進行測試,會話資料都不會受到影響。

參考:

http://www.jdon.com/performance/tomcat-nginx-redis.html

http://blog.csdn.net/why_2012_gogo/article/details/50967520

http://www.jdon.com/performance/nginx.html