因爲tomcat的併發數瓶頸問題,能夠說使用tomcat的web應用,幾乎都存在session不一樣步問題。css
借鑑網上的資料,我也找時間實驗一把。html
文中涉及的軟件下載和安裝,一一略過,想必你們也不必看。java
注:本文不對memcached和redis作任何口水討論,望各個網友自行問谷歌和度娘。nginx
(我的愚見,它們做爲一個軟件,能得到各自衆多支持者,想必它們天然有各自的優勢,重點仍是從實際須要出發,選擇合適本身的東東。)web
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能夠保持共享了。
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中。