/ 中存储网

CentOS 6.4 Linux系统下Apache+Tomcat服务器集群详细配置过程

2013-09-18 14:47:58 来源:中存储网

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

所搭配环境为centos6.4

本文是采用的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文件。

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 = "" >

<% 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,与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="" shutdown="SHUTDOWN">

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

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

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

<!-- Define an AJP 1.3 Connector on port  -->

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

TC6_A 中修改后内容如下:

<!-- Define an AJP 1.3 Connector on port  -->

<Connector port = " " protocol = "AJP/1.3" redirectPort = " 10043 " />

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

注意:

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

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

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

redirectPort = "" />

TC6_A 中修改后内容如下:

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

redirectPort = "" />

提示:此步骤目的是修改 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 = "">

<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 = ""

frequency = ""

dropTime = ""/>

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

address = "auto"

port = ""

autoBind = ""

selectorTimeout = ""

maxThreads = "" />

<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个位置。

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=       #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor =     #server的加权比重,值越高,分得的请求越多

#========tomcat2========

worker.tomcat2.port=       #ajp13 端口号,在tomcat下server.xml配置,默认8009

worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor =     #server的加权比重,值越高,分得的请求越多

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balance_workers=tomcat1,tomcat2   #指定分担请求的tomcat,旧版本中的balanced_workers,已不再推荐使用!

worker.controller.sticky_session= #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的日志,可看出集群是否生效。