前言:网络上好多人copy翻来的资料,都不正确,我花了一晚的时间zheng'li
环境:
系统名称 | 数量 |
windows 2003 Enterprise Edition sp2 | 1 |
Apache:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi | 1 |
Tomcat:apache-tomcat-6.0.35-windows-x86.zip | 2 |
mod_jk.so:tomcat-connectors-1.2.35-windows-i386-httpd-2.2.x.zip | 1 |
JDK | 1 |
术语说明
术语 | 说明 |
%Apache% | Apache安装目录 |
%Tomcat1% | Tomcat1安装目录 |
%Tomcat2% | Tomcat2安装目录 |
环境的安装
第一:安装windows系统、JDk(此处掠过)
第二:安装Apache
1、下载地址:http://labs.mop.com/apache-mirror//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi
2、下载完成后,双击安装
a、点击【Next】按钮
b、ServerName填写“localhost:8889”
c、邮箱填写localhost@163.com
d、安装路径为“D:\Program Files\Apache Software Foundation\Apache2.2”
e、一直next,直指完成。
第三:安装Tomcat
a、下载绿色版,下载地址:http://www.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35-windows-x86.zip
b、分别解压到“D:\apache-tomcat-6.0.35_1”以及“D:\apache-tomcat-6.0.35_2”目录下
第四:安装mod_jk.so
b、下载完成后,把“mod_jk.so”解压到“%Apache%\modules”
负载均衡以及集群的配置
第一:Apache配置
a、打开目录“%Apache%\conf”,打开文件“httpd.conf”,修改监听端口Listen 8889,如下图所示
b、在httpd.conf文件末尾,增加mod_jk.conf的配置说明“Include conf/mod_jk.conf”,如下图所示
c、在目录“%Apache%\conf”下创建“mod_jk.conf”文件,文件内容如下:
#加载mod_jk Module
LoadModule jk_module modules/mod_jk.so
# 配置 mod_jk
#加载集群中的workers
JkWorkersFile conf/workers.properties
#加载workers的请求处理分配文件
JkMountFile conf/uriworkermap.properties
#指定jk的日志输出文件
JkLogFile logs/mod_jk.log
#指定日志级别
JkLogLevel warn
#指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控制器名
JkMount /* controller
d、在目录“%Apache%\conf”下创建“workers.properties”文件,文件内容如下(网上的配置第一句一般写“worker.list=controller, tomcat1,tomcat2”,这样子会报错的,因为work.list指定的是web服务器,应该按照我下面的写法):
#server 列表
worker.list=controller, status
#======== tomcat-6.0.35-1========
worker.tomcat1.port=7771 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1 #server的加权比重,值越高,分得的请求越多
#======== tomcat2========
worker.tomcat2.port=7772 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balance_workers=tomcat1,tomcat2 #指定分担请求的tomcat
#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
worker.controller.sticky_session=False
worker.status.type=status
e、在目录“%Apache%\conf”下创建“uriworkermap.properties”文件,文件内容如下
#所有请求都由controller这个server处理
/*=controller
#所有包含jkstatus请求的都由status这个 server处理
#/jkstatus=status
#这里的"!”是“非”的意思。
!/*.gif=controller
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
!/*.htm=controller
!/*.html=controller
第二:Tomcat1配置
a、打开“%tomcat1%\conf\server.xml”,修改相关端口
端口类型 | 默认 | 新值 |
SHUTDOWN | 8005 | 9991 |
Connector protocol="HTTP/1.1" | 8080 | 8881 |
Connector protocol="AJP/1.3" | 8009 | 7771 |
b、开启Engine节点,修改jvmRoute属性,设置为“tomcat1”,这个tomcat1对应于“%Apache%\conf\workers.properties"中的tomcat1
c、开启集群配置,找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" /> ,去掉注释
第三:Tomcat2配置
a、打开“%tomcat2%\conf\server.xml”,修改相关端口
端口类型 | 默认 | 新值 |
SHUTDOWN | 8005 | 9992 |
Connector protocol="HTTP/1.1" | 8080 | 8882 |
Connector protocol="AJP/1.3" | 8009 | 7772 |
b、开启Engine节点,修改jvmRoute属性,设置为“tomcat2”,这个tomcat2对应于“%Apache%\conf\workers.properties"中的tomcat2
c、开启集群配置,找到<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" /> ,去掉注释
测试运行
第一:创建测试项目
a、在“%tomcat1%\webapps”新建一个目录“Test”
b、创建文件“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> SessionID " + session.getId()+"<br>"); // 如果有新的 Session 属性设置
System.out.println("<br> SessionID " + 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>
c、新建WEB-INF目录,WEB-INF下新建web.xml,内容如下
<web-app xmlns=" http://java.sun.com/xml/ns/j2ee" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>TomcatDemo</display-name>
<distributable/>
</web-app>注意:在你的应用的web.xml加入 <distributable/> 即可
第二:启动服务
第三:运行
a、在浏览器上输入“http://localhost:8889/Test/test.jsp”
b、输入名称、值,然后点击【Submit Query】按钮
c、如果在session 列表中出现你刚才输入的值,恭喜你,负载均衡以及集群已成功了