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

[经验分享] tomcat 集群及会话保持实验示例

[复制链接]

尚未签到

发表于 2018-11-30 10:20:56 | 显示全部楼层 |阅读模式
  Tomcat 集群分类:
  tomcat实现session集群的几种方式:
  (1) nginx + tomcat cluster
  (2) httpd + tomcat cluster #基于http协议

       httpd: mod_proxy, mod_proxy_http, mod_proxy_balancer
      tomcat cluster:http connector
  (3) httpd + tomcat cluster #基于ajp协议

       httpd: mod_proxy, mod_proxy_ajp, mod_proxy_balancer
      tomcat cluster:ajp connector
  (4) httpd + tomcat cluster
       httpd: mod_jk  #不常用,本文不做接受
       tomcat cluster:ajp connector
  实验准备:
  三台主机:1台nginx或者httpd做反向调度,两台tomcat做后端服务器(tomcatA,tomcatB)
  时间同步
  主机名解析
  tomcat主机安装:
yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps  
  1. nginx + tomcat cluster
  1.1 部署nginx反向代理
  vim  /etc/nginx/nginx.conf
  upstream  tomsrvs {         #http段
          server 172.18.43.72:8080;
          server 172.18.43.73:8080;
  

          location / {                #默认http-->server段:
                  proxy_pass http://tomsrvs;                                                                                                                                                   
          }
  1.2 部署tomcat后端服务器
  mkdir -pv /var/lib/tomcat/webapps/test/{classes,lib,WEB-INF,META-INF}
  创建文件vim  /var/lib/tomcat/webapps/test/index.jsp
  tomcatA测试页:
  
  
  
  
        TomcatA
  
              
  
                    TomcatA.magedu.com
  
                    
  
                          
  
                               Session ID
  
                          
                                
  
                          
  
                          
  
                                Created on
                                
  

                          
  
                    
  
              
  
  
  tomcatB测试页:
  
  
  
  
        TomcatB
  
              
  
                    TomcatB.magedu.com
  
                    
  
                          
  
                               Session ID
  
                          
                                
  
                          
  
                          
  
                                Created on
                                
  

                          
  
                    
  
              
  
  
  测试结果(已完成nginx反代):

  
  2. httpd + tomcat cluster (http协议)
  httpd服务器部署反向代理虚拟服务器vim /etc/httpd/conf.d/tom-http.conf
  
       BalancerMember http://172.18.43.72:8080  loadfactor=1 #定义权重
       BalancerMember http://172.18.43.73:8080  loadfactor=3
       ProxySet lbmethod=byrequests        #设定调度算法
  
  
       ServerName lb.magedu.com
       ProxyVia On
       ProxyRequests Off   #关闭正向代理
       ProxyPreserveHost On
       
             Require all granted
       
       ProxyPass / balancer://tcsrvs/   #把所有请求映射到tcsrvs
       ProxyPa***everse / balancer://tcsrvs/
       
             Require all granted
       
  
  测试略

  附httpd反代相关设置:
http集群调度算法:
     byrequests:轮询(默认)
     bybusyness:加权轮询
     bytraffic:基于流量调度
定义后端调度主机状态status:
     D:相当于down不接受请求
     I:强行设置为健康
     H:热备,相当于backup
     E:错误
     N:不接受新请求  3. httpd + tomcat cluster (ajp协议)
  httpd服务器部署反向代理虚拟服务器vim /etc/httpd/conf.d/tom-ajp.conf
  
       BalancerMember ajp://172.18.43.72:8009  
       BalancerMember ajp://172.18.43.73:8009  
       ProxySet lbmethod=byrequests        
  
  
       ServerName lb.magedu.com
       ProxyVia On
       ProxyRequests Off   
       ProxyPreserveHost On
       
             Require all granted
       
       ProxyPass / balancer://tcsrvs/  
       ProxyPa***everse / balancer://tcsrvs/
       
             Require all granted
       
  
  4. 关于httpd内置集群代理管理页面的配置
  在如上设置中加入如下代码:
  
             SetHandler balancer-manager    #启用内建处理器
             ProxyPass !      #访问这个URL时不向后端代理
             Require all granted     #真正使用时管理页面不应都可访问
  
  访问URL进行访问效果如图:

  可在此页面进行管理调度算法,后端主机状态权重等。
  实现Tomcat会话保持的三种方式:
  

  1.基于http模块route标签实现会话粘性
  1.1 http服务器与上面相比添加内容如下:
  

  Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #新
  
       BalancerMember ajp://172.18.43.72:8009 route=TomcatA  #新加
       BalancerMember ajp://172.18.43.73:8009 route=TomvatB #新加
       ProxySet lbmethod=byrequests
       ProxySet stickysession=ROUTEID #新加
  1.2 修改两台后端tomcat主机
  在Engine标签里面(在105行附近)加入jvmRoute="Tomcat*"
     #主机A
     #主机B
  测试实现会话粘性
  2. Tomcat 会话复制集群
  2.1 httpd主机注释或删除上例中添加部分
  2.2 编辑两台后端tomcat主机server.xml配置文件
  确保server.xml配置文件Engine的jvmRoute属性配置正确(如上例TomcatA,TomcatB),将下列配置放置于或中,注意各节点配置不同
  
           
  
           
              #超时多久判定为故障
           
  
           
           
           
           
           
           
  
           
           
  
           
  
           
           
           
  2.3 添加元素
  拷贝tomcat自带模板到test的WEB-INF下面:
  cp /etc/tomcat/web.xml /var/lib/tomcat/webapps/test/WEB-INF/web.xml
  编辑WEB-INF/web.xml,添加元素
  vim web.xml
  在任意非注释区域添加:
  2.4 抓包测试,可看到两台主机互相通信实现会话复制

  浏览器测试已实现会话粘性
  3. session会话保持之session服务器(memcached)
  3.1  memcached介绍
        Memcached 是一款高效高性能的旁挂式数据缓存系统,设计简单,程序短小。即只将数据存贮至内存中,而不写入至硬盘,成为缓存系统, memcached 存储的是 kv 类型数据.所有的缓存都是 kv 类型的数据,并且 memcached 中缓存的数据可以被修改,因为 memcached 的缓存数据存在于内存中所以,服务器宕机,数据丢失,所以只能作为缓存使用,而不能当做存储使用.
        memcached 支持互不通信的集群,作为旁挂式缓存系统。需要程序主动与 memcached 进行交互通信。并且memcached 一般用于存储 session。即作为 session 服务器使用。
  采用了惰性管理,即该清理掉的数据被标记为不可用,然后在新数据到达时,进行覆盖。
  3.2 实验环境
  构建一台httpd反向代理,两台后端tomcat服务器(兼memcached)。操作方法见上例 [集群之 3 httpd + tomcat cluster (ajp协议)]
  主体架构:Clients–>172.18.43.71(httpd)–>(tomcatA, tomcatB)–> (n1 n2)
  https://s3.运维网.com/oss/201711/09/efafbb49622df53576520d35afd4c7fe.png
  3.3.配置tomcat
  memcache不支持流式数据存储,需借助memcached-session-manager转化信息。
  memcached-session-manager项目地址:
  http://code.google.com/p/memcached-session-manager/
  https://github.com/magro/memcached-session-manager
  下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
  实验所用包一览:
memcached-session-manager-${version}.jar
memcached-session-manager-tc${6,7,8}-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar  
  分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
  
                
              
  重启tomcat,memcache服务
  3.4 测试
  在浏览器中访问http://172.18.43.71/test/index.jsp,不断刷新,结果如下所示,其session ID在负载均衡环境中保持不变。
  https://s3.运维网.com/oss/201711/09/6aee496313cddfea8d2c77218a675d2b.gif
  
  从测试结果可以看出,现在启用会话共享服务的memcache节点为n1,此时将n1节点的memcache关闭;
  刷新页面:
  https://s1.运维网.com/oss/201711/09/2d22d5720fae571d4db2c9a879359575.gif

  此时,其session ID在负载均衡环境中保持不变,只是提供memcache服务的节点转为n2;
  实现了基于memcache的会话保持集群;
  





运维网声明 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-641482-1-1.html 上篇帖子: tomcat web服务器优化 下篇帖子: windows tomcat 启动报错TOMCAT JAVA_HOME or JRE_HOME environment variable is not defi
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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