1. 准备工作
首先下载Tomcat7 和Apache2.4
然后安装Apache,安装完成后在IE中输入localhost访问,如果出现It Works则表示Apache安装好了,然后解压缩到Tomcat1和Tomcat2两个目录中。
分别启动Tomcat1和Tomcat2看是否可以正常启动。
2. 配置Apache2.4
①打开conf/httpd.conf文件,加载以下模块。
#---------------------start------------------------
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.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 slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule speling_module modules/mod_speling.so
LoadModule ssl_module modules/mod_ssl.so
#----------------------end---------------------
② 如果你想看到小猫页面,
<IfModule dir_module>
DirectoryIndex index.html
< /IfModule>
在上面的index.html下面添加index.jsp就可以了
③去掉Include conf/extra/httpd-vhosts.conf的注释标记#。
④在文件末尾加反向代理
ProxyRequests Off
< proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
#BalancerMember ajp://octvoa2.octvision.com status=+H
< /proxy>
使用HTTP和stickysession 参考:
Header add Set-Cookie "ROUTEID=.%{BALANCER_SESSION_STICKY}e; path=/" env=BALANCER_SESSION_STICKY
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember "http://app1.xxxx.com:80" route=jvm1
BalancerMember "http://app2.xxxx.com:80" route=jvm2
</proxy>
ProxyPass "/" "balancer://cluster/" stickysession=JSESSIONID|jsessionid scolonpathdelim=On
⑤修改conf/extra/httpd-vhosts.conf文件。
注释掉所有的dummy-host,添加以下内容,ServerName和ServerAlias修改为appache服务器的域名。
<VirtualHost *:80>
ServerAdmin zengwei.shao@samsung.com
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
< /VirtualHost>
备注:如果需要对应多个端口,可以在httpd.conf中增加监听的端口,并在httpd-vhosts.conf中增加一个VirtualHost上面的内容,并修改端口就可以了。
6).增加apahce的并发数:
window:在httpd.conf 中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。
在httpd-mpm.conf中修改为如下:
<IfModule mpm_winnt_module>
ThreadLimit 12000
ThreadsPerChild 10000
MaxRequestsPerChild 20000
</IfModule>
在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效.
设置MaxKeepAliveRequests 10000
Timeout 20
7).增加网页查看apache服务器状态。
去掉下面前面的#号;
#LoadModule status_module modules/mod_status.so
然后这个里面修改:Include conf/extra/httpd-info.conf 为如下信息:
<Location /server-status>
SetHandler server-status
Require host .xxxx.com
Require ip 127
</Location>
<Location /server-info>
SetHandler server-info
Require host .xxxx.com
Require ip 127
</Location>
可以通过url访问到server-status了,http://ip地址/server-status 或者server-info.
2.配置Tomcat
Tomcat2 的修改conf/server.xml
① <Server port="8005" shutdown="SHUTDOWN">修改为9005
②修改<Service name="Catalina">下的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />中的8080为9080
③<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />修改为9009
④ <Engine name="Catalina" defaultHost="localhost">在末尾加 jvmRoute="jvm2"
同时修改Tomcat1的这个标签为jvmRoute="jvm1"
⑤<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>改为
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
</Cluster>
6).不同的域名共享session<Context path="" docBase="C:\workspace\octv-anren" reloadable="true" sessionCookiePaht="/" sessionCookieDomain=".octanren.com"/>
配置完成之后,启动两个Tomcat测试一下Tomcat是否可以正常启动
如果可以正常启动,则进行下面步骤
在webApps下面添加Test目录,添加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>
创建WEB-INF目录,创建web.xml
?xml version="1.0" encoding="utf-8"?>
< 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"
metadata-complete="true">
<distributable />
</web-app>
最后启动Apache2.4,在页面中输入localhost\test\test.jsp进行测试。
注意:Apache有可能启动不起来,那么解决方式是查看Apache安装目录下的logs目录下的error.log文件,
根据log文件解决可能存在的问题。直到Apache可以正常启动,至此Apache就可以正常启动了。
3.tomcat间共享session
在web.xml中增加<distributable />就可以了。
4.tomcat间同步ehcache.
异常1.浏览器访问错误:
后台对应的错误:
[Tue Jun 27 17:28:30.398777 2017] [proxy_ajp:error] [pid 1836:tid 3412] [client 202.104.106.65:60850] AH00992: ajp_read_header: ajp_ilink_receive failed
[Tue Jun 27 17:28:30.398777 2017] [proxy_ajp:error] [pid 1836:tid 3412] (120006)APR does not understand this error code: [client 202.104.106.65:60850] AH00878: read response failed from 172.16.3.21:6010 (applz1.octvisionland.com)
[Tue Jun 27 17:28:50.884760 2017] [proxy_ajp:error] [pid 1836:tid 3412] [client 202.104.106.65:60850] AH00992: ajp_read_header: ajp_ilink_receive failed
[Tue Jun 27 17:28:50.884760 2017] [proxy_ajp:error] [pid 1836:tid 3412] (120006)APR does not understand this error code: [client 202.104.106.65:60850] AH00878: read response failed from 172.16.3.22:6010 (applz2.octvisionland.com)
处理方式:下面的红色的端口是ajp的端口,不是http访问的端口。
异常1.浏览器访问错误:
异常2 :tomcat服务器运行时间长的Java程序,报错: (OS 10060)由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 : AH01030: ajp_ilink_receive() can't receive header
[Wed Jul 19 17:40:47.756868 2017] [proxy_ajp:error] [pid 3260:tid 3156] (OS 10060)由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 : AH01030: ajp_ilink_receive() can't receive header
解决办法:
<VirtualHost *:80>
ServerName octvoa.octvision.com
ServerAlias octvoa.octvision.com
ProxyTimeout 3000
ProxyPass / balancer://proxy/ stickysession=JSESSIONID timeout=2000 nofailover=On
ProxyPassReverse / balancer://proxy/
ErrorLog "logs/lb-error.log"
CustomLog "logs/lb-access.log" common
</VirtualHost>
异常3:proxy: No protocol handler was valid for the URL错误解决办法
处理方法:
ProxyPass / balancer://mycluster/,后面一定要加“/”,而不是ProxyPass / balancer://mycluster