我的环境:centos6.4
使用软件:(apache相关)apr-1.5.1.tar.gz,apr-util-1.5.4.tar.gz,pcre-8.36.tar.gz,httpd-2.2.29.tar.gz
(tomcat相关)jre-7u71-linux-i586.tar.gz,apache-tomcat-7.0.57.tar.gz (测试session)testsession.war
下载地址:http://pan.baidu.com/s/1ntupCA9
装apache
安装apache需要apr,apr-util,pcre组件
安装apr
解压:tar -zxvf apr-1.5.1.tar.gz
cd apr-1.5.1
./configure
make && make install
安装apr-util
tar -zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --with-apr=/usr/loca/apr
make && make install
安装pcre
tar -zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure
make && makeinstall
安装apache
tar -zxvfhttpd-2.2.29.tar.gz
cd httpd-2.2.29
./configure --prefix=/usr/local/httpd --enable-mods-shared='proxy proxy_ajp proxy_balancer'
make && make install
②配置tomcat
配置jre 环境
解压 tar -zxvf jre-7u71-linux-i586.tar.gz
将jre文件夹放到 、/usr/local 下
mv jre1.7.0_71/ /usr/local/jre1.7
解压tomcat
tar -zxvf apache-tomcat-7.0.57.tar.gz
mv apache-tomcat-7.0.57 /usr/local/tomcat701
为tomcat配置jre环境 cd /usr/local/tocmat701/bin
vi startup.sh 再第二行添加 export JRE_HOME=/usr/local/jre1.7
保存,退出 同理,在bin目录下的其他.sh结尾文件也加上这一句
启动tomcat :/usr/local/tomcat701/bin/startup.sh
/usr/local/tomcat701/bin/catalina.shstart
关闭tomcat:/usr/local/tomcat701/bin/shutdown.sh
/usr/local/tomcat701/bin/catalina.shstop
启动tomcat 浏览器访问http://ip:8080 出现tomcat首页页面 即配置成功
此时问题可能有: 访问不到(关闭防火墙试试。 service iptables stop)
查看tomcat 运行日志: /usr/local/tomcat701/bin/catalina.shstart ;tailf /usr/local/tomcat701/logs/catalina.out
再复制一个tomcat cp -R /usr/local/tomcat701 /usr/local/tomcat702
修改tomcat的配置文件, 先说明一下tomcat 的目录结构
bin :主要存放tomcat启动或关闭 的文件
conf:存放tomcat的配置文件
lib:存放tomcat所需的jar文件
logs:存放tomcat运行日志文件
temp:存放一些临时文件
webapps:项目部署文件
work:项目部署之后缓存文件
conf/server.xml tomcat运行时的主要配置文件 因为是在同一台机器上做测试 ,所以两个tomcat不能使用同一个端口,主要修改下修改其中一个tomcat端口号
vi /usr/local/tomcat701/conf/server.xml
<Connector port=8080 protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
8080端口为tomcat服务 http 协议运行端口 更改此端口为8081
8443端口为tomcat服务 https 协议时的端口,配置https时会使用到此端口。为避免重复端口, 可更改为8444
<Connector port="8009" protocol="AJP/1.3"redirectPort=8443" />
8009 为tomcat服务ajp 端口,可更改为8010
8443 与上面端口保持一致,更改为8444
<Server port="8005 shutdown="SHUTDOWN">
8005 为tomcat服务关闭时端口,可更改为8006端口。
更改完成后 保存退出。
测试: 分别在浏览器中 输入 http://ip:8080 http://ip:8081 有tomcat首页出现。即成功。
③配置负载均衡
配置apache, 修改apache 配置文件 vi /usr/local/httpd/conf/httpd.conf
修改ServerName ServerName 127.0.0.1:80
在httpd.conf文件末尾加上
ProxyRequests Off #关闭代理请求
ProxyPass / balancer://myCluster/
<Proxy balancer://myCluster/>
BalancerMember ajp://localhost:8009 route=Tomcat1 #负载均衡tomcat1的访问地址 localhost为本地。
BalancerMember ajp://localhost:8010 route=Tomcat2 #负载均衡tomcat2的访问地址 localhost为本地。
</Proxy>
保存退出。
重启apache 服务 /usr/local/httpd/bin/httpd -krestart
配置tomcat
分别配置两个tomcat的server.xml文件
修改Engine 标签 添加 jvmRoute = "Tomcat1" <Engine name = "Standalone" defaultHost ="localhost" jvmRoute = "Tomcat1">
如图:
注意:此处的jvmRoute ="Tomcat1" Tomcat1 对应apache配置文件httpd.conf文件中的 BalancerMember ajp://localhost:8009 route=Tomcat1 其中此处localhost:8009中的8009也为tomcat的ajp 服务端口。
同理,修改另外一个tomcat 配置文件,修改为 <Engine name = "Standalone" defaultHost ="localhost" jvmRoute = "Tomcat2"> 此tomcat的ajp端口为8010
修改完毕后
将testsession.war 文件放到两个 toncat目录/webapps 文件夹下
分别重启两个tomcat服务。
/usr/local/tomcat701/bin/catalina.sh stop
/usr/local/tomcat701/bin/catalina.sh start
/usr/local/tomcat702/bin/catalina.sh stop
/usr/local/tomcat702/bin/catalina.sh start
测试 浏览器输入 http://ip/testsession/ 分别刷新页面,会发现是在两个tomcat上轮询,即成功。
如图:
配置session共享
主要参考了tomcat官网的配置:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
分别修改tomcat配置文件server.xml 在Engine 标签下添加 官网上的配置推荐
<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>
保存,退出。
分别重启两个tomcat
测试: 浏览器输入 http://ip/testsession/ 分别刷新页面,发现id值不变,tomcat1,tomcat2切换显示,即session共享成功。
此阶段遇到的问题:
重启tomcat 访问应用 提示503错误
修改配置文件中的address 和 hosts文件
vi /etc/hosts
添加如下:
192.168.1.65 localhost
说明:192.168.1.65为我的ip地址 改为你的ip地址
修改tomcat 的server.xml文件
<ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"
<spanstyle="color:#ff0000;">address="auto"</span>
port="5000"
selectorTimeout="100"
maxThreads="6"/>
address="auto" 改为 <spanstyle="font-family: Arial, Helvetica,sans-serif;">address="192.168.1.65" 本机的ip地址</span>
再次重启tomcat 即可。
另外需要注意的是 所部署的应用 web.xml 文件中需添加 <distributable/> 支持session 共享
另外 所使用的测试文件是网上很多测试session用的例子
index.jsp
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App 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="test2.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>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<distributable/>
</web-app>