`
litxuf
  • 浏览: 122393 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apache与 tomcat 集群配置与session共享

阅读更多

       关于apache 与 tomcat配合使用的优势就不废话了 直接来配置

 

(一)前期准备
我的系统用的是windowsXP专业版,我要做的是,用一个apache和多个(这里以两个作为示例)tomcat,通过jk方式,构造一个集群。以下是要首先准备的东西:

1、jdk,我用的版本是jdk1.5.0_06,

2、apache,我用的版本是 apache_2.2.3-win32-x86-no_ssl.msi

3、tomcat,我用的版本是  apache-tomcat-6.0.29

4、jk,这个jk的版本,本来有两个的,但是版本2已经被废弃掉了 。每个apache的版本,都会有一个特定的jk与之对应,所以这里要用的jk也必须是为apache-2.2.3开发的那个才行。我用的是 mod_jk-1.2.28-httpd-2.2.3.so 

有了这四样东西,我们就可以开始做集群了。
(二)安装
1、相信需要看这篇文章的人,JDK的安装一定不会陌生,这里不在赘述。只是需要提醒一下:环境变量别忘记配置了。


2、安装apache也没有什么难度,就是在安装过程中要配置域名、网址和管理员邮箱之类的信息,这个信息完全可以按照提示,然后修改下填入即可,之后想修改的话直接到配置文件中改就行了。除了这个地方,还要保证机器上的80端口没有被其他程序占用。至于安装路径,完全取决于个人爱好。其他的默认就行了。安装成功后,系统右下角的托盘区会有个图标,我们可以通过这个启动apache,如果那个小红点变成绿色,说明服务已经正常启动了(如果服务没有启动起来,说明安装过程中的配置有错误,建议卸载后重装)。如果按照默认,端口是80的话,那打开浏览器,输入:
http://localhost/,应该可以看到 " It works “的字样。这样就可以进入下一步了。

 


3、解压缩tomcat,记得要做两份。这里不妨将两个tomcat命名为:apache-tomcat-6.0.29_1_1和apache-tomcat-6.0.29_1_2,其实这两个文件夹中的东西是完全一样的。但是我为了在同一台机器上做集群,那就要保证两个 tomcat运行起来不会在端口上起冲突。这样,tomcat就算安装好了。

 


4、jk这东西是一个连接模块,不用安装,直接将mod_jk-apache-2.2.3.so这个文件拷贝到apache安装目录下的modules文件夹下面就行了。
这样,安装完成,下面开始配置。

 

(三)配置
这个地方才是搭建集群的关键所在,我也会尽我的可能写的详细点。

1、配置tomcat
       修改 Tomcat 实例需要使用的三个网络端口 conf/server.xml

第一个tomcat

       <Server port="8105" shutdown="SHUTDOWN">
      <Connector port="8180" protocol="HTTP/1.1"   

             connectionTimeout="20000"        redirectPort="8443" />

      <Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />

 

      通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。

  • 修改前内容如下:
    <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1"> <Engine name = "Catalina" defaultHost = "localhost"> -->
    
    

 

改成   <Engine name="Standalone" defaultHost="localhost" jvmRoute="s1">

去掉 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释

 

第二个tomcat

       <Server port="8205" shutdown="SHUTDOWN">
      <Connector port="8280" protocol="HTTP/1.1"   

              connectionTimeout="20000"        redirectPort="8443" />

      <Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />

 

      通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。

  • 修改前内容如下:
    <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1"> <Engine name = "Catalina" defaultHost = "localhost"> -->
    
    

改成   <Engine name="Standalone" defaultHost="localhost" jvmRoute="s2">

去掉 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释

2、配置apache
(1)进入apache的主目录,然后进入conf文件夹,用文本编辑器打开httpd.conf,在该文件末尾加上如下几行:

### 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so 

### 配置 mod_jk
JkWorkersFile conf/workers.properties           #加载集群中的workers
JkMountFile conf/uriworkermap.properties    #加载workers的请求处理分配文件
JkLogFile logs/mod_jk.log                                #指定jk的日志输出文件
JkLogLevel warn                                                  #指定日志级别

(2)不要改变目录,新建一个文件:workers.properties,该文件用来配置web容器的信息。该文件的内容如下:

 


# worker列表
worker.list=controller, status

#第一个server的配置,server名为s1
#ajp13 端口号,

worker.s1.port=8109
#tomcat的主机地址,如不为本机,请填写ip地址
worker.s1.host=localhost
worker.s1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.s1.lbfactor=1

#第二个server的配置,server名为s2
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.lbfactor=1

 


#server名为controller,用于负载均衡
worker.controller.type=lb
worker.retries=3   #重试次数
#指定分担请求的server列表,用逗号分隔
worker.controller.balanced_workers=s1,s2
#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,但是我是设置为0才可以的
worker.controller.sticky_session=0
#worker.controller.sticky_session_force=1

worker.status.type=status
(3)不要改变目录,新建一个文件:uriworkermap.properties,文件内容如下:
/*=controller                         #所有请求都由controller这个server处理
/jkstatus=status                   #所有包含jkstatus请求的都由status这个server处理

!/*.gif=controller                   #所有以.gif结尾的请求都不由controller这个server处理,以下几个都是一样的意思
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller

这里的"!”类似于java中的"!”,是“非”的意思。
这样,apache一块就配置好了。

 

 

3.配置项目的web.xml

 

 在应用时候,工程的web.xml里面要加上这么一个属性,实现Session共享:
<web-app>

      ……
<distributable/>

</web-app>

    文件中的“ <distributable/> ”项,是由于本案例将部署到集群中的多个服务器上。如果在配置文件中没 有此项,则应用在集群中不能实现分布式 Session 共享,也就是说当机后用户状态数据(存放在 Session 中的)无法无缝迁移到 Tomcat 集群中的其他服务器上。此项非常重要,请读者多加留心。

 

(四)运行
进入两个tomcat的bin目录,执行两个tomcat的startup.bat启动这两个 tomcat,然后将apache重新启动后,运行起来看看效果吧。如果不出意外,两个tomcat的窗口应该是你一次我一次的打印日志信息了,而且此时 session也是共享了的。到这里,集群搭建好了,负载均衡也实现了。

 

后记:

 

  1.session需要共享的对象 一定要实现序列化的接口 不然在写入session的时候会出现 setAttribute: Non-serializable attribute 错误

 

   2.一机启动多个tomcat的方法 需要提供CATALINA_HOME地址

        即在catalina.bat 和 startup.bat 的第一行写上 CATALINA_HOME 地址

  例如  set CATALINA_HOME=C:\apache\apache-tomcat-6.0.29_1

          set CATALINA_HOME=C:\apache\apache-tomcat-6.0.29_2

 

 

 疑惑:

 worker.controller.sticky_session

 值为0时 两个控制台可以交替打印数据 session可以实现共享

 值为1时 只有一个tomcat在打印数据 当关闭这个tomcat的时候 另一个tomcat仍保存上一个tomcat的session数据

 不是很明白 不知哪位大侠可以解释一下了

   

 

             表示感谢
           附件为apache 和 tomcat的配置文件 仅供参考
0
0
分享到:
评论
1 楼 Ralfc 2012-02-22  
http://tomcat.apache.org/connectors-doc/reference/workers.html
这里有sticky_session的相关介绍。

另外,为0时,你的session是共享的吗?而我每次访问session都是再变的。。

为1时,同一个session只会在同一个tomcat中,不会到另一个tomcat中显示

相关推荐

    redis+tomcat集群配置session共享

    本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...

    apache+tomcat集群配置64位windows系统

    **二、Tomcat集群配置** 1. **安装Tomcat**:下载并安装两个Tomcat实例,分别监听不同的端口(如上述8080和8081)。 2. **复制共享session配置**:由于集群中的各个Tomcat实例需要共享session,所以需要在每个...

    Tomcat集群配置,实现session共享

    ### Tomcat集群配置与Session共享详解 #### 一、引言 随着互联网应用的日益增长,单个服务器往往难以满足高并发访问的需求。因此,通过搭建服务器集群来提高系统的可用性和扩展性成为一种常见的解决方案。在Java ...

    Apache+tomcat集群环境配置

    在构建高性能、高可用性的Web应用系统时,Apache与Tomcat的集群配置是常见的解决方案。Apache作为前端服务器,可以通过负载均衡技术将用户请求分发到多个后端的Tomcat实例上,实现请求的分担,同时通过session同步,...

    tomcat集群session共享

    以下是实现Tomcat集群session共享与Redis结合的步骤和知识点: 1. **配置Redis服务器**:首先,你需要安装并运行一个Redis实例。确保其稳定运行,并且能够被集群中的所有Tomcat服务器访问。 2. **选择session复制...

    Tomcat7集群实现共享session,已配置好。

    总之,通过合理配置Tomcat集群和使用Redis作为session存储,我们可以实现跨服务器的session共享,确保用户在多台服务器间的会话一致性。这个压缩包提供了一个预配置的解决方案,对于快速搭建和测试session共享环境...

    Apache+Tomcat集群和负载均衡及Session绑定

    【Apache+Tomcat 集群与负载均衡及Session...通过以上配置,Apache+Tomcat集群可以实现高效的负载均衡和高可用性,同时通过Session绑定确保用户会话的连续性。注意定期监控和优化集群性能,以应对不断变化的业务需求。

    apache-tomcat集群配置

    在高流量或需要高可用性的环境中,设置Apache Tomcat集群是必要的,以实现负载均衡和故障转移。集群配置可以确保即使单个Tomcat实例出现故障,应用程序也能继续运行,同时通过分散请求来提高性能。 集群配置主要...

    apache_server+Tomcat7集群负载均衡session共享

    3. **Tomcat7集群配置**:在Tomcat的server.xml文件中,需要开启集群支持,并配置集群广播机制,如基于UDP的`org.apache.catalina.ha.tcp.SimpleTcpCluster`。每个Tomcat实例都需要知道其他实例的存在,并能接收到...

    tomcat集群配置

    【标题】:“Tomcat集群配置” 在Web应用的高可用性和可扩展性需求日益增长的今天,Tomcat集群成为了一个重要的解决方案。Tomcat集群能够通过负载均衡和故障转移来提高服务的稳定性和性能。以下是对Tomcat集群配置...

    tomcat8集群实现session共享,内含session共享包

    在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...

    Linux下通过Apache搭建Tomcat集群

    在Linux环境中,通过Apache HTTP服务器(简称Apache)搭建Tomcat集群是一种常见的高可用性和负载均衡配置方式。Apache作为反向代理服务器,可以将用户的请求分发到多个Tomcat实例上,从而实现应用服务的扩展和容错。...

    Apache2.2与tomcat7 集群配置

    总结来说,Apache2.2与Tomcat7集群配置涉及的技术主要包括Apache的mod_jk模块、集群理论、负载均衡策略、会话复制、故障转移以及相关配置文件的设置。熟练掌握这些知识点,对于构建高性能的Java Web服务至关重要。

    tomcat8集群redis实现session共享jar包

    5. **测试与优化**:启动Tomcat集群并验证用户会话是否可以在不同服务器之间正确共享。如果一切正常,可以考虑对Redis进行性能调优,例如调整Redis的内存限制、启用持久化策略等。 通过这种方式,你可以利用Redis的...

    APACHE-TOMCAT集群DEMO-详细配置

    在本DEMO中,我们将深入探讨如何在Windows环境下设置Apache Tomcat集群,以及涉及的关键配置文件和操作步骤。 首先,理解集群的概念至关重要。在分布式系统中,集群是一种将多台独立的服务器组织成一个逻辑单元的...

Global site tag (gtag.js) - Google Analytics