关于小猫的那点事:Linux+Apache2.4+tomcat集群

1. 所需软件

此次配置的集群是基于Red Head Linux 5.5的操作系统。把所有所需软件拷贝到新建的/usr/local/softs目录中,所需软件清单如下:

软件名称下载地址
jdk-7u9-linux-i586http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html
tomcat-6.0.36http://apache.etoak.com/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.zip
apache 2.4.3http://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.37http://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

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
[root@localhost etc]# vi profile
[root@localhost etc]# source profile

3). 检查环境变量是否设置成功:

[root@localhost etc]# echo $JAVA_HOME
/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 

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 


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 

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 local]# cd apache/bin
[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 

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

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
<!-- 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
对于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中配置一样
<!--
<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

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中配置的参数对应
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>注释掉,并添下以下内容。
<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>

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
■ 验证负载均衡:
在不同的浏览器中访问页面,可以看到,访问同一连接被平均分配到不同的tomcat中
■ 验证session共享:
访问地址,如果显示tomca1分配的页面,此时把tomcat1停掉,刷新连接,可以看到跳转到tomcat2中他配的页面了,且sessionid前半段标识一样,且在第一个页面中添加的数据在刷新时还生效,证明session共享成功。
 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值