实验环境:
系统 :centos6.4
Apache 172.16.4.7
Tomcat1 172.16.4.5 jdk-7u9-linux-x64.rpm apache-tomcat-7.0.42.tar.gz
Tomcat2 172.16.4.11 jdk-7u9-linux-x64.rpm apache-tomcat-7.0.42.tar.gz
一、在后端服务器上安装 tomcat、jdk
1、安装jdk
#rmp -ivh jdk-7u9-linux-x64.rpm
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
#. /etc/profile.d/java.sh
# java -version
2、安装部署tomcat
# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv apache-tomcat-7.0.42 tomcat
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
#. /etc/profile.d/tomcat.sh
3、为Tomcat提供SysV脚本
# vim /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
# export CATALINA_OPTS="-Xms128m -Xmx256m"
exec $CATALINA_HOME/bin/catalina.sh $*
#chmod +x /etc/init.d/tomcat
# chkconfig --add tomcat
#service tomcat start
二、修改配置文件
1、修改修改配置/usr/local/tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1" #修改端口
connectionTimeout="20000"
redirectPort="8443" />
找到host添加
<Engine name="Catalina" defaultHost="www.test.com"jvmRoute="TomcatA">
<Host name="www.test.com" appBase="/tocat/app1"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="/tomcat/app1" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="test_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
#vim tomcat-users.xml 加用户
-->
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<role rolename="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
# mkdir /tomcat/app1 -pv
2、添加测试文件 index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">TomcatA </font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
#service tomcat stop
#service tomcat start
3、测试一下
4、配置另外一台tomcat服务,和前面配置的tomcatA相同,只需要修改特定的选项
# vim /usr/local/tomcat/conf/server.xml
找到host添加
<Engine name="Catalina" defaultHost="www.test.com"jvmRoute="TomcatA">
其他的和前面配置相同
5、添加测试文件
# mkdir /tomcat/app1 -pv
#vim index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color="blue">TomcatB </font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
三、安装配置apache代理单台tomcat服务
1、编译安装 参考博客http://qidian510.blog.51cto.com/7319882/1282663
首先我们要安装apr和apr-util
下载地址http://apr.apache.org/和http://apr.apache.org/
(1) 编译安装apr
# tar xf apr-1.4.6.tar.bz2
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make && make install
(2) 编译安装apr-util
# tar xf apr-util-1.5.2.tar.bz2
# cd apr-util-1.5.2
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install
编译安装apache
# yum install -y pcre-devel openssl-devel
#tar xf httpd-2.4.6.tar.bz2
#cd httpd-2.4.6
--enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm --enable-slotmem-plain --enable-watchdog
# make && make install
2、配置服务
# vim /etc/rc.d/init.d/httpd
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
给其执行权限,添加服务并且设定为自动运行
#chmod +x /etc/rc.d/init.d/httpd
#chkconfig --add httpd
#chkconfig httpd on
# vim /usr/local/apache/conf/httpd.conf
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #启用模块
在最后添加
ProxyVia Off
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
Require all granted
</Proxy>
ProxyPass / ajp://172.16.4.5:8009/
ProxyPassReverse / ajp://172.16.4.5:8009/
<Location / >
Require all granted
</Location>
如上apache相关指令说明:
ProxyPreserveHost {On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址。如果需要反向代理中支持虚拟主机,则开启此项。
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via:。默认为Off,即不启用此功能;On表示每个请求和响应报文均添加Via:;Full表示每个Via:行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via:都会被移除。
ProxyRequests {On|Off}:是否开启apache正向代理的功能;启用此项时为了代理http协议必须启用mod_proxy_http模块。同时,如果为apache设置了ProxyPass,则必须将ProxyRequests设置为Off。
ProxyPass [path] !|url [key=value key=value ...]]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径。使用此指令时必须将ProxyRequests的值设置为Off
ProxyPassReverse:用于让apache调整HTTP重定向响应报文中的Location、Content-Location及URI标签所对应的URL,在反向代理环境中必须使用此指令避免重定向报文绕过proxy服务器。
注:和ajp结合比http性能好
~
# service httpd configtest
# service httpd start
3、访问测试
四、配置代理多台tomcat实现负载均衡
1、修改配置文件/usr/local/apache/conf/httpd.conf
前面配置相同,在最后添加
ProxyVia Off
ProxyRequests Off
ProxyPreserveHost Off
<proxy balancer://lbcluster1>
BalancerMember ajp://172.16.4.5:8009/
BalancerMember ajp://172.16.4.11:8009/
</proxy>
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location / >
Require all granted
</Location>
2、配置完成重启服务并测试
#service httpd restart
五、配置代理多台tomcat负载均衡并session保持
1、修改配置文件/etc/httpd/conf.d/mod_proxy.conf
ProxyVia On
ProxyRequests Off
ProxyPreserveHost Off
<Proxy balancer: //lbcluster1 >
BalancerMember http: //172.16.4.5:8080 loadfactor=1
BalancerMember http: //172.16.4.11:8080 loadfactor=1
ProxySet lbmethod=bytraffic
< /Proxy >
<Proxy *>
Order allow,deny
Allow from all
< /Proxy >
ProxyPass / balancer: //lbcluster1/
ProxyPassReverse / balancer: //lbcluster1/
<Location />
Order allow,deny
Allow from all
< /Location >
2.修改tmcat配置
vim /usr/local/tomcat/conf/server.xml
<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= "172.16.4.5" #主机IP地址,也可以使用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 >
注释:以上内容在“<Engine>”标签中添加,对所有主机生效;也可以添加在“<Host>”标签中,对当前主机生效
mkdir /tomcat/app1/WEB-INF #创建"WEB-INF"目录
cp /usr/local/tomcat/conf/web.xml /tomcat/app1/WEB-INF/ #为此网站提供一个"web.xml"文件
vim /tomcat/app1/WEB-INF/web.xml
<web-app xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http: //java .sun.com /xml/ns/javaee
http: //java .sun.com /xml/ns/javaee/web-app_3_0 .xsd"
version= "3.0" >
<distributable/> #添加此行内容
< /web-app >
2、配置完成重启服务并测试
分别重启apache服务和tomcat服务,然后测试验证。