apache2.2+tomcat6.0.18配置负载均衡
<!-- ><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><!--><div class="Section0">1) 下载apache httpd和apache tomcat,并安装
2) 配置apache
修改conf/httpd.conf文件
去掉以下文本前的注释符#,以便让Apache在启动时自动加载
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
找到 Include conf/extra/httpd-vhosts.conf并去掉前面的#
打开conf/extra/httpd-vhosts.conf,并添加以下内容
ProxyRequests Off
<proxy balancer://capaacluster>
BalancerMember http://127.0.0.1:8080 loadfactor=1 route=jvm1
BalancerMember http://127.0.0.1:9080 loadfactor=1 route=jvm2
ProxySet stickysession=JSESSIONID
ProxySet lbmethod=bybusyness/byrequests/bytraffic
</proxy>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.capaa.com
ServerName 172.16.5.22
ServerAlias www.dummy-host.capaa.com
ProxyPass / balancer://capaacluster/
ProxyPassReverse / balancer://capaacluster/
ErrorLog "logs/172.16.5.22-error.log"
# CustomLog "logs/172.16.5.22-access.log" common
CustomLog "logs/172.16.5.22-access.log" "%{JSESSIONID}C %{BALANCER_SESSION_STICKY}e %{BALANCER_SESSION_ROUTE}e %{BALANCER_WORKER_ROUTE}e %{BALANCER_ROUTE_CHANGED}e %{Set-Cookie}o"
</VirtualHost>
保存,apache配置完毕。并重启apache
3) 配置tomcat
解压tomcat,并复制一份,分别称为t1, 2
分别修改tomcat1和tomcat2的server.xml,使其监听的端口不冲突
找到<Server port="8005" shutdown="SHUTDOWN">,t1不变,把t2改为9005
配置Connector的端口,找到non-SSL HTTP/1.1 Connector,即tomcat单独工作时的默认Connector,保留t1默认配置,在8080端口侦听,
而把t2设置为在9080端口侦听
AJP 1.3 Connector,<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,
这是tomcat接收从Apache过来的ajp连接请求时使用的端口,保留t1默认设置,把t2端口改为9009
找到<Engine name="Catalina" defaultHost="localhost">,去掉这段或改为注释,把上方紧挨的<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">注释符去掉,对于t2,去掉注释符并把jvm1改为jvm2。这里的jvmRoute对应Apache httpd.conf中BalancerMember中配置的route参数
找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,打开注释,这里的配置是为了可以在集群中的所有tomcat节点间共享会话(Session)
4) 测试app
分别在t1和t2的webapp目录下新增一个test app,并新增一个test.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>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session 列表</b>");
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>
修改此test app的web.xml文件,在<web-app>节点下加入<distributable />
访问http://172.16.5.22/test/test.jsp 页面会显示相应的信息,是哪个tomcat处理了请求,当前session中的数据等
--------jessionid无效的问题
关键字: java apache load balance
这是 apache部分的配置
<Proxy balancer://proxy>
BalancerMember ajp://127.0.0.1:8009/ loadfactor=1 route=tomcat1
BalancerMember ajp://127.0.0.1:8010/ loadfactor=1 route=tomcat2
</Proxy>
<VirtualHost *:80>
ServerName www.a.com
ServerAlias www.a.com
ProxyPass / balancer://proxy/ stickysession=JSESSIONID nofailover=On lbmethod=bytraffic
ProxyPassReverse / balancer://proxy/
</VirtualHost>
Server.xml分别是
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
我在两个的ROOT文件夹下都放一个 test.jsp 分别输出不同的标识.
但刷新的时候,就会发现apache把请求分别发给 tomcat1 tomcat2. stickysession失败了. .这是为什么呢??? 哪位帮忙看看...
===========================================
以下为正确配置
<VirtualHost *:80>
ServerName www.a.com
ServerAlias www.a.com
ProxyPass / balancer://proxy/ stickysession=JSESSIONID
ProxyPassReverse / balancer://proxy/
<Proxy balancer://proxy>
BalancerMember http://192.168.1.192:8080/ loadfactor=1 route=tomcat1
BalancerMember http://192.168.1.192:8081/ loadfactor=2 route=tomcat2
</Proxy>
</VirtualHost>
页:
[1]