Linux+Apache+Tomcat集群配置

参考:http://blog.csdn.net/bluishglc/article/details/6867358#

所搭配环境为centos6.4

 

本文是采用的mod_jk的方式搭建的集群环境。

一、安装apache

 

二、安装mod_jk

1.进入下载好的tomcat-connectors-1.2.32-src.tar.gz文件所在目录,执行解压操作:
tar -zxvf tomcat-connectors-1.2.32-src.tar.gz

2.进入解压出的文件夹下的native子目录:
cd tomcat-connectors-1.2.32-src/native

3.进行编译参数配置:
./buildconf.sh

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni

执行这步时,可能会提示未安装各种包如autoconf,按提示安装完后再执行就可以。
4.编译安装:
make
make install

如果成功结束,你可以在/usr/local/apache2/modules/下找到mod_jk.so文件。

三、安装tomcat

1、下载tomcat,可以通过下面的命令下载:

#wget http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz

 

2、解压启动测试:

#tar -zxvf apache-tomcat-6.0.18.tar.gz
#./apache-tomcat-6.0.18/bin/startup.sh

在浏览器中输入:http://localhost:8080,看是否启动正常,若正常进行第三步。

 

3、下面通过一个简单的" Test.jsp "程序进一步验证 Tomcat 是否安装成功。在webapp目录下新建一个项目名称如test,在此目录下新建一个源文件。

新建名称为" Test.jsp "的 Jsp 源文件并在其中输入如下代码。

<%@ page contentType="text/html;charset=GBK"%>
<html>
<head>
<title> Tomcat_ _测试 </title>
</head>
<body>
<font color = "red" size = "20" >
<% out.print( "_ _恭喜您,成功的安装并启动了 Tomcat " ); %>
</font>
</body>
</html>

 

4、重启(命令如下),然后输入:http://localhost:8080/test/Test.jsp 看是否正常。

#./apache-tomcat-6.0.18/bin/shutdown.sh
#./apache-tomcat-6.0.18/bin/startup.sh

 

安装tomcat成功后。

需要修改/conf/server.xml文件。

四、安装tomcat集群配置。

集群里有多个tomcat时,可先搭建一个tomcat,与apache关联配置没有问题了再安装多个tomcat。当然也可以直接安装多个tomcat直接进行配置。

1、安装两个或以上tomcat

#./apache-tomcat-6.0.18/bin/shutdown.sh
#mv apache-tomcat-6.0.18 /usr/local/TC6_A
#cd /usr/local
#cp -a TC6_A TC6_B

提示:进行上述步骤操作的原因是,本案例中集群的各个 Tomcat 服务器实例运行在同一个物理服务器上,因此集群中有几个 Tomcat 实例一般就需要几个 Tomcat 的安装。另外,由于集群中的各个 Tomcat 实例位于同一个物理服务器上的一个操作系统下,因此各个实例占用的各种网络端口不能相同,否则集群中的多个 Tomcat 实例不能同时正常启动,下面的步骤将介绍如何修改 Tomcat 实例需要使用的各个网络端口。

 

2、修改 Tomcat 实例需要使用的各个网络端口

1)找到 server.xml 配置文件中的" Server "配置项目,并进行修改。

<Server port="8005" shutdown="SHUTDOWN">

<Server port="6005" shutdown="SHUTDOWN">

说明:第一行为两个 Tomcat 修改前的情况,第二行为 TC6_A Tomcat 修改后的情况。如果多个tomcat里server的port端口值相同,则只能启动一个tomcat成功。

 

2)找到 server.xml 配置文件中的相应" Connector "配置项目,并进行修改。

  • 修改前内容如下:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port = "8009" protocol = "AJP/1.3" redirectPort = "8443" />

 

  • TC6_A 中修改后内容如下:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port = "6009 " protocol = "AJP/1.3" redirectPort = " 10043 " />

提示:此步骤目的是修改 AJP Connector 端口。

注意:

port 的取值必须要于mod_jk中的workers.properties文件中设置的每个结点名称的port要相对应。

 

3)找到 server.xml 配置文件中的另一个相应" Connector "配置项目,并进行修改。

  • 修改前内容如下:
<Connector port = "8080" protocol = "HTTP/1.1" connectionTimeout = "20000"
 redirectPort = "8443" />

 

  • TC6_A 中修改后内容如下:
<Connector port = "6008" protocol = "HTTP/1.1" connectionTimeout = "20000"
 redirectPort = "10043" />

提示:此步骤目的是修改 HTTP Connector 端口,其中的" 10001 是未来通过浏览器访问集群中各个 Tomcat 实例的 HTTP 端口。

 

4)通过修改 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">
-->
  • TC6_A 中修改后内容如下:
<Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "Tomcat1">

 

提示:注意在修改过程中要注释掉原来 name 为 Catalina 的 Engine 配置项目,将 name 为 Standalone 的 Engine 配置项目的注释去掉并修改jvmRoute 属性。

注意:

jvmRoute 的取值必须要于mod_jk中的workers.properties文件中设置的结点名称相一致。
因为:该值将做为后缀加在每一个由该结点生成的jsessionid后面,而mod_jk正是根据sessionid后面的这个后缀来确定一个请求应由哪一个结点来处理。(这是实现session_sticky的基本保证)

 

5)修改配置文件中的 Cluster 配置项目,对集群的各项参数进行设置

  • 修改前内容如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
  • TC6_A 中修改后内容如下:
<Cluster className = "org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions = "8">

        <Manager className = "org.apache.catalina.ha.session.DeltaManager"

                expireSessionsOnShutdown = "false"

                notifyListenersOnReplication = "true" />

        <Channel className = "org.apache.catalina.tribes.group.GroupChannel" >

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

                        address = "228.0.0.4"

                        port = "45564"

                        frequency = "500"

                        dropTime = "3000"/>

                <Receiver className = "org.apache.catalina.tribes.transport.nio.NioReceiver"

                        address = "auto"

                        port = "4000"

                        autoBind = "100"

                        selectorTimeout = "5000"

                        maxThreads = "6" />

                <Sender className = "org.apache.catalina.tribes.transport.ReplicationTransmitter" >

                        <Transport className = "org.apache.catalina.tribes.transport.nio.PooledParallelSender" />

                </Sender>

                <Interceptor

                        className = "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />

                <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />

        </Channel>

        <Valve className = "org.apache.catalina.ha.tcp.ReplicationValve" filter="" />

        <Valve className = "org.apache.catalina.ha.session.JvmRouteBinderValve" />

        <Deployer className = "org.apache.catalina.ha.deploy.FarmWarDeployer"

                tempDir = "/tmp/war-temp/"

                deployDir = "/tmp/war-deploy/"

                watchDir = "/tmp/war-listen/"

                watchEnabled = "false"/>

        <ClusterListener className = "org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />

        <ClusterListener className = "org.apache.catalina.ha.session.ClusterSessionListener" />

</Cluster>

这份默认配置可以满足大多数应用场景,因此,我们只需要将这份配置复制到<Engine/>中,tomcat的配置就全部完成了。

 

注意:集群里,每个tomcat里port值要不相同。如tomcat1为4000,tomcat2要为4001

提示:上述配置内容主要是对集群中各个 Tomcat 实例间进行通信的方式、端口以及 Session 共享算法的设置。

 

3、多个tomcat里,直接将已设置好的server.xml文件拷贝到新的tomcat中将默认的配置文件替换,再按照上述步骤2,修改各个值。

共需要修改6个位置。

 

五、设置apache集群。

 

1、打开apache安装目录下的conf/httpd.conf文件,在文件最后追加以下内容:

# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Specify jk log file.
JkLogFile /var/log/mod_jk.log
# Specify jk log level [debug/error/info]
JkLogLevel info
# Specify workers.properties, this file tell jk:
# how many nodes and where they are.
JkWorkersFile conf/workers.properties
# Specify which requests should handled by which node.
JkMount /* controller

关于mod_jk配置项的详细内容,可参考:http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

 

2、根据步骤1的设置,JkWorkersFile conf/workers.properties 指明由一个workers.properties文件来描述集群结点的情况。

因此,我们需要创建这个workers.properties文件,并放置于conf文件夹下,这个文件的内容如下:

#所有节点列表,其中controller是一个逻辑结点,负责负载均衡控制,
#如果JkMount中的URL指定给了controller就表示这个请求会被自动散列到某个物理节点上。
#注意:真正负责处理请求的tomcat的名称(这里就是tomcat1,tomcat2)必须于它们在conf/server.xml
#文件中配置的jvmRout的属性值是一致的!
worker.list = controller,tomcat1,tomcat2
 
#========tomcat1========
worker.tomcat1.port=6009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1    #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=7009       #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1    #server的加权比重,值越高,分得的请求越多

#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2   #指定分担请求的tomcat,旧版本中的balanced_workers,已不再推荐使用!
worker.controller.sticky_session=1 #sticky_session为1表示,
#当某一 client的session创建之后,后续由该客户端发起的请求,也就是这个session的所有请求都始终由第一次处理该请求的结点
#负责处理(除非该结点挂掉)

这里的配置文件为2个tomcat里的配置文件,如果是多个则可以类似修改。

若上述配置文件,启动时只有一个tomcat,则搭建的是相当于是apache与一个tomcat的集群。

 

六、集群方式验证。

到第五步结束后,所有配置均已完成,启动两个tomcat和apache后,将某一应用同时部署到两个tomcat中,通过apache访问这个应用,观察tomcat后台打出的日志会发现,请求被随机分配给了两个tomcat交替执行。

1、页面方式验证

重启apache+加一个tomcat。

测试:

1)http://ip:6080/test/test.jsp,查看是否显示正常,若正常说明tomcat1启动是正常的。

2)http://ip/test/test.jsp ,查看是否显示正常,若正常说明apache+tomcat1集群没有问题。

 

重启apache+加二台tomcat。

测试:

1)http://ip:6080/test/test.jsp,查看是否显示正常,若正常说明tomcat1启动是正常的。

2)http://ip:7080/test/test.jsp,查看是否显示正常,若正常说明tomcat2启动是正常的。

3)http://ip/test/test.jsp ,查看是否显示正常,若正常说明apache+2台tomcat集群设置成功。

为验证集群策略,可以将test.jsp页面将当前的tomcat实例名称打印出来。

客户端打开此页面时,查看页面是否会显示不同的tomcat实例名称。

 

2、可以直接查看apache与tomcat的日志,可看出集群是否生效。

Linux+Apache+Tomcat集群配置,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。