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

tomcat集群和负载均衡的实现(session同步)

阅读更多
(一)环境说明

(1)服务器有4台,一台安装apache,三台安装tomcat
(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2
(3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4

(二)安装过程

(1)在三台要安装tomcat的服务器上先安装jdk
(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径
(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动
(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为7080/8888/9999
修改位置为tomcat的安装目录下的conf/server.xml
修改前的配置为
   
<Connector port="8080" maxHttpHeaderSize="8192" 
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
               enableLookups="false" redirectPort="8443" acceptCount="100" 
               connectionTimeout="20000" disableUploadTimeout="true" /> 

修改后的配置为
   
<Connector port="7080" maxHttpHeaderSize="8192" 
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
               enableLookups="false" redirectPort="8443" acceptCount="100" 
               connectionTimeout="20000" disableUploadTimeout="true" />

依次修改每个tomcat的监听端口(7080/8888/9999)

(5)分别测试每个tomcat的启动是否正常
http://192.168.0.1:7080
http://192.168.0.2:8888
http://192.168.0.4:9999

(三)负载均衡配置过程

(1)在那台要安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:\Program Files\Apache Group\Apache2
(2)安装后测试apache能否正常启动,调试到能够正常启动http://192.168.0.88
(3)下载jk2.0.4后解压缩文件
(4)将解压缩后的目录中的modules目录中的mod_jk2.so文件复制到apache的安装目录下的modules目录中,我的为C:\Program Files\Apache Group\Apache2\modules
(5)修改apache的安装目录中的conf目录的配置文件httpd.conf,在文件中加LoadModule模块配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so
(6)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
   
<!-- An Engine represents the entry point (within Catalina) that processes 
         every request.  The Engine implementation for Tomcat stand alone 
         analyzes the HTTP headers included with the request, and passes them 
         on to the appropriate Host (virtual host). --> 

    <!-- You should set jvmRoute to support load-balancing via AJP ie : 
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
    --> 
        
    <!-- Define the top level container in our container hierarchy --> 
    <Engine name="Catalina" defaultHost="localhost"> 

修改后
   
<!-- An Engine represents the entry point (within Catalina) that processes 
         every request.  The Engine implementation for Tomcat stand alone 
         analyzes the HTTP headers included with the request, and passes them 
         on to the appropriate Host (virtual host). --> 

    <!-- You should set jvmRoute to support load-balancing via AJP ie :--> 
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">       
     
        
    <!-- Define the top level container in our container hierarchy 
    <Engine name="Catalina" defaultHost="localhost"> 
    --> 

将其中的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"

(7)然后重启三个tomcat,调试能够正常启动。
(8)在apache的安装目录中的conf目录下创建文件workers2.propertie,写入文件内容如下

# Define the communication channel 
[channel.socket:192.168.0.1:8009] 
info=Ajp13 forwarding over socket 
#配置第一个服务器 
tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名称一致 
debug=0 
lb_factor=1 #负载平衡因子,数字越大请求被分配的几率越高 

# Define the communication channel 
[channel.socket:192.168.0.2:8009] 
info=Ajp13 forwarding over socket 
tomcatId=tomcat2 
debug=0 
lb_factor=1 

# Define the communication channel 
[channel.socket:192.168.0.4:8009] 
info=Ajp13 forwarding over socket 
tomcatId=tomcat3 
debug=0 
lb_factor=1 

[status:] 
info=Status worker, displays runtime information.  

[uri:/jkstatus.jsp] 
info=Display status information and checks the config file for changes. 
group=status: 

[uri:/*] 
info=Map the whole webapp 
debug=0 

(9)在三个tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为TomcatDemo,在三个应用目录中建立相同 WEB-INF目录和页面index.jsp,index.jsp的页面内容如下
<%@ page contentType="text/html; charset=GBK" %> 
<%@ page import="java.util.*" %> 
<html><head><title>Cluster App Test</title></head> 
<body> 
Server Info: 
<% 
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%> 
<% 
  out.println("<br> ID " + session.getId()+"<br>"); 

  // 如果有新的 Session 属性设置 
  String dataName = request.getParameter("dataName"); 
  if (dataName != null && dataName.length() > 0) { 
     String dataValue = request.getParameter("dataValue"); 
     session.setAttribute(dataName, dataValue); 
  } 

  out.print("<b>Session 列表</b>"); 

  Enumeration e = session.getAttributeNames(); 
  while (e.hasMoreElements()) { 
     String name = (String)e.nextElement(); 
     String value = session.getAttribute(name).toString(); 
     out.println( name + " = " + value+"<br>"); 
         System.out.println( name + " = " + value); 
   } 
%> 
  <form action="index.jsp" method="POST"> 
    名称:<input type=text size=20 name="dataName"> 
     <br> 
    值:<input type=text size=20 name="dataValue"> 
     <br> 
    <input type=submit> 
   </form> 
</body> 
</html> 

(10)重启apache服务器和三个tomcat服务器,到此负载 均衡已配置完成。测试负载均衡先测试apache,访问http://192.168.0.88/jkstatus.jsp
能否正常访问,并查询其中的内容,有三个tomcat的相关配置信息和负载说明,访问http://192.168.0.88/TomcatDemo/index.jsp看能够运行,
能运行,则已建立负载均衡。

(四)tomcat集群配置

(1)负载均衡配置的条件下配置tomcat集群
(2)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
      
 <!-- 
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" 
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                  expireSessionsOnShutdown="false" 
                 useDirtyFlag="true" 
                 notifyListenersOnReplication="true"> 

            <Membership 
                className="org.apache.catalina.cluster.mcast.McastService" 
                mcastAddr="228.0.0.4" 
                mcastPort="45564" 
                mcastFrequency="500" 
                mcastDropTime="3000"/> 

            <Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener" 
                tcpListenAddress="auto" 
                tcpListenPort="4001" 
                tcpSelectorTimeout="100" 
                tcpThreadCount="6"/> 

            <Sender 
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                 replicationMode="pooled" 
                ackTimeout="5000"/> 

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" 
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                   
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                       tempDir="/tmp/war-temp/" 
                      deployDir="/tmp/war-deploy/" 
                      watchDir="/tmp/war-listen/" 
                      watchEnabled="false"/> 
                      
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
         </Cluster> 
        -->  

修改后
       
<!-- modify by whh --> 
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" 
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                  expireSessionsOnShutdown="false" 
                 useDirtyFlag="true" 
                 notifyListenersOnReplication="true"> 

            <Membership 
                className="org.apache.catalina.cluster.mcast.McastService" 
                mcastAddr="228.0.0.4" 
                mcastPort="45564" 
                mcastFrequency="500" 
                mcastDropTime="3000"/> 

            <Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener" 
                tcpListenAddress="auto" 
                tcpListenPort="4001" 
                tcpSelectorTimeout="100" 
                tcpThreadCount="6"/> 

            <Sender 
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                 replicationMode="pooled" 
                ackTimeout="5000"/> 

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" 
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                   
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                       tempDir="/tmp/war-temp/" 
                      deployDir="/tmp/war-deploy/" 
                      watchDir="/tmp/war-listen/" 
                      watchEnabled="false"/> 
                      
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
         </Cluster> 
       <!-- modify by whh -->      

将集群配置选项的注释放开即可,如上。
(3)重启三个tomcat。到此tomcat的集群已配置完成。

(五)应用配置

对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文件要添加如下一句配置
<distributable/>
配置前
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
   <display-name>TomcatDemo</display-name> 
</web-app>

配置后
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
   <display-name>TomcatDemo</display-name> 
   <distributable/> 
</web-app>


tomcat集群和负载均衡的实现(session同步)补充
因为tomcat的session同步功能需要用到组播,windows默认情况下是开通组播服务的,但是linux默认情况下并没有开通,可以通过指令打开route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0,如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入eht0 net 224.0.0.0 netmask 240.0.0.0。具体组播概念请查阅CCNP相关内容。


转载:http://sizhefang.iteye.com/blog/34226
分享到:
评论

相关推荐

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

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

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Tomcat服务器集群和负载均衡

    2. **配置通信机制**:Tomcat集群中的节点需要相互通信,这通常通过两种方式实现:共享内存(适用于同一台物理机上的多个Tomcat实例)和基于网络的通信(如JMS,适用于跨网络的节点)。 3. **共享session**:为了...

    tomcat集群和负载均衡

    在IT行业中,Tomcat是一个...总的来说,Tomcat集群和负载均衡的实现涉及多个层面的配置和优化,需要对网络基础、Web服务器和Java应用服务器有深入理解。通过合理的配置和管理,可以构建出一个强大而可靠的Web服务系统。

    实现Apache,Tomcat集群和负载均衡

    【Apache和Tomcat集群与负载均衡】...通过以上步骤,你可以构建一个完整的Apache和Tomcat集群,实现负载均衡和会话复制,提升系统的稳定性和性能。在实际生产环境中,还需要考虑故障恢复、安全性、监控等更复杂的问题。

    轻松实现Apache,Tomcat集群和负载均衡

    本篇文章将深入探讨如何轻松实现Apache与Tomcat的集群和负载均衡配置。 首先,了解集群的基本概念。集群是指通过将多台服务器组成一个整体,对外提供服务,这样可以分散单一服务器的压力,提高系统的可用性。在...

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

    session共享则是一个关键问题,因为用户会话数据需要在各个Tomcat实例之间同步,以确保用户在集群中的任何节点上都能保持登录状态和应用状态的一致性。 Apache Server 2.2是一款广泛应用的开源HTTP服务器,它支持...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    总之,“Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo”是一个实践性强的教学资源,它涵盖了Web服务集群中的关键技术和最佳实践,对于学习和提升系统架构能力非常有帮助。通过深入理解和实践这个Demo,...

    apache,tomcat负载均衡和session复制

    当我们谈论"Apache,tomcat负载均衡和session复制"时,这意味着我们要探讨如何在多台服务器之间分配负载,并确保用户会话的无缝迁移和一致性。 **负载均衡**是解决高并发、高可用性问题的重要策略。它通过将来自...

    Nginx.tomcat.memcached负载均衡和session共享.rar

    综上所述,"Nginx.tomcat.memcached负载均衡和session共享.rar"这个压缩包内容可能包含详细的配置示例、教程或者案例分析,旨在帮助开发者实现高效的Web应用架构,确保在多服务器环境下的用户体验和系统性能。...

    Nginx+tomcat配置集群负载均衡

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"**Nginx+Tomcat配置集群负载均衡**"就是实现这一目标的一种常见方案。Nginx是一款高性能的反向代理服务器,常用于处理静态资源和进行负载均衡;Tomcat则是...

    Apache负载均衡 Tomcat6的集群和session的复制

    本篇将深入探讨Apache如何实现负载均衡,以及Tomcat集群和session复制的相关知识。 首先,Apache的负载均衡主要通过模块mod_proxy来实现。这个模块能够将客户端的HTTP请求转发到不同的后端服务器,从而达到负载均衡...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo2

    总的来说,通过Windows上的Nginx和Tomcat集群实现负载均衡与Session共享,可以提高Web服务的可靠性、扩展性和用户体验。这个Demo2可能是一个实践案例,用于演示如何在实际环境中设置这样的架构。务必根据自己的需求...

    Apache+Tomcat实现负载均衡及集群(session同步)--五、session同步(3)使用memcache

    Apache和Tomcat的组合经常被用来搭建这样的架构,特别是在实现负载均衡和集群时。在这个场景中,session同步是一个核心问题,因为用户session数据的正确管理和共享是保持应用程序一致性和用户体验的关键。本文将深入...

    Tomcat 集群负载均衡

    本文将深入探讨如何搭建Tomcat集群并实现负载均衡。 首先,理解“Tomcat集群”是指通过多台独立的Tomcat服务器共同提供服务,以达到提高系统可用性、扩展性和容错性的目的。当一台服务器出现故障时,其他服务器可以...

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    tomcat nginx redis 负载均衡session 共享 所需jar 包

    要实现负载均衡,Nginx通过配置 upstream 模块,将来自客户端的请求分发到Tomcat集群中的各个实例。Nginx可以根据多种策略进行负载均衡,如轮询、最少连接数、IP哈希等,确保服务的高效运行。 接下来是Session共享...

    apache的tomcat负载均衡(两个tomcat)和集群配置(session复制)

    在Tomcat集群中,为了保持用户会话在不同服务器间的同步,需要实现session复制。这可以通过以下方式实现: 1. **集群配置** - 在每个Tomcat实例的`server.xml`中,设置`&lt;Engine&gt;`、`&lt;Host&gt;`和`&lt;Cluster&gt;`元素。...

Global site tag (gtag.js) - Google Analytics