办法有很多,不做程序改动的话,以下是四种解决办法:
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开头。