`

tomcat 集群配置

阅读更多
(-)准备环境

(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集群配置...

    apache+tomcat集群配置

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

    Apache+Tomcat集群配置

    Apache+Tomcat集群配置,Apache+Tomcat集群配置,Apache+Tomcat集群配置

    tomcat集群配置 程序以及文档

    当我们需要处理高并发、负载均衡或提高应用可用性时,单个Tomcat实例可能无法满足需求,这时就需要进行Tomcat集群配置。本资料包包含了“tomcat集群配置”的程序及文档,提供了现成的例子,帮助我们理解和实践Tomcat...

    tomcat集群配置文件

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

    tomcat集群配置和配置软件

    **二、Tomcat集群配置步骤** 1. **安装多个Tomcat实例**:首先,你需要在不同的服务器上或同一服务器的不同端口上安装并启动多个Tomcat实例。 2. **配置共享目录**:为确保集群内的节点共享session信息,需要设置...

    Tomcat 集群配置

    【标题】:“Tomcat集群配置”是指在多台服务器上部署和管理多个Tomcat实例,以实现负载均衡、高可用性和容错性。这通常涉及将应用部署在多个Tomcat服务器上,通过一个前端负载均衡器(如Apache HTTP Server或Nginx...

    Apache+Tomcat集群配置续

    Apache+Tomcat集群配置续Apache+Tomcat集群配置续Apache+Tomcat集群配置续Apache+Tomcat集群配置续

    nginx + tomcat 集群配置

    nginx + tomcat 集群配置 负载 nginx 下载地址: http://nginx.org/en/download.html 联合tomcat 实现集群 windows: Nginx.conf 配置 //见文件夹下面的nginx.conf 更改tomcat的配置: 第一处端口...

    Apache和Tomcat集群配置步骤(Apache2.2,Tomcat6.0).

    ### Apache和Tomcat集群配置详解 #### 一、软件准备 在进行Apache和Tomcat集群配置之前,首先需要准备所需的软件资源。 - **Apache 2.2**: - Windows平台: 从官方网站 [http://httpd.apache.org/download.cgi]...

    tomcat集群配置v2

    ### Tomcat集群配置详解 #### 1. 配置方案 在描述中提到了三种配置方案: 1. **使用Apache2.2中的mod_ajp集成Tomcat5.5**:这种方案通过Apache的mod_ajp模块,使Apache能够与Tomcat通过AJP协议通信,从而实现请求...

    Apache + Tomcat集群配置详解

    以下是对Apache与Tomcat集群配置的详细解析: 1. **Apache HTTP Server配置**: - Apache通常作为前端代理服务器,接收来自客户端的HTTP请求,并通过AJP协议将这些请求转发给Tomcat实例。 - 在`httpd.conf`配置...

    redis+tomcat集群配置session共享

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

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

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

    Nginx与Tomcat集群配置 Redis配置

    以下将详细介绍Nginx与Tomcat集群配置以及Redis配置的相关知识点。 ### Nginx的编译与安装 1. **安装编译环境**:在安装Nginx前,需要确保系统已经安装了必要的编译工具,如GCC、Make等。同时,可能还需要安装pcre...

Global site tag (gtag.js) - Google Analytics