`
阅读更多
(-)准备环境

(1)一台服务器,有一个apache,两个tomcat

(2)Apache2.2.14,tomcat6.0,18

(二)安装过程

(1)将一个tomcat的端口修改为7080

<Connector port="7080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />


    这个连接时AJP连接,负责和其他HTTP服务器建立连接,与其他服务器集成时就需要这个连接。AJP协议时Tomcat与HTTP服务器之间通信定义的协议,能提供较高的通信速度和效率。

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



(三)负载均衡配置

(1)安装apache,输入localhost,测试能否正常启动。

(2)下载jk1.2.30,mod_jk-1.2.30-httpd-2.2.3.so,改名为mod_jk.so,复制到apache的modules下。

(3)修改apache的安装目录中的conf目录的配置文件httpd.conf,在文件中加LoadModule模块配置信息


LoadModule jk_module modules/mod_jk.so

JkWorkersFile conf/workers2.propertie

JkLogFile logs/mod_jk.log

JkLogLevel debug


# 请求分发配置,可以配置多项

JkMount /*.jsp loadbalancer

JkMount /helloapp/* loadbalancer


凡是/*.jsp , /helloapp/*请求都随loadbalancer来转发


(4)修改两个tomcat的server.xml,

<Engine name="Catalina" defaultHost="localhost">改为

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

(5)在apache的conf文件夹下,增加workers2.propertie 文件


# Define 1 real worker using ajp13

worker.list=tomcat1,tomcat2,loadbalancer


# Set properties for tomcat1 (ajp13)

worker.tomcat1.type=ajp13

worker.tomcat1.host=localhost

worker.tomcat1.port=8009

worker.tomcat1.lbfactor=1 #负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如两个节点的权重比为1:1,则为平均分配


# Set properties for tomcat2 (ajp13)

worker.tomcat2.type=ajp13

worker.tomcat2.host=localhost

worker.tomcat2.port=7009

worker.tomcat2.lbfactor=1


#负载平衡器

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat1,tomcat2

worker.loadbalancer.sticky_session=false

worker.loadbalancer.sticky_session_force=false


前两个tomcat分别代表本机的两个tomcat服务器,它们由负载均衡器来调度。另一个loadbalancer,他是负载均衡器,


接下来开启两个tomcat后就,再开启apache,输入http://localhost/index.jsp,就可以看到tomcat的默认页面。


(四)把tomcat和apache集成时,通常tomcat不会接受http请求,所以可以关闭tomcat的HTTP连接器。

(五)将helloApp拷贝到两个tomcta的webapp下,然后不断访问:可以判断每次请求访问谁来执行。

(六)集群管理器


同一个浏览器,访问同一个Web应用时,在同一个会话中,Session ID始终不变。但是,有了两个tomcat以后,就会出现问题。为了解决这个问题,需要配置Tomcat的集群管理器(SimpleTcpCluster)。


这需要修改t1,2的server.xml文件,在engine元素内加入Cluster子元素,使得Tomcat能启用集群管理:

<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"/>
<!—接收端口在各个Tomcat配置中不能重复-->
            <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="15000"
                waitForAck="true"/>
            <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> 


然后分别在t1,2的helloapp应用的web.app文件,加入<distributable/> 元素,表示当Tomcat启动这个元素时,会为他创建由server.xml文件中的cluster元素的manager子元素指定的会话管理器。比如上面的DeltaManager,它能够把每一个服务节点中的会话信息复制到集群系统中的所有其他服务器节点中。


再次不停刷新页面,会看到是同一个session。


注意:

我们分别将两个Tomcat配置文件中的jvmRoute设置为tomcat1、tomcat2,Server节点 端口分别配置为8005和9005,集群Receiver 节点tcpListenPort端口分别配置为4001和4002,Connector节点端口分别配置为8080和9090,AJPConnector端口分别配置为8009和9009。
请注意两个Tomcat配置文件Host节点的域名配置必须一样,server.xml中的jvmRoute名称必须和worker.properties中的tomcat实例名称一致,不然无法实现session_stricky。
如果不想实现粘性session, jvmRoute可以不配制。
如果不想实现session复制,Cluster配制的注释就无需去掉.
  
如果想实现session复制还需配制web.xml
web.xml配置文件加上<distributable/>节点,此配置说明当前Web工程处于分布式部署环境。如果不进行这个配置,每次访问页面tomcat都会产生一个新的sessionid。


1.为了集群系统中,数据都能够在tomcat服务区上正确地复制,应该保证存放在会话范围内的所有属性都实现了Serializable借口。

2.集群中的tomcat服务器之间使用组播的形式来通信。如果tomcta所在的机器上有多个网卡,或者配置了虚拟网卡,有可能导致组播失败,从而复发复制会话。比如,tomcat1已经启动,tomcat2出现信息:

No members activein cluster group

一上信息表明,2没有识别到1,组播失败。这是,应该在cluste的membership的配置中,确保设置了如下bind属性,它用于明确地设置组播绑定地址:

<Membership className="org.apache.catalina.tribes.membership.McastService"

                        bind="127.0.0.1" 

                        address="228.0.0.4"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

3.如果集群规模下,可以用DeltaManager,如果打,应该采用BackupManager管理器。

4.address="228.0.0.4",组播地址,应该确保连接internet,否则无法访问该组播。


5.worker.loadbalancer.sticky_session=false,true表示会话具有粘性。意味着用户和1开始会话,以后用户从浏览器A发出的请求只要处于同一个会话中,负载均衡器就会始终让1来处理请求。这时候,集群不会进行会话复制。默认为false。前者为false,时候,后者的设置没什么影响。如果前者为true,后者也为true时候,表示始终连接。比如1异常终止,那么,服务端会返回500的错误。False的话,就发给2了,有可能不存在会话信息。
分享到:
评论

相关推荐

    tomcat集群配置

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

    tomcat集群部署.

    当我们需要处理高并发、负载均衡等需求时,单个Tomcat服务器可能无法满足,这时就需要进行Tomcat集群部署。下面将详细介绍Tomcat集群部署的相关知识点。 1. **集群的概念**: 集群是一种通过多台服务器协同工作来...

    tomcat集群配置 程序以及文档

    本资料包包含了“tomcat集群配置”的程序及文档,提供了现成的例子,帮助我们理解和实践Tomcat集群的搭建与管理。 首先,我们需要了解Tomcat集群的基本概念。集群是指多个Tomcat实例协同工作,它们共享相同的会话...

    Tomcat集群-负载平衡

    【标题】:Tomcat集群-负载平衡 在Java Web应用开发中,Apache Tomcat作为一款广泛应用的开源Servlet容器,常被用于部署和运行Java EE应用。然而,单一的Tomcat服务器可能无法满足高并发、高可用性和高可扩展性的...

    apache+tomcat集群配置

    Apache + Tomcat 集群配置 Apache + Tomcat 集群配置是指将 Apache 服务器与 Tomcat 服务器集成,以提高服务器的性能和可扩展性。本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器...

    tomcat集群jar包

    在本场景中,我们关注的是“tomcat集群jar包”,这通常涉及到在多个Tomcat实例间分配工作负载以实现高可用性和可扩展性的技术。 集群的概念在分布式系统中非常重要,特别是对于像Tomcat这样的Web服务器。当单个...

    tomcat集群实现session复制

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

    linux配置Tomcat集群

    ### Linux配置Tomcat集群知识点详解 #### 一、概述与目标 在Linux环境下配置Tomcat集群,主要目的是构建一个能够实现水平扩展、具备高可用性、支持负载均衡以及错误恢复能力的服务架构。通过集群的方式,可以提高...

    Tomcat集群与负载均衡

    ### Apache Tomcat 集群与负载均衡 #### 1. 集群相关简介 ##### 1.1 集群 集群是一组通过高速网络互相连接的计算机,它们作为一个整体协同工作,对外呈现出单一系统的特性。客户端与集群交互时,会感觉像在与一个...

    tomcat集群优化详细配置

    【Tomcat集群优化详细配置】 在IT行业中,服务器性能优化是一项关键任务,特别是在高并发、大规模用户访问的场景下。Tomcat,作为广泛使用的Java应用服务器,常常需要通过集群部署来提升系统的可用性和可伸缩性。...

    Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式-课程章节1

    【Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式】 这门课程是针对Java开发者设计的,旨在提升他们的企业级项目架构能力,特别是聚焦于Tomcat集群和Redis分布式缓存的应用。课程内容丰富,适合希望晋升...

    tomcat集群搭建详细步骤

    【Tomcat集群搭建详解】 Tomcat集群是一种将多个Tomcat服务器组织起来,共同提供服务的架构,以实现更高的可用性和可扩展性。集群的主要目的是在负载均衡和错误恢复的基础上,确保服务的连续性和性能。 **1. 集群...

    tomcat集群session共享解决方案

    在分布式系统中,Tomcat集群是一种常见的架构模式,用于提高应用程序的可用性和可扩展性。然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接...

    Tomcat集群部署方案

    【Tomcat集群部署方案】 Apache Tomcat集群部署是提高Web应用程序可伸缩性和高可用性的常见策略。在集群环境中,多个Tomcat实例协同工作,共同处理来自客户端的请求,从而实现负载均衡和故障转移。本方案将详细介绍...

    tomcat集群配置文件

    当我们谈论“tomcat集群配置文件”时,我们指的是将多个Tomcat实例组织成一个集群,以提高应用程序的可用性和可伸缩性。在集群环境中,负载均衡、故障转移和资源共享是关键特性。 首先,要配置Tomcat集群,你需要...

    轻松配置linux Tomcat集群 PDF

    本篇内容将详细探讨如何在Linux环境中配置Tomcat集群,以提高系统的可用性和性能。 一、Linux基础 在开始配置之前,需要对Linux操作系统有一定的了解。熟悉基本的命令行操作,如文件管理、用户权限、网络设置等,这...

    tomcat集群部署方案

    ### Tomcat集群部署方案知识点详解 #### 一、集群概念及特性 **1.1 什么是集群** 集群是由多台独立的计算机通过网络连接组成的集合体,这些计算机共同协作完成任务,对外表现为单一的服务实体。集群的主要目的是...

Global site tag (gtag.js) - Google Analytics