**Apache : httpd.conf 配置
step1: 打开以下注解
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_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
step2:
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
Include conf/extra/httpd-vhosts.conf
在文件的最下面加入:用于集群
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:10001 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:10002 loadfactor=1 route=jvm2
</proxy>
step3: conf/extra/httpd-vhosts.conf 配置
修改<VirtualHost *:80>为:
<VirtualHost *:80>
ServerAdmin
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
</VirtualHost>
**Tomcat :
step1 : 配置各tomcat server.xml
1)保证各启动和关闭端口不一致
2)配置engine [用于集群]
分别配置为:jvm1、jvm2的名字与httpd.conf 中相关
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
3)配置 AJP Connector :apache和tomcat链接的关键
将server.xml中的缺省配置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改成与port的值与apache中的文件httpd.conf中<proxy balancer://cluster></proxy>之间配置的均衡器成员的端口一致,一一对应
如: jvm1为10001 如: jvm2为10002
4)<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
**Web.xml :
step1: 在<web-app>节点下加入<distributable />
【重要但可选】:在tomcat的server.xml中配置
1. 如果要使用线程池,
把 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> 注释打开
配置 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool" />
2. tomcat只通过apache访问的话,注掉,如下
<!-- <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/> -->
【备注】: 此后想多增加一台tomcat集群,只要做以下几点:
1. 在<proxy balancer://cluster> 添加一项
2. 修改 tomcat的server.xml 即可
3. 在此tomcat的应用下的web.xml 添加:<distributable />
再奉送一段jsp测试代码:用于验证ssession问题与均衡规则
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>Cluster App Test</title>
</head>
<body>
Server Info:
<%
out.println(request.getLocalName() + " : " + 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="index.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>
---------------------------------------------------------------------------------------------
附录:说明
ProxyRequests Off 表示启用反向代理,必须开启;
ProxyPass为代理转发的Url,即将所有访问/的请求转发到群集balancer://cluster
BalancerMember为群集的成员,即群集服务器1或2,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember
loadfactor=1 即为均衡规则的权重
stickysession=jsessionid -- 用于处理session发送问题
step1: 打开以下注解
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_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
step2:
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
Include conf/extra/httpd-vhosts.conf
在文件的最下面加入:用于集群
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:10001 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:10002 loadfactor=1 route=jvm2
</proxy>
step3: conf/extra/httpd-vhosts.conf 配置
修改<VirtualHost *:80>为:
<VirtualHost *:80>
ServerAdmin
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
</VirtualHost>
**Tomcat :
step1 : 配置各tomcat server.xml
1)保证各启动和关闭端口不一致
2)配置engine [用于集群]
分别配置为:jvm1、jvm2的名字与httpd.conf 中相关
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
3)配置 AJP Connector :apache和tomcat链接的关键
将server.xml中的缺省配置
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
改成与port的值与apache中的文件httpd.conf中<proxy balancer://cluster></proxy>之间配置的均衡器成员的端口一致,一一对应
如: jvm1为10001 如: jvm2为10002
4)<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
**Web.xml :
step1: 在<web-app>节点下加入<distributable />
【重要但可选】:在tomcat的server.xml中配置
1. 如果要使用线程池,
把 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> 注释打开
配置 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool" />
2. tomcat只通过apache访问的话,注掉,如下
<!-- <Connector connectionTimeout="20000" port="8088" protocol="HTTP/1.1" redirectPort="8443"/> -->
【备注】: 此后想多增加一台tomcat集群,只要做以下几点:
1. 在<proxy balancer://cluster> 添加一项
2. 修改 tomcat的server.xml 即可
3. 在此tomcat的应用下的web.xml 添加:<distributable />
再奉送一段jsp测试代码:用于验证ssession问题与均衡规则
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>Cluster App Test</title>
</head>
<body>
Server Info:
<%
out.println(request.getLocalName() + " : " + 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="index.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>
---------------------------------------------------------------------------------------------
附录:说明
ProxyRequests Off 表示启用反向代理,必须开启;
ProxyPass为代理转发的Url,即将所有访问/的请求转发到群集balancer://cluster
BalancerMember为群集的成员,即群集服务器1或2,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember
loadfactor=1 即为均衡规则的权重
stickysession=jsessionid -- 用于处理session发送问题