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

[经验分享] tomcat实现session保持案例

[复制链接]

尚未签到

发表于 2018-11-29 13:10:50 | 显示全部楼层 |阅读模式

  apache: tomcats
        (1) apache:
                mod_proxy
                mod_proxy_http  实现代理
                mod_proxy_balancer  实现负载均衡
            tomcat:
                http connector   http连接器
        (2) apache:
                mod_proxy
                mod_proxy_ajp   ajp模块
                mod_proxy_balancer               
            tomcat:
                ajp connector  ajp连接器
        (3) apache:
                mod_jk
            tomcat:
                ajp connector
方案一:使用nginx反代用户请求到tomcat:(实现负载均衡和session绑定)
配置hosts文件:
192.168.20.1 node1.lee.com node1
192.168.20.2 node2.lee.com node2
192.168.20.8 node4.lee.com node4
192.168.20.7 node3.lee.com node3
前端nginx配置实现负载均衡:
1.在http上下文定义upstream server
upstream tcsrvs {
        ip_hash;  实现session绑定
        server node1.lee.com:8080;
        server node2.lee.com:8080;
        }
2.在server段中调用:
    location / {
        root   /usr/share/nginx/html;
        }
    location ~* \.(jsp|do)$ {
                proxy_pass http://tcsrvs;
                }
后端两个tomcat配置server.xml:
示例只给了第一台的配置,第二台的只需将所有node1改为node2即可


        
        
/data/webapps/index.jsp文件:


   
      
        JSP Test Page
      
      
        
      
   方案二:使用httpd反代用户请求到tomcat
前端httpd反代配置:

        BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
        BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB


    ServerName web1.lee.com
    ProxyVia On
    ProxyRequests Off
    ProxyPreserveHost On
   
        Order Deny,Allow
        Allow from all
   
    ProxyPass /status !
    ProxyPass / balancer://lbcluster1/
    ProxyPa***everse / balancer://lbcluster1/
   
        Order Deny,Allow
        Allow from all
   

后端tomcat主机配置:此处为node1主机,node2主机设置为 jvmRoute="TomcatB",测试页也做相应替换
#jvmRoute为了让前端httpd可以精确识别自己,使用jvmRoute作为标示
编辑测试页面:/data/webapps/index.jsp


  TomcatA
  
    TomcatA.lee.com
   
      
        Session ID   
        
      
      
        Created on
        
     
   
  
  测试:

  发现即便调度到同一主机session也会变,更不用说不调度在同一主机


  解决:修改这两行,使用session粘性功能

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

        BalancerMember http://192.168.20.1:8080 loadfactor=10 route=TomcatA
        BalancerMember http://192.168.20.2:8080 loadfactor=10 route=TomcatB
        ProxySet stickysession=ROUTEID
  测试后发现session绑定成功
使用ajp连接:只需要修改两行
#Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
注释上面一行是因为使用ajp协议的话只需要ProxySet stickysession=ROUTEID一条语句即可绑定

        BalancerMember ajp://172.16.100.68:8009 loadfactor=10 route=TomcatA
        BalancerMember ajp://172.16.100.69:8009 loadfactor=10 route=TomcatB
        ProxySet stickysession=ROUTEID
方案三:使用mod_jk作反向代理,使用mod_jk后端连接只能使用ajp协议
tar  xf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src/native
准备编译环境:
yum install httpd-devel gcc glibc-devel
yum groupinstall "Development tools"
mod_jk依赖于apxs
[root@node3 rpm]# which apxs
/usr/sbin/apxs
在native目录下:
./configure --with-apxs=/usr/sbin/apxs
装载mod_jk模块:在httpd.conf文件中:
LoadModule  jk_module  modules/mod_jk.so
查看是否装载成功:
[root@node3 conf]# httpd -M | grep jk
Syntax OK
jk_module (shared)
配置jk_module属性:httpd.conf中
JkWorkersFile  /etc/httpd/conf.d/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  TomcatA  #此处的TomcatA必须与后端Tomcat的engine中定义哪个TomcatA的一致
JkMount  /status/  stat1
创建/etc/httpd/conf.d/workers.properties
worker.list=TomcatA,stat1
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.20.1
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status
访问mod_jk自带的status页面:此页面也有管理功能
改为负载均衡:并且会话绑定功能
修改httpd.conf:
JkWorkersFile  /etc/httpd/conf.d/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  lbcluster1
JkMount  /jkstatus/  stat1
修改/etc/httpd/conf.d/workers.properties
worker.list = lbcluster1,stat1
worker.TomcatA.type = ajp13
worker.TomcatA.host = 192.168.20.1
worker.TomcatA.port = 8009
worker.TomcatA.lbfactor = 5
worker.TomcatB.type = ajp13
worker.TomcatB.host = 192.168.20.2
worker.TomcatB.port = 8009
worker.TomcatB.lbfactor = 5
worker.lbcluster1.type = lb
worker.lbcluster1.sticky_session = 1
worker.lbcluster1.balance_workers = TomcatA, TomcatB
worker.stat1.type = status
测试成功  介绍:proxy-balancer-manager模块页面的使用


        BalancerMember http://192.168.20.1:8080 loadfactor=10 route=TomcatA
        BalancerMember http://192.168.20.2:8080 loadfactor=10 route=TomcatB
        ProxySet stickysession=ROUTEID


    ServerName web1.lee.com
    ProxyVia On
    ProxyRequests Off
    ProxyPreserveHost On
   
        SetHandler balancer-manager
        ProxyPass !
        Order Deny,Allow
        Allow from all
   
   
        Order Deny,Allow
        Allow from all
   
    ProxyPass /status !
    ProxyPass / balancer://lbcluster1/
    ProxyPa***everse / balancer://lbcluster1/
   
        Order Deny,Allow
        Allow from all
   
  测试:

  delta-manager实现会话复制集群实现
在server.xml中Host上下文中添加:

         
         
            
            
            
              
            
            
            
         
         
         
         
         
        
配置我们的特定应用程序调用上面的cluster功能
[root@node1 conf]# cp web.xml /data/webapps/WEB-INF/
[root@node1 conf]# vim /data/webapps/WEB-INF/web.xml
添加
[root@node1 conf]# scp /data/webapps/WEB-INF/web.xml node2:/data/webapps/WEB-INF/
web.xml                                                 100%  163KB 162.7KB/s   00:00
查看日志,发现集群中加入了主机:
tail -100 /usr/local/tomcat/logs/catalina.out
01-Nov-2015 00:09:04.215 INFO [Membership-MemberAdded.] org.apache.catalina.ha.tcp.SimpleTcpCluster.memberAdded Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 20, 2}:4000,{192, 168, 20, 2},4000, alive=1036, securePort=-1, UDP Port=-1, id={-40 -58 -73 -47 -114 -18 76 74 -81 -66 125 -30 -36 -78 -87 -23 }, payload={}, command={}, domain={}, ]  测试发现尽管负载均衡切换了主机,但是session不会改变


  同理,使用Mod_jk和ajp连接后端也成功,使用nginx做反代也行,这里就不缀余了
  

  使用msm实现session服务器实现:

  借助于memcached:
yum install memcached
[root@node3 ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
提供四个java类库:
[root@node1 msm-1.8.3]# ls
memcached-session-manager-1.8.3.jar      msm-javolution-serializer-1.8.3.jar
memcached-session-manager-tc8-1.8.3.jar  spymemcached-2.10.2.jar
javolution-5.5.1.jar
放置于两台tomcat服务器的/usr/local/tomcat/lib目录下:
[root@node1 ~]# scp -r msm-1.8.3/ node2:/usr/local/tomcat/lib
The authenticity of host 'node2 (192.168.20.2)' can't be established.
RSA key fingerprint is d5:69:d0:fc:ce:90:14:14:6d:4c:52:82:53:a5:ed:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2,192.168.20.2' (RSA) to the list of known hosts.
root@node2's password:
spymemcached-2.10.2.jar                                 100%  429KB 428.8KB/s   00:00   
memcached-session-manager-tc8-1.8.3.jar                 100%   10KB  10.2KB/s   00:00   
msm-javolution-serializer-1.8.3.jar                     100%   69KB  69.4KB/s   00:00   
memcached-session-manager-1.8.3.jar                     100%  144KB 143.6KB/s   00:00
javolution-5.5.1.jar                                    100%  144KB 143.6KB/s   00:00
编辑server.xml文件Host上下文中定义context

        
        
            
          





运维网声明 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.iyunv.com/thread-641198-1-1.html 上篇帖子: Tomcat配置——中文显示 下篇帖子: eclipse 导入tomcat 7 源码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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