多臺tomcat服務的session共享 memcached與redis

因爲tomcat的併發數瓶頸問題,能夠說使用tomcat的web應用,幾乎都存在session不一樣步問題。css

借鑑網上的資料,我也找時間實驗一把。html

文中涉及的軟件下載和安裝,一一略過,想必你們也不必看。java

注:本文不對memcached和redis作任何口水討論,望各個網友自行問谷歌和度娘。nginx

(我的愚見,它們做爲一個軟件,能得到各自衆多支持者,想必它們天然有各自的優勢,重點仍是從實際須要出發,選擇合適本身的東東。)web

1、nginx+tomcat+memcached  (依賴包下載)

1.memcached配置:(v1.4.13)redis

節點1(192.168.159.131:11444)tomcat

節點2(192.168.159.131:11333)session

2.tomcat配置併發

tomcat1(192.168.159.128:8081)maven

tomcat2(192.168.159.128:8082)

3.nginx安裝在192.168.159.131。

       首先,是配置tomcat,使其將session保存到memcached上。有兩種方法:

方法一:在server.xml中配置。

找到host節點,加入

<Context docBase="/var/www/html" path=""> 
	<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
	        memcachedNodes="n1:192.168.159.131:11444 n2:192.168.159.131:11333" 
	        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" 
	        sessionBackupAsync="false" sessionBackupTimeout="3000" 
	        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
	        copyCollectionsForSerialization="false" />
</Context>

方法二:在context.xml中配置。

找到Context節點,加入

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
	        memcachedNodes="n1:192.168.159.131:11444" 
	        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" 
	        sessionBackupAsync="false" sessionBackupTimeout="3000" 
	        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
	        copyCollectionsForSerialization="false" />

       其次,配置nginx,用於測試session保持共享。

upstream  xxy.com  {
      server   192.168.159.128:8081 ;
      server   192.168.159.128:8082 ;
}

log_format  www_xy_com  '$remote_addr - $remote_user [$time_local] $request '
               '"$status" $body_bytes_sent "$http_referer"' 
               '"$http_user_agent" "$http_x_forwarded_for"';

server
{
      listen  80;
      server_name  xxy.com;

      location / {
               proxy_pass        http://xxy.com;
               proxy_set_header   Host             $host;
               proxy_set_header   X-Real-IP        $remote_addr;
               proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      }

      access_log  /data/base_files/logs/www.xy.log  www_xy_com;
}

最後,將你的應用放到兩個tomcat中,並依次啓動memcached、tomcat、nginx。訪問你的nginx,能夠發現兩個tomcat中的session能夠保持共享了。

2、nginx+tomcat+redis   (依賴包下載)

1.redis配置(192.168.159.131:16300)(v2.8.3)

2.tomcat配置

tomcat1(192.168.159.130:8081)

tomcat2(192.168.159.130:8082)

3.nginx安裝在192.168.159.131。

       首先,是配置tomcat,使其將session保存到redis上。有兩種方法,也是在server.xml或context.xml中配置,不一樣的是memcached只須要添加一個manager標籤,而redis須要增長的內容以下:(注意:valve標籤必定要在manager前面。

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="192.168.159.131"
         port="16300" 
         database="0" 
         maxInactiveInterval="60"/>

其次,配置nginx,用於測試session保持共享。

upstream  redis.xxy.com  {
      server   192.168.159.130:8081;
      server   192.168.159.130:8082;
}

log_format  www_xy_com  '$remote_addr - $remote_user [$time_local] $request '
               '"$status" $body_bytes_sent "$http_referer"' 
               '"$http_user_agent" "$http_x_forwarded_for"';

server
{
      listen  80;
      server_name redis.xxy.com; 

      location / {
               proxy_pass        http://redis.xxy.com;
               proxy_set_header   Host             $host;
               proxy_set_header   X-Real-IP        $remote_addr;
               proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      }

      access_log  /data/base_files/logs/redis.xxy.log  www_xy_com;
}

最後,將你的應用放到兩個tomcat中,並依次啓動redis、tomcat、nginx。訪問你的nginx,能夠發現兩個tomcat中的session能夠保持共享了。

上面文章中,有一點須要說明的是:

若是tomcat配置中,將manager放在server.xml中,那麼使用maven作熱部署時,會發生失敗。因此,本人推薦放在context.xml中。

相關文章
相關標籤/搜索