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 -xvf httpd-2.2.29.tar.gz 解压压缩包。
3.安装。切换到httpd-2.2.29解压目录,依次执行以下命令。(将apache-httpd安装在/app/httpd/下)
./configure --prefix=/app/httpd/
make
make install
4.测试启动。切换到httpd-2.2.29安装目录,启动服务。
cd /app/httpd/bin/
./apachectl start
如果没有提示错误或使用下面命令显示一系列进程,表示安装成功。
ps -ef|grep httpd


三、安装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 -xvf apache-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:
<Server port="8005" shutdown="SHUTDOWN" debug="0">
改为
<Server port="10001" shutdown="SHUTDOWN" debug="0">


<Connector port="80"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      debug="0" connectionTimeout="20000"
      disableUploadTimeout="true" URIEncoding="GBK"/>
改为 <Connector port="10002"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      debug="0" connectionTimeout="20000"
      disableUploadTimeout="true" URIEncoding="GBK"/>


<Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
改为
<Connector port="10003" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />


<Engine name="Catalina" defaultHost="localhost" >
改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">


<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
去掉注释


tomcat2:
<Server port="8005" shutdown="SHUTDOWN" debug="0">
改为
<Server port="11001" shutdown="SHUTDOWN" debug="0">


<Connector port="80"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      debug="0" connectionTimeout="20000"
      disableUploadTimeout="true" URIEncoding="GBK"/>
改为 <Connector port="11002"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      debug="0" connectionTimeout="20000"
      disableUploadTimeout="true" URIEncoding="GBK"/>


<Connector port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />
改为
<Connector port="11003" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />


<Engine name="Catalina" defaultHost="localhost" >
改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">


<Cluster className="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已经被占用,可以该为其他端口。
Listen 80
#如果Directory中是Deny from all ,改为Allow from all
<Directory "/app/httpd/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
</Directory>
#加入文件mod_jk.conf,虽然这些配置可以直接配置在httpd.conf中,但还是单独拿出来比较明朗。
include conf/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 ########################
# Load mod_jk module
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.x.so




# Where to find workers.properties
JkWorkersFile conf/workers.properties




# Where to put jk logs
JkLogFile logs/mod_jk.log




# Set the jk log level [debug/error/info]
JkLogLevel info




# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "




# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories




# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"


JkAutoAlias /export/home/tomcat/tomcat_vcmplat/webapps


# Send JSPs for context / to worker named loadBalancer
#JkMount /*.jsp loadBalancer
#JkMount /*.do* loadBalancer
JkMountFile conf/urimap.properties


###################### end mod_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


################## end workers.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


################## end urimap.properties ##################


五.重启apache-httpd
/app/httpd/bin/apachectl stop
/app/httpd/bin/apachectl start


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复制成功。


<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>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="test.jsp" method="POST">

   名称:<input type=text size=20 name="dataName">

    <br>

   值:<input type=text size=20 name="dataValue">

    <br>

   <input type=submit>

  </form>

</body>

</html

猜你喜欢

转载自zengshaotao.iteye.com/blog/2168757