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的日志,可看出集群是否生效。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。