设为首页 收藏本站
查看: 1996|回复: 6

[经验分享] Apache2+tomcat6集群+session同步

[复制链接]

尚未签到

发表于 2013-1-6 09:34:43 | 显示全部楼层 |阅读模式

Apache2+tomcat6集群+session同步

说明:借前人之鉴,写一篇关于tomcat集群及session同步的问题,首先介绍tomcat集群及做集群的原因和必要性;session同步的作用;各软件的安装配置及测试。
原理:

132236572.png


Apache是httpd服务器,负责接收http请求,如何将请求分发给后台tomcat,这就需要mod_jk了,mod_jk是apache用来连接tomcat的模块,它需要配置在apache中。下面描述的是他们各自的分工情况。
Apache要做的是:apache默认处理接收到的所有http请求,但可通过配置将请求转发给某个模块处理,并且将模块处理结果返回,在这里我们将所有请求都转发给mod_jk这个模块去处理。
Mod_jk要做的是:
a. 登记所有的tomcat服务器,并针对不同功能划分tomcat做不同的配置。
b. 将从apache接收到的请求按策略分配给tomcat,分配策略如下:
i.       对于新的会话按配置比例分发给tomcat
ii.      对于已有会话(http中包含session信息)的请求会发送给创建该会话的tomcat
iii.    当创建会话的tomcat无法响应时,发送给该tomcat指定的备份tomcat。如果没有指定,则视为新会话处理。
Tomcat要做的是:处理mod_jk发送过来的请求并返回结果。如果某一tomcat无法响应应转由其他tomcat处理时,原有的session信息将会丢失。为解决此问题,于是就有了session同步的概念,即多个服务器之间共享session,当某一服务器不能提供服务时不会导致用户session丢失。Tomcat 的session共享是基于ip组播协议实现的。这里只需要知道session同步是可以通过配置实现的,并且是由tomcat实现的并非mod_jk。了解了原理之后,配置起来就水到渠成了。
.需求
用两台服务器搭建apache+tomcat测试开发环境,tomcat具有负载均衡能力,并实现session同步。
.环境
OS:CentOS 5.6
httpd-2.2.17.tar.gz
jdk-6u20-linux-i586-rpm.bin
apache-tomcat-6.0.33.tar.gz
jakarta-tomcat-connectors-1.2.15-src.tar.gz
tomcat-connectors-1.2.32-src.tar.gz
.规划安装
192.168.2.4---------apache+tomcat+jdk
192.168.2.5---------tomcat+jdk
.部署
Apache 安装:
#tar httpd-2.2.17.tar.gz
#cd httpd-2.2.17
#./configure –-prefix=/usr/local/apache2 –-enable-modules=so –-enable-so
#make && make install
/usr/local/apache2/bin/apachectl start
看到apache就配置成功了。
JDK的安装
#chmod +x jdk-6u20-linux-i586-rpm.bin
#./ jdk-6u20-linux-i586-rpm.bin
一路空格键,然后输入yes,回车默认就安装到/usr/java/下了。
设置环境变量:
#vim /etc/profile添加如下内容:
#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_20
export JAVA_BIN=/usr/java/jdk1.6.0_20/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
运行,使环境生效;
#source /etc/profile
[iyunv@Client ~]# java -version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-52)

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
安装tomcat
#tar –zxvf apache-tomcat-6.0.33.tar.gz
#mv apache-tomcat-6.0.33 /usr/local/tomcat
启动一个tomcat实例
#/usr/local/tomcat/bin/startup.sh
在浏览器中输入http://192.168.2.4:8080看到猫头,就代表成功安装了!
在另一台服务器(192.168.2.5)上也同样安装jdk+tomcat。启动即可
安装tomcat-connectors-1.2.32-src.tar.gz
JK安装(整合apache tomcat)
#tar –zxvf tomcat-connectors-1.2.32-src.tar.gz
#cd tomcat-connectors-1.2.32-src/native
#./configure –with-apxs=/usr/local/apache2/bin/apxs –with-java-home= /usr/java/jdk1.6.0_20
#make && make install
在/usr/local/apache2/modules目录下会产生mod_jk.so
Apache+tomcat整合
修改apache配置文件,添加如下内容:
JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties    //JK的配置文件,负载的配置
JkShmFile logs/mod_jk.shm
JkLogFile /usr/local/tomcat/logs/mod_jk.log        //jk的日志文件
JkLogLevel info                     //日志级别
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions  +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /*.jsp controller   //将所有jsp的请求转发给controller(负载均衡控制器)
修改apache的配置文件httpd.conf
i.       在DirectoryIndex中添加index.jsp
ii.      修改DocumentRoot目录与tomcat目录一致。为:/usr/local/tomcat/webapps
保存退出!重启apache服务。
调度器JK的配置:
#vim /usr/local/tomcat/conf/jk/workers.properties   \整合配置文件
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/jdk1.6.0_20
ps=/
worker.list=controller  
#指定负载名,这个名字可自定义,但要与下面的work.controller.type=lb对应
#---------tomcat1--------------- 第一台tomcat的配置
worker.tomcat1.port=8009
worker.tomcat1.host=localhost          //此处可以写本机IP(192.168.2.4)
worker.tomcat1.type=ajp13           //使用的协议ajp13
worker.tomcat1.lbfactor=1            //权量,数值越大,分配的几率越小
#worker.tomcat1.redirect=tomcat2    //定义tomcat1实例如果挂掉,由tomcat2实例接替tomcat1
#---------tomcat2---------------
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.2.5        //另一台tomcat的IP地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#woker.tomcat2.local_worker=0
#worker.tomcat2.activation=disabled
#以上注释掉的两行如果开启,则tomcat2成为tomcat1的备用,在tomcat1不可用的情况下才会向tomcat2请求。
#--------controller------------- 负载均衡器
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2
#各tomcat配置文件server.xml里的jvmRoute="tomcat1"等指定的名字,需要各自修改一下。
worker.controller.sticky_session=1
到此处,已可实现tomcat的负载均衡!可以将tomcat的主页文件index.jsp稍作修改,然后在浏览器中输入http://192.168.2.4进行测试,可以很清晰的看到,每次刷新后的页面都不一样,1,2交替出现。

132303804.png


Tomcat集群配置(session同步):
i.       修改192.168.2.4中tomcat的配置文件server.xml

132317930.png

#vim /usr/local/tomcat/conf/server.xml

132335639.png

ii.      修改192.168.2.5中tomcat的配置文件server.xml
注,内容信息是:

   

      
      
      
        <manager classname="org.apache.catalina.ha.session.DeltaManager" [="" font]
        expireSessionsOnShutdown="false"
        notifyListenersOnReplication="true"/>
         
        <membership classname="org.apache.catalina.tribes.membership.McastService" [="" font]
        mcastBindAddress="192.168.2.4"
        mcastAddr="224.0.0.1"
        port="45564"
        frequency="500"
        dropTime="3000"/>
<receiver classname="org.apache.catalina.tribes.transport.nio.NioReceiver" [="" font]
        tcpListenAddress="192.168.2.4"
        port="4001"
        autoBind="100"
        selectorTimeout="5000"
        maxThreads="6"/>

        [tr]
        
        
         
        
        


保存退出!
注意事项:mcastAddr="224.0.0.1"需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0(可以添加至开机启动)
Session复制配置
Tomcat集群中的session管理,主要有两种方式:
1. 粘性session
表示从同一窗口发来的请求都将有集群集群中同一tomcat进行处理。配置方式是在上面worker.properties文件中代码worker.controller.sticky_session=1
粘性session的好处是不会在不同的tomcat上来回跳动处理请求,但是坏处是如果该session的tomcat崩溃,那么之后的请求将由其他tomcat处理,原有session失效而重新建一个新的session,这样如果继续从session取值,会抛出nullpointer的访问异常。
2. session复制
session复制是指tomcat彼此之间通过组播方式将session发送各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是tomcat实例很多或者用户在session中有大量操作时,组播发送的信息量十分惊人。Session复制配置则是在发布的WEB应用程序中的web.xml中添加xml代码
3.查看
[iyunv@Client apache_tomcat]# netstat -tnlp
tcp 0 0  192.168.2.4:4001            0.0.0.0:*                 LISTEN      1990/java     
4.修改应用程序的web.xml文件
Web.xml配置文件加上节点,此配置说明当前web工程处于分布式部署环境,如果不进行这个配置,每次访问页面tomcat都会产生一个新的sessionid。
在之前加上用于session复制。
#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml

     Welcome to Tomcat



5.在webapps目录下创建目录test、在test中创建print.jsp与test.jsp
#vim /usr/local/tomcat/webapps/test/print.jsp
<%
    System.out.println(wjpinrain.blog.);
%>
#vim /usr/local/tomcat/webapps/test/test.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
Cluster App Test
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"
");%>
<%
  out.println("
ID " + session.getId()+"
");
  String dataName = request.getParameter("dataName");
  session.setAttribute("myname","session?");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }
  out.print("Session P±?b>");
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"
");
         System.out.println( name + " = " + value);
   }
%>
  
    ?3?
     
    ?:
     
   
   
注:在两台服务器上均做此两个文件,修改web.xml。
重启所有服务。
访问:http://192.168.2.4/test/test.jsp
Server Info: 192.168.2.4 : 80
ID 58EDB92B320CFFD0DDE8EE948CB22DC8.tomcat1

此时我将tomcat1停止服务再刷新网页
Server Info: 192.168.2.4 : 80
ID 58EDB92B320CFFD0DDE8EE948CB22DC8.tomcat2

可以看出当其中一台tomcat停止运行后,刷新后session值不变,但提供该服务的服务器已更换为tomcat2.
到此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-3066-1-1.html 上篇帖子: apache优化配置 下篇帖子: Ubuntu 64-bit下搭建 Apache 2、PHP5、MySQL、GO Web服务器

尚未签到

发表于 2013-3-14 03:01:31 | 显示全部楼层
学习了,谢谢分享、、、

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

尚未签到

发表于 2013-5-16 04:43:10 | 显示全部楼层
站的更高,尿的更远。

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

尚未签到

发表于 2013-5-17 14:03:50 | 显示全部楼层
如果恐龙是人,那人是什么?

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

尚未签到

发表于 2013-5-19 01:12:58 | 显示全部楼层
鸳鸳相抱何时了,鸯在一边看热闹。

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

尚未签到

发表于 2013-5-20 10:36:14 | 显示全部楼层
我本非随便的人,但如果你想随便,那我就随你的便好啦!

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

尚未签到

发表于 2013-5-21 18:13:34 | 显示全部楼层
死亡教会人一切,如同考试之后公布的结果——虽然恍然大悟,但为时晚矣~!

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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