1. 所需软件
此次配置的集群是基于Red Head Linux 5.5的操作系统。把所有所需软件拷贝到新建的/usr/local/softs目录中,所需软件清单如下:
软件名称 | 下载地址 |
jdk-7u9-linux-i586 | http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html |
tomcat-6.0.36 | http://apache.etoak.com/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.zip |
apache 2.4.3 | http://httpd.apache.org/download.cgi#apache24 |
apr1.46 apr-util1.51 | http://apr.apache.org/ |
pcre8.31 | http://jaist.dl.sourceforge.net/project/pcre/pcre/8.31/ |
tomcat-connectors-1.2.37 | http://tomcat.apache.org/connectors-doc/ |
[root@localhost softs]# ls
apache-tomcat-6.0.36.zip jdk-7u9-linux-i586.rpm
apr-1.4.6.tar.gz pcre-8.31.zip
apr-util-1.5.1.tar.gz tomcat-connectors-1.2.37-src.tar.gz
httpd-2.4.3.tar.gz
apache-tomcat-6.0.36.zip jdk-7u9-linux-i586.rpm
apr-1.4.6.tar.gz pcre-8.31.zip
apr-util-1.5.1.tar.gz tomcat-connectors-1.2.37-src.tar.gz
httpd-2.4.3.tar.gz
2. 安装JDK
1). 安装JDK:默认安装路径为/usr/java/jdk1.7.0_09
[root@localhost softs]# rpm ivh jdk-7u9-linux-i586.rpm
2). 设置环境变量 :用VI命令或其它工具编辑/etc/profile文件,设置环境变量内容(如下所示),添加完成后执行source命令,让它生效
JAVA_HOME=/usr/java/jdk1.7.0_09
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
[root@localhost etc]# vi profile
[root@localhost etc]# source profile
[root@localhost etc]# source profile
3). 检查环境变量是否设置成功:
[root@localhost etc]# echo $JAVA_HOME
/usr/java/jdk1.7.0_09
/usr/java/jdk1.7.0_09
3. 安装apache依赖环境
安装apache时需要安装依赖的apr、apr-util和pcre,如果没有安装,编译apache时将报错:◎configure: error: APR not found. Please read the documentation.
◎configure: error: APR-util not found. Please read the documentation.
◎configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
如果依赖环境已经有了,可以直接安装apache。
1) 安装apr:解压并进入解压后的目录,执行config命令进行配置。然后用make命令进行编译
[root@localhost softs]# tar -zxvf apr-1.4.6.tar.gz
[root@localhost softs]# cd apr-1.4.6
[root@localhost apr-1.4.6]# configure --prefix=/usr/local/apr
[root@localhost apr-1.4.6]# make && make install
[root@localhost softs]# cd apr-1.4.6
[root@localhost apr-1.4.6]# configure --prefix=/usr/local/apr
[root@localhost apr-1.4.6]# make && make install
2) 安装apr-util
[root@localhost apr-util-1.5.1]# tar -zxvf apr-util-1.5.1.tar.gz
[root@localhost softs]# cd apr-util-1.5.1
[root@localhost apr-util-1.5.1]# configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.5.1]# make && make install
[root@localhost softs]# cd apr-util-1.5.1
[root@localhost apr-util-1.5.1]# configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@localhost apr-util-1.5.1]# make && make install
3) 安装pcre
[root@localhost sfts]# unzip pcre-8.31.zip
[root@localhost sfts]# cd pcre-8.31
[root@localhost pcre-8.31]# configure --prefix=/usr/local/pcre
[root@localhost pcre-8.31]# make && make install
[root@localhost sfts]# cd pcre-8.31
[root@localhost pcre-8.31]# configure --prefix=/usr/local/pcre
[root@localhost pcre-8.31]# make && make install
4. 安装配置apache
[root@localhost softs]# tar -zxvf httpd-2.4.3.tar.gz
[root@localhost softs]# cd httpd-2.4.3
[root@localhost httpd-2.4.3]# configure --prefix=/usr/local/apache --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@localhost httpd-2.4.3]# make && make install
安装完成后可以进行apache的安装目录下的bin目录中,执行apachectl start命令,启动Apache然后在浏览器中输入IP地址,检查是否可以访问,如果能访问证明安装成功,检查完成后,执行apachectl stop命令关闭apache。
[root@localhost softs]# cd httpd-2.4.3
[root@localhost httpd-2.4.3]# configure --prefix=/usr/local/apache --enable-mods-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@localhost httpd-2.4.3]# make && make install
[root@localhost local]# cd apache/bin
[root@localhost bin]# apachectl start
[root@localhost bin]# apachectl stop
[root@localhost bin]# apachectl start
[root@localhost bin]# apachectl stop
5. 安装tomcat-connectors (mod_jk)
[root@localhost softs]# tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
[root@localhost softs]# cd tomcat-connectors-1.2.37-src/native
[root@localhost native]# buildconf.sh
[root@localhost native]# configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni
[root@localhost native]# make && make install
[root@localhost softs]# cd tomcat-connectors-1.2.37-src/native
[root@localhost native]# buildconf.sh
[root@localhost native]# configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=$JAVA_HOME --with-java-platform=2 --enable-jni
[root@localhost native]# make && make install
6. 安装配置tomcat
解压tomcat:进入softs目录,分别解压Tomcat到目录 /usr/local/tomcat1和/usr/local/tomcat2中
[root@localhost local]# unzip apache-tomcat-6.0.36.zip -d ../tomcat1
[root@localhost local]# unzip apache-tomcat-6.0.36.zip -d ../tomcat1
[root@localhost local]# unzip apache-tomcat-6.0.36.zip -d ../tomcat1
7. 配置集群
7.1. 配置tomcat
1) 修改tomcat的server.xml配置文件
■ 更改关闭端口号8005,tomcat1为6005,tomcat2为7005
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port=" 6005" shutdown="SHUTDOWN">
■ 更改访问端口和ajp访问端口,tomcat1为6080、6443、6009、6443,tomcat2为7080、7443、7009、7443
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port=" 6005" shutdown="SHUTDOWN">
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port=" 6080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort=" 6443" />
省略...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port=" 6009" protocol="AJP/1.3" redirectPort=" 6443" />
■ 修改当前Tomcat实例名称,tomcat1为tomcat1,tomcat2为tomcat2
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port=" 6080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort=" 6443" />
省略...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port=" 6009" protocol="AJP/1.3" redirectPort=" 6443" />
对于jvmRoute的取值要特别注意:其值必须于后面要httpd.conf中配置的结点名一样!此处我们配置为tomcat1和tomcat2 关于这一点在tomcat官方关于Apache Tomcat Connector的文档 http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html 也有明确提及。jvmRoute值会出现在由该结点创建的session id中,例如:在非集群环境下,一个sessionid可能是 “xxxxxxxxx” 的格式,而在集群环境下,如果当前结点的jvmRoute被配置为tomcat1,那由该结点生成的sessionid将变成“xxxxxxxxx.tomat1”格式,而mod_jk正是依赖于这个节点后缀实现sticky session的,也就是把所有后缀是tomat1的请求都发送给tomat1结点进行处理。
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
■ 添加session共享配置,在以下代码下面添加session共享配置,两个tomcat中配置一样
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
tomcat官方关于tomcat集群配置的文档,有一段默认配置,添加在上面这段代码的下面,默认配置如下所示:
官方配置文档地说明地址:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
tomcat官方关于tomcat集群配置的文档,有一段默认配置,添加在上面这段代码的下面,默认配置如下所示:
官方配置文档地说明地址:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
<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>
2) 启动tomcat,分别进行tomcat1和tomcat2下的bin目录,修改权限,并执行catalina.sh 看能否正常启动,能否正常访问页面
[root@localhost local]# cd tomcat1/bin/
[root@localhost bin]# chmod 777 *
[root@localhost bin]# catalina.sh run
[root@localhost bin]# chmod 777 *
[root@localhost bin]# catalina.sh run
7.2. 配置apache
1) 进入/usr/local/apache/conf目录,修改httpd.conf文件去掉红色字体配置前面的#号
#LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule dialup_module modules/mod_dialup.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
在文件最后追加如下内容,红色字体部分需与分别与两个tomcat中配置的参数对应
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule dialup_module modules/mod_dialup.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
ProxyRequests Off
ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=off
ProxyPassReverse / balancer://cluster/
<proxy balancer://cluster>
BalancerMember ajp://localhost: 6009 loadfactor=10 route= tomcat1
BalancerMember ajp://localhost: 7009 loadfactor=10 route= tomcat2
</proxy>
2) 进入/usr/local/apache/conf/extra目录,修改httpd-vhosts.conf文件,把里面的默认的<VirtualHost *:80>注释掉,并添下以下内容。
ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=off
ProxyPassReverse / balancer://cluster/
<proxy balancer://cluster>
BalancerMember ajp://localhost: 6009 loadfactor=10 route= tomcat1
BalancerMember ajp://localhost: 7009 loadfactor=10 route= tomcat2
</proxy>
<VirtualHost *:80>
ServerAdmin newideas@foxmail.com
ServerName www.zcode.com.cn
ServerAlias localhost
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
</VirtualHost>
ServerAdmin newideas@foxmail.com
ServerName www.zcode.com.cn
ServerAlias localhost
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
</VirtualHost>
8. 部署Web应用
1) 在两个tomcat部署应用,并在应用的web.xml中添加如下配置<web-app>
省略...
<distributable/>
</web-app>
2) 添加测试页面
tomcat应用中的index.jsp
<%@ page language="java" pageEncoding="GBK"%>
<html>
<head>
<!-- tomcat2中配置为tomcat2 -->
<title>tomcat1</title>
</head>
<body>
<table>
<tr>
<td colspan="2" align="center">
<!-- tomcat2中配置为小猫二号-->
<h1 style="color: red">小猫一号</h1></td>
</tr>
<tr>
<td>
<font color="blue">SessionID:</font></td>
<td><%=session.getId()%></td>
</tr>
</table>
</body>
</html>
3) 启动tomcat和apache
[root@localhost /]# /usr/local/tomcat1/bin/startup.sh run 启动tomcat1
[root@localhost /]# /usr/local/tomcat2/bin/startup.sh run 启动tomcat2
[root@localhost /]# /usr/local/apache/bin/apachectl start 启动apache
■ 验证负载均衡:
[root@localhost /]# /usr/local/tomcat2/bin/startup.sh run 启动tomcat2
[root@localhost /]# /usr/local/apache/bin/apachectl start 启动apache
在不同的浏览器中访问页面,可以看到,访问同一连接被平均分配到不同的tomcat中
■ 验证session共享:
访问地址,如果显示tomca1分配的页面,此时把tomcat1停掉,刷新连接,可以看到跳转到tomcat2中他配的页面了,且sessionid前半段标识一样,且在第一个页面中添加的数据在刷新时还生效,证明session共享成功。
![](https://img-my.csdn.net/uploads/201211/16/1352997840_8814.png)