Nginx+tomcat负载均衡session问题解决

办法有很多,不做程序改动的话,以下是四种解决办法:

1.直接利用nginx 的ip_hash做,这个是基于ip的负载均衡。

2.利用memcached-session做,但是我做的过程中发现memcached中缓存了太多内容,拦截器做了太多事情,感觉性能还不如直接用tomcat自己的session复制机制。

3.利用tomcat自己的复制机制,这个方法对内存和机器性能是个挑战,访问量大的时候还是有瓶颈。

4.利用nginx + nginx-upstream-jvm-route 模块来实现session的负载均衡。

本文只做第四种方式的介绍:


1-0 下载包
jvm-route安装包下载命令:
http://nginx-upstream-jvm-route.googlecode.com/files/nginx-upstream-jvm-route-0.1.tar.gz

nginx当前稳定版下载路径
wget  http://nginx.org/download/nginx-0.7.65.tar.gz

1-0 安装   pcre-7.6

1-1 解压缩 nginx-0.7.65.tar.gz 到 /usr/develop/yagnwr

1-2 解压缩 jvm-route.zip 到/usr/develop/yagnwr
1-3 切换到 /usr/develop/yagnwr/nginx-0.7.65
1-4 patch -p0 < /usr/develop/yagnwr/jvm-route/jvm_route.patch
1-5 ../configure --prefix=/data/nginx --with-http_stub_status_module --with-pcre=/data/pcre-7.6 --add-module=../nginx_upstream_jvm_route/
1-6 make
1-7 make install

2--配置文件
cp  /usr/mpsp/nginx-0.7.65/nginx.conf  /usr/mpsp/nginx-0.7.65/nginx.conf-bak
vi /usr/mpsp/nginx-0.7.65/nginx.conf

3--修改nginx.conf--针对tomcat
 服务器10.110.5.151上的nginx.conf负载做如下配置
 upstream newjboss {
          #ip_hash;
          server 10.110.5.151:9081 max_fails=3 fail_timeout=30s srun_id=a;
          server 10.110.5.152:9081 max_fails=3 fail_timeout=30s srun_id=b;
          jvm_route $cookie_JSESSIONID|sessionid reverse;
       }      

4--修改tomcat配置/usr/mpsp/newjboss/conf/server.xml
10.110.5.151修改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="a">

10.110.5.152修改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="b">

5--重启tomcatWeb,nginx,

注:nginx在cdn,F5后端的情况下,根据ip分发session的策略失效,此时需要根据sessionid来转发,

比如151服务器产生的sessionid以a结尾,服务器152产生的sessionid以b结尾,tomcat服务器则以a,b开头。

你可能感兴趣的:(Nginx+tomcat负载均衡session问题解决)