您的位置:首页 > 运维架构 > Tomcat

Centos5.4下利用apache做tomcat集群并负载均衡

2013-11-06 16:28 411 查看
文章为本人参考网上资料亲自配置成功后整理缩写,期间遇到问题的各种解决办法网上都能百度得到。最后让我困扰很久的是Centos居然自带httpd导致我配置的apache不能正常工作,删除即可。文章中apache和tomcat链接的方式为mod_jk

系统版本:Linux Centos5.4_32位
软件列表:1.httpd2.2.25
2.JDK 1.6
3.Tomcat6.0.7
4. tomcat-connectors-1.2.37-src.tar.gz
安装前必读:请确保卸载系统自带JDK和httpd再进行安装(亲自安装时未发现Centos自带httpd导致配置完成后访问测试没放映一直提示404 File Not Found,后来发现是Centos自带有httpd,我安装的软件没有正常工作,卸载后重新配置,成功。)

一、安装jdk

1、卸载openjdk

查看目前系統的jdk: rpm -qa | grep jdk(我这里找到的是:java-1.6.0-openjdk-1.6.0.0-1.43.1.10.6.el6_2.i686),如果找不到可以用rpm
-qa | grep gcj
移出系统自带的jdk: yum -y removejava-1.6.0-openjdk-1.6.0.0-1.43.1.10.6.el6_2.i686,如图所示:
2、安装sun jdk
下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

由于我下载的是jdk-6u45-linux-i586.bin所以将文件拷贝到想要安装的目录执行 ./jdk-6u45-linux-i586.bin就会自动安装
3、配置环境

vi /etc/profile打开profile文件,在profile文件的末尾加上

1. JAVA_HOME=/usr/jdk1.6.0
2. PATH=$JAVA_HOME/bin:$PATH
3. CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4. export JAVA_HOME
5. export PATH
6. export CLASSPATH

保存并关闭profile文件,执行source /etc/profile命令让修改生效(不执行这个命令直接重新启动系统也可以)

这样jdk就安装成功了。

测试一下是否安装成功:执行java -version,得到如下结果说明安装成功

1. [root@localhost ~]# java -version
2. java version "1.6.0_45"
3. Java(TM) SE Runtime Environment (build1.6.0_45-b06)
4. Java HotSpot(TM) Server VM (build 20.45-b01,mixed mode)

二、安装httpd

下载地址:http://httpd.apache.org/download.cgi

卸载Centos自带Http
1、[root@localhost etc]# rpm -qa|grep httpd,查看与httpd相关软件包。
httpd-2.2.3-11.el5_2.CentOS.4
2、然后删除httpd:
[root@localhostetc]# rpm -e httpd
出现问题:
error: Faileddependencies:
httpd >=2.2.0 is needed by (installed) gnome-user-share-0.10-6.el5.i386
3、还有一个相关的软件包没有删除,清除之,即:
[root@localhostetc]# rpm -e gnome-user-share
4、再删除httpd
[root@localhostetc]# rpm -e httpd
#可以使用参数–nodeps的意思就是不管各个程序包间的依赖关系。
[root@localhostetc]#rpm -e –nodeps httpd //这样不需要删除gnome-user-share了.

---------------------------------------------开始安装apache-------------------------------------------
安装httpd:
1.解压httpd
tar xvfz httpd-2.2.25.tar.gz 2.安装httpd
#cd /home/ httpd-2.2.25
#./configure --prefix=/usr/local/apache --enable-module=so(注:参数prefix定义apache的安装路径) #make
#make install 3.配置httpd
#vi /usr/local/apache/conf/httpd.conf 将Listen 80 修改为Listen <Your IP>:80 将ServerName 修改为ServerName <HOST-NAME>:80 在DirectoryIndex中添加 index.jsp 保存退出
--------------------apache 安装配置完成---------------
------------------- 整合apache和tomcat ----------------
1.解压jakarta-tomcat-connectors-1.2.37-src.tar.tar
#tar xzvf jakarta-tomcat-connectors-1.2.37-src.tar.gz
2.打开jakarta-tomcat-connectors-1.2.37-src/jk/native
#cd jakarta-tomcat-connectors-1.2.37-src/jk/native
3.修改buildconf.sh权限
#chmod 755 buildconf.sh
4.安装
#./buildconf.sh
#./configure --with-apxs=/usr/local/apache/bin/apxs
#make
#make install
安装成功后会在apache的modules文件夹下找到mod_jk.so文件
5.配置httpd.conf
#vi /usr/local/apache/conf/httpd.conf
在文件最末尾加上如下语句
LoadModulejk_module modules/mod_jk.so
JkWorkersFileconf/workers.properties
JkLogLevel info
JkMount /*.jspcontroller

7.在apache的conf目录下新建workers.properties
内容如下:
worker.list =controller,tomcat1,tomcat2 #server列表
#========tomcat1========
worker.tomcat1.port=6009 #ajp13端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=192.168.40.221 #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor= 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=7009 #ajp13端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=192.168.40.221 #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor= 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1

三、安装配置tomcat

Tomcat为免安装版,拷贝后解压即可使用,此处略过。

配置tomcat的conf文件夹下server.xml

修改如下:

1.修改端口

对于tomcat配置主要集中在conf/server.xml文件上。首先,鉴于测试是在同一机器上运行两个tomcat实例,因此,要对server.xml中配置的所有端口进行修改,避免端口被占用,一种简单而稳妥的修改方法是将该文件中出现的所有端口号按一种简单的规则统一进行改动,比如在原端口号基础上统一加1000或减1000。基于这个原则,apache-tomcat-6.0.33-1的连接端口修改为:6080,apache-tomcat-6.0.33-2的连接端口修改为:7080,其他端口配置同样依照该原则。

2.开启tomcat集群支持

同样是在conf/server.xml文件里,进行两处改动:

改动1:为<Engine>设置jvmRoute

实际上,在server.xml里就有一段现成的带jvmRoute的<Engine>配置,我们可以参考这段配置为<Engine/>加个jvmRoute就可以了,对于jvmRoute的取值要特别注意:其值必须于后面要提到的mod_jk的workers.properties文件中结点名相一致!由于那个文件中结点名为tomcat1和tomcat2,因此,此处我们必须设定jvmRoute的值为这两个值之一。关于这一点在tomcat官方关于Apache Tomcat Connector的文档http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
也有明确提及。jvmRoute值会出现在由该结点创建的session id中,例如:在非集群环境下,一个sessionid可能是 “xxxxxxxxx” 的格式,而在集群环境下,如果当前结点的jvmRtomat1oute被配置为tomcat1,那由该结点生成的sessionid将变成“xxxxxxxxx.tomat1”格式,而mod_jk正是依赖于这个节点后缀实现sticky session的,也就是把所有后缀是tomat1的请求都发送给tomat1结点进行处理。

改动2:在<Engine/>中添加关于集群的配置

在tomcat官方关于tomcat集群配置的文档:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html中,有一份默认配置:

1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
2. channelSendOptions="8">
3.
4. <Manager className="org.apache.catalina.ha.session.DeltaManager"
5. expireSessionsOnShutdown="false"
6. notifyListenersOnReplication="true"/>
7.
8. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
9. <Membership className="org.apache.catalina.tribes.membership.McastService"
10. address="228.0.0.4"
11. port="45564"
12. frequency="500"
13. dropTime="3000"/>
14. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
15. address="auto"
16. port="4000"
17. autoBind="100"
18. selectorTimeout="5000"
19. maxThreads="6"/>
20.
21. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
22. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
23. </Sender>
24. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
25. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
26. </Channel>
27.
28. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
29. filter=""/>
30. <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
31.
32. <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
33. tempDir="/tmp/war-temp/"
34. deployDir="/tmp/war-deploy/"
35. watchDir="/tmp/war-listen/"
36. watchEnabled="false"/>
37.
38. <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
39. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
40. </Cluster>

如果两个tomcat是部署在同一台机器上的话要注意修改端口号,还有16行的4000端口号,不能重复。

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

需要session复制的应用需要在应用程序的web.xml中添加节点<distributable/>,如下:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">

<display-name>TomcatDemo</display-name>

<distributable/>

</web-app>

--------------------------------------------到处配置完成,测试------------------------------------------
四、测试
新建文件夹test,在test下新建test2.jsp,内容如下:

<%@ pagecontentType="text/html; charset=GBK" %>
<%@ pageimport="java.util.*" %>
<html><head><title>ClusterApp Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr()+ " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " +session.getId()+"<br>");
// 如果有新的 Session属性设置
String dataName =request.getParameter("dataName");
if (dataName != null &&dataName.length() > 0) {
String dataValue =request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
System.out.println("============================");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " +value+"<br>");
System.out.println( name + " =" + value);
}
%>
<form action="test2.jsp"method="POST">
名称:<inputtype=text size=20 name="dataName">
<br>
值:<inputtype=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

在test文件夹下新建WEB-INF文件夹并在该文件夹下新建web.xml,内容如下即可:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">

<display-name>TomcatDemo</display-name>

<distributable/>

</web-app>

将test 分别放在测试的tomcat webapps文件夹下。

访问:xxxxx/test/test.jsp

文章参考:/article/1404482.html
另附相关配置文件 下载地址: http://download.csdn.net/detail/cy104204/6512075
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: