设为首页 收藏本站
查看: 658|回复: 0

[经验分享] Nginx+tomcat+memcached解决集群的session问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-29 08:36:12 | 显示全部楼层 |阅读模式

Tomcat集群session同步方案有以下几种方式:

· 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。原理:http://zyycaesar.iteye.com/blog/296606

· 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

· 利用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能,可通过http://code.google.com/p/nginx-upstream-jvm-route/downloads/list获取。

· 利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。


以下使用第四种方案,集群环境:

系统版本:centos 6.4 X64

1. nginx最新版本:1.6.0

2. tomcat版本:apache-tomcat-7.0.61

3. memcached最新版本:1.4.0

4. Jdk 版本:1.7.0_75


fss
一、安装配置nginx
[iyunv@localhost ~]# yum -y install pcre*[iyunv@localhost ~]#tar -zxvf nginx-1.6.0.tar.gz[iyunv@localhost ~]#mkdir /usr/local/nginx[iyunv@localhost ~]#./configure --prefix=/usr/local/nginx[iyunv@localhost ~]#make && make install
  配置nginx:
[iyunv@localhost ~]# vim /usr/local/nginx/conf/nginx.conf    server {         listen       80;        server_name  localhost;       index        index.jsp;          ##因为首页是jsp文件,所以把首页直接定向给后端的8080端口的tomcat来处理        root  /usr/local/apache-tomcat-7.0.61/webapps/ROOT;        location ~ .*.jsp$        {                index  index.jsp;                proxy_pass http://127.0.0.1:8080;                proxy_redirect off;                proxy_set_header Host $host;                proxy_set_header X-Real_IP $remote_addr;                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                proxy_connect_timeout   90;                proxy_send_timeout 90;                proxy_read_timeout 90;                client_max_body_size 10m;                client_body_buffer_size 128k;                proxy_buffer_size 64k;                proxy_buffers 4 32k;                proxy_busy_buffers_size 64k;                proxy_temp_file_write_size 64k;        }
保存退出后,启动nginx


二、安装memcached

[iyunv@localhost ~]# yum install libevent libevent-devel[iyunv@localhost ~]# wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz[iyunv@localhost ~]# tar zxf memcached-1.4.0.tar.gz[iyunv@localhost ~]# ./configure[iyunv@localhost ~]# make && make install[iyunv@localhost ~]# /usradd -s /sbin/nologin memcached安装成功(默认安装在/usr/loca/bin下)

2、启动memcached的服务端
[iyunv@localhost ~]# /usr/local/bin/memcached -d -m 128 -l 127.0.0.1 -p 11211 -u memcached -c 256          (也可以启动多个memcached服务端,但端口不能相同)

-d选项是启动一个守护进程,

-m是分配给Memcache使用的内存数量,单位是MB,我这里是128MB,

-u是运行Memcache的用户,我这里是memcached,

-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址127.0.0.1,

-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,

-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,


至此,memcached已启动!

三、安装两个tomcat :

[iyunv@localhost ~]# tar -zxvf apache-tomcat-7.0.61.tar.gz

[iyunv@localhost ~]# cp -rf apache-tomcat-7.0.61  /usr/local/

[iyunv@localhost ~]#cp -rf apache-tomcat-7.0.61  /usr/local/apache-tomcat-7.0.61-2

[iyunv@localhost ~]#vim /etc/profile/


export TOMCAT_HOME=/usr/local/apache-tomcat-7.0.61
export CATALINA_HOME=/usr/local/apache-tomcat-7.0.61
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/lib
export CATALINA_BASE=/usr/local/apache-tomcat-7.0.61


export TOMCAT_HOME2=/usr/local/apache-tomcat-7.0.61-2
export CATALINA_HOME2=/usr/local/apache-tomcat-7.0.61-2
export CLASSPATH2=$CLASSPATH2:$CATALINA_HOME2/lib
export CATALINA_BASE2=/usr/local/apache-tomcat-7.0.61-2

因为一台主机启动了多个tomcat,所以需要修改第二个tomcat的catalina.sh文件的环境变量


[iyunv@localhost ~]#vim /usr/local/apache-tomcat-7.0.61-2/bin/catalina.sh   在文件前端增加

export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2

配置tomcat:

1、tomcat最重要的一项,在conf/context.xml里增加与memcached的链接(两个tomcat都需要做!)

[iyunv@localhost ~]#vim /usr/local/apache-tomcat-7.0.61/conf/context.xml

在Context标签内增加:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" sessionBackupAsync="false" sessionBackupTimeout="1800000" copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

千万注意:此 Manager 标签是一行!并且一定要检查多没多空格什么的!不然报错,很蛋疼!

Manager标签属性说明:
    className 此属性是必须的。
    memcachedNodes  此属性是必须的,这个属性必须包含你所有运行的memcached节点,每个节点的定义格式为<id>:<host>:<port>, 多个之间用空格或半角逗号隔,如果只有一个memcached,就不需要写节点ID。
    requestUriIgnorePattern  可选项,此属性是那些不需备份Session的请求的正则表达式。
    sessionBackupAsync  设置为false即是设置为非沾粘session。
    sessionBackupTimeout  可选项,默认100,单位毫秒。
    transcoderFactoryClass 可选,默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory,上述配置使用kryo策略,效率主要体现在高并发下。

2、修改第二个tomcat的启动端口为 8090

在tomcat/lib库中添加mem和msm的依赖jar包:

本例中使用的jar包文件版本:

asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.11.jar
memcached-session-manager-1.7.0.jar
memcached-session-manager-tc7-1.8.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.7.0.jar
reflectasm-1.01.jar
spymemcached-2.7.3.jar

把这些jar包,都拷入tomcat的 lib 目录中 ,两个tomcat都要拷贝

然后启动两个tomcat,查看日志有无问题。



把session测试文件放入tomcat的ROOT目录中测试

注意:因为本例只用了一台服务器,前端nginx反向代理第一台tomcat,第二台tomcat的端口是8090。所以需要在第一台tomcat的页面上做一个跳转,跳到第二个tomcat上,如果第二个tomcat能够获取到session值,那么既为成功!


至此,配置完成!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61704-1-1.html 上篇帖子: Nginx实现404页面跳转到任意随机页面 下篇帖子: nginx部分调优参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表