Apache+Tomcat集群(LINUX)
前提条件:
linux服务器,有网络;
服务器已经安装了jdk1.6或者更高版本,并且在已经配置好了环境变量JAVA_HOME、JRE_HOME、PATH等。
一、下载apache-httpd
下载地址:http://httpd.apache.org/或者http://httpd.apache.org/download.cgi
本教程选择httpd-2.2.29,因此下载了httpd-2.2.29.tar.gz
二、安装apache-httpd
1.上传。将httpd-2.2.29.tar.gz上传到linux服务器。
2.解压。tar-xvfhttpd-2.2.29.tar.gz解压压缩包。
3.安装。切换到httpd-2.2.29解压目录,依次执行以下命令。(将apache-httpd安装在/app/httpd/下)
./configure--prefix=/app/httpd/
make
makeinstall
4.测试启动。切换到httpd-2.2.29安装目录,启动服务。
cd/app/httpd/bin/
./apachectlstart
如果没有提示错误或使用下面命令显示一系列进程,表示安装成功。
ps-ef|grephttpd
三、安装tomcat
1.下载tomcat。下载地址:http://tomcat.apache.org/。本教程下载的是apache-tomcat-6.0.39.tar.gz。将下载的tomcat压缩包上传到linux服务器。
2.安装tomcat。将apache-tomcat-6.0.39.tar.gz解压到/app/tomcat/下,apache-tomcat-6.0.39重命名为tomcat1,然后拷贝一份,命名为tomcat2。
tar-xvfapache-tomcat-6.0.39.tar.gz-C/app/tomcat/
mv/app/tomcat/apache-tomcat-6.0.39/app/tomcat/tomcat1
cp/app/tomcat/tomcat1/app/tomcat/tomcat2
3.修改配置。
修改端口号和tomcat名,修改conf下的server.xml
tomcat1:
<Serverport="8005"shutdown="SHUTDOWN"debug="0">
改为
<Serverport="10001"shutdown="SHUTDOWN"debug="0">
<Connectorport="80"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"
disableUploadTimeout="true"URIEncoding="GBK"/>
改为<Connectorport="10002"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"
disableUploadTimeout="true"URIEncoding="GBK"/>
<Connectorport="8009"enableLookups="false"redirectPort="8443"debug="0"protocol="AJP/1.3"/>
改为
<Connectorport="10003"enableLookups="false"redirectPort="8443"debug="0"protocol="AJP/1.3"/>
<Enginename="Catalina"defaultHost="localhost">
改为
<Enginename="Catalina"defaultHost="localhost"jvmRoute="tomcat1">
<Clusterclassname="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
去掉注释
tomcat2:
<Serverport="8005"shutdown="SHUTDOWN"debug="0">
改为
<Serverport="11001"shutdown="SHUTDOWN"debug="0">
<Connectorport="80"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"
disableUploadTimeout="true"URIEncoding="GBK"/>
改为<Connectorport="11002"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
debug="0"connectionTimeout="20000"
disableUploadTimeout="true"URIEncoding="GBK"/>
<Connectorport="8009"enableLookups="false"redirectPort="8443"debug="0"protocol="AJP/1.3"/>
改为
<Connectorport="11003"enableLookups="false"redirectPort="8443"debug="0"protocol="AJP/1.3"/>
<Enginename="Catalina"defaultHost="localhost">
改为
<Enginename="Catalina"defaultHost="localhost"jvmRoute="tomcat2">
<Clusterclassname="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
去掉注释
修改完成后可以启动tomcat测试端口是否可用。
四、apache-httpd配置
1.下载mod_jk.so。下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/。选择linux/目录下的对应的mod_jk.so。
例如本教程使用的是httpd-2.2.29,64位的linux,选择的是linux/jk-1.2.31/x86_64/mod_jk-1.2.31-httpd-2.2.x.so
2.将下载的mod_jk-1.2.31-httpd-2.2.x.so拷贝至/app/httpd/modules/下。
3.修改/app/httpd/conf/httpd.conf。
#监听端口,改为80,如果80已经被占用,可以该为其他端口。
Listen80
#如果Directory中是Denyfromall,改为Allowfromall
<Directory"/app/httpd/cgi-bin">
AllowOverrideNone
OptionsNone
Orderallow,deny
Allowfromall
</Directory>
#加入文件mod_jk.conf,虽然这些配置可以直接配置在httpd.conf中,但还是单独拿出来比较明朗。
includeconf/mod_jk.conf
4.创建文件mod_jk.conf
touch/app/httpd/conf/mod_jk.conf
vi/app/httpd/conf/mod_jk.conf
在文件中添加一下内容,注意mod_jk.so文件名使用自己下载的文件。本教程使用的是mod_jk-1.2.31-httpd-2.2.x.so
#####################mod_jk.conf########################
#Loadmod_jkmodule
LoadModulejk_modulemodules/mod_jk-1.2.31-httpd-2.2.x.so
#Wheretofindworkers.properties
JkWorkersFileconf/workers.properties
#Wheretoputjklogs
JkLogFilelogs/mod_jk.log
#Setthejkloglevel[debug/error/info]
JkLogLevelinfo
#Selectthelogformat
JkLogStampFormat"[%a%b%d%H:%M:%S%Y]"
#JkOptionsindicatetosendSSLKEYSIZE,
JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories
#JkRequestLogFormatsettherequestformat
JkRequestLogFormat"%w%V%T"
JkAutoAlias/export/home/tomcat/tomcat_vcmplat/webapps
#SendJSPsforcontext/toworkernamedloadBalancer
#JkMount/*.jsploadBalancer
#JkMount/*.do*loadBalancer
JkMountFileconf/urimap.properties
######################endmod_jk.conf####################
5.创建workers.properties
touch/app/httpd/conf/workers.properties
vi/app/httpd/conf/workers.properties
在文件中添加一下内容。
#####################workers.properties########################
#server
worker.list=loadBalancer
#========tomcat1========
worker.tomcat1.port=10003
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#========tomcat2========
worker.tomcat2.port=11003
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#========loadBalancer,负载均衡控制器========
worker.loadBalancer.type=lb
worker.loadBalancer.balanced_workers=tomcat1,tomcat2
#会话粘性,如果为true或1,一个用户在一个Tomcat中建立了会话后则此后这个用户的所有操做都由这个Tomcat服务器承担
worker.loadBalancer.sticky_session=false
#worker.loadBalancer.sticky_session为true时才有效
#如果sticky_session_force为true也就是强制会话与当前Tomcat关联,那么会报500错误,如果设为false则会转到另外的Tomcat服务器
#worker.loadBalancer.sticky_session_force=1
#worker.loadBalancer.sticky_session=1
##################endworkers.properties##################
6.创建urimap.properties
touch/app/httpd/conf/urimap.properties
vi/app/httpd/conf/urimap.properties
在文件中添加一下内容。/*是对所有请求处理
#####################urimap.properties########################
/*=loadBalancer
!/*.gif=loadBalancer
!/*.jpg=loadBalancer
!/*.png=loadBalancer
!/*.css=loadBalancer
!/*.js=loadBalancer
!/*.htm=loadBalancer
!/*.html=loadBalancer
!/*.mid=loadBalancer
!/*.xml=loadBalancer
!/*.txt=loadBalancer
!/*.mp3=loadBalancer
##################endurimap.properties##################
五.重启apache-httpd
/app/httpd/bin/apachectlstop
/app/httpd/bin/apachectlstart
1.输入http://121.40.120.56:80/查看是否能够正常访问(其中121.40.120.56为服务器ip)。
2.用MyEclipse新建一个web项目Test,在WebRoot下添加test.jsp,内容如下。web.xml中添加<distributable/>。然后将此项目部署到tomcat1和tomcat2下,重启tomcat1和tomcat2,
输入http://121.40.120.56:80/Test/test.jsp
http://121.40.120.56:10002/Test/test.jsp
http://121.40.120.56:11002/Test/test.jsp
查看不同tomcat下的sessionId是否相同,如果相同,说明session复制成功。
<%@pagecontentType="text/html;charset=GBK"%>
<%@pageimport="java.util.*"%>
<html><head><title>Test</title></head>
<body>
ServerInfo:
<%
out.println(request.getLocalAddr()+":"+request.getLocalPort()+"<br>");%>
<%
out.println("<br>ID"+session.getId()+"<br>");
//如果有新的Session属性设置
StringdataName=request.getParameter("dataName");
if(dataName!=null&&dataName.length()>0){
StringdataValue=request.getParameter("dataValue");
session.setAttribute(dataName,dataValue);
}
out.println("<b>Session列表</b><br>");
System.out.println("============================");
Enumeratione=session.getAttributeNames();
while(e.hasMoreElements()){
Stringname=(String)e.nextElement();
Stringvalue=session.getAttribute(name).toString();
out.println(name+"="+value+"<br>");
System.out.println(name+"="+value);
}
%>
<formaction="test.jsp"method="POST">
名称:<inputtype=textsize=20name="dataName">
<br>
值:<inputtype=textsize=20name="dataValue">
<br>
<inputtype=submit>
</form>
</body>
</html