1.相关的软件 JDK:jdk-1_5_0_05-windows-i586-p.exe Apache:apache_2.2.11-win32-x86-no_ssl.msi Tomcat:apache-tomcat-5.5.27(绿色).zip Mod_jk:mod_jk-1.2.27-httpd-2.2.10.so 2.1 安装JDK,Tomcat,Apache 配置环境变量 JAVA_HOME:C:"Program Files"Java"jdk1.5.0_05(JDK的安装目录) mod_jk配置文件 将mod_jk-1.2.27-httpd-2.2.10.so放到E:"Program Files"Apache Software Foundation"Apache2.2"modules目录下 2.2 修改Apache配置文件http.conf 在文件最后加上下面一句: include conf/mod_jk.conf 2.3 http.conf 同目录下新建mod_jk.conf文件 内容如下 ### 加载 mod_jk 模块 LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so ### 配置 mod_jk JkWorkersFile conf/workers.properties #加载集群中的workers JkMountFile conf/uriworkermap.properties #加载workers的请求处理分配文件 JkLogFile logs/mod_jk.log #指定jk的日志输出文件 JkLogLevel warn #指定日志级别 2.4 在http.conf同目录下新建 workers.properties文件,内容如下 # worker列表 worker.list=controller, status #第一个server的配置,server名为s1 #ajp13 端口号,在tomcat下server.xml配置,默认8009 worker.s1.port=7009 #tomcat的主机地址,如不为本机,请填写ip地址 worker.s1.host=localhost worker.s1.type=ajp13 #server的加权比重,值越高,分得的请求越多 worker.s1.lbfactor=1 #第二个server的配置,server名为s2 worker.s2.port=9009 worker.s2.host=localhost worker.s2.type=ajp13 worker.s2.lbfactor=1 #server名为controller,用于负载均衡 worker.controller.type=lb worker.retries=3 #重试次数 #指定分担请求的server列表,用逗号分隔 worker.controller.balanced_workers=s1,s2 #设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,但是我是设置为0才可以的 worker.controller.sticky_session=0 #worker.controller.sticky_session_force=1 worker.status.type=status 2.5 在http.conf同目录下新建 uriworkermap.properties文件,内容如下 /*=controller #所有请求都由controller这个server处理 /jkstatus=status #所有包含jkstatus请求的都由status这个server处理 !/*.gif=controller #所有以.gif结尾的请求都不由controller这个server处理,以下几个都是一样的意思 !/*.jpg=controller !/*.png=controller !/*.css=controller !/*.js=controller !/*.htm=controller !/*.html=controller 2.6 修改tomcat1,tomcat2的配置文件server.xml如果你是水平集群,即在不同电脑上安装tomcat,tomcat的安装数量为一个,可以不必修改tomcat配置文件.我这里是在同一台电脑上安装两个tomcat,实现的是垂直集群方式,所以必须修改其中一个的设置,以避免端口冲突 (1)修改关闭Tomcat的监听端口8005 Tomcat1: <Server port="7005" shutdown="SHUTDOWN"> Tomcat1: <Server port="9005" shutdown="SHUTDOWN"> (2)修改http服务端口号8080 Tomcat1: <Connector port="7080" maxHttpHeaderSize="8192" maxThreads="500" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/> Tomcat2: <Connector port="9080" maxHttpHeaderSize="8192" maxThreads="500" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" /> (3)修改AJP端口号8009 Tomcat1: <Connector port="7009" enableLookups="false" redirectPort="7443" protocol="AJP/1.3" URIEncoding="GBK" /> Tomcat1: <Connector port="9009" enableLookups="false" redirectPort="9443" protocol="AJP/1.3" URIEncoding="GBK"/> 注:前面 useBodyEncodingForURI="true" 和 URIEncoding="GBK" 是用来处理URL GET时乱码问题 (4)文件目录映射 在文件底部添加静态文件目录: <Context path="/files" docBase="D:"ide"files" reloadable="true" debug="0" /> </Host> </Engine> </Service> </Server> 3 配置集群 只配置负载均衡还不行,还要session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat, 集群内的tomcat都有相同的session。 3.1 修改tomcat1, tomcat2的server.xml (1)启用集群部分配置 即对<Cluster>节点的在注释符删掉,并将修改tcpListenPort端口4001,以避免与tomcat冲突,当然,如果是两台电脑,是不用改端口的,去掉注释符即可 Tomcat1: tcpListenPort="4002" Tomcat2: tcpListenPort="4003" (2)配置引擎 为 Tomcat1和 Tomcat2 增加 jvmRoute Tomcat1: <Engine name="Standalone" defaultHost="localhost" jvmRoute="s1"> <!-- Define the top level container in our container hierarchy --> <!-- <Engine name="Catalina" defaultHost="localhost" >--> Tomcat2: <Engine name="Standalone" defaultHost="localhost" jvmRoute="s2"> <!-- Define the top level container in our container hierarchy --> <!-- <Engine name="Catalina" defaultHost="localhost">-->
3.2 配置Session复制 在需要集群的web应用程序的web.xml中加上属性,表明该应用可多应用分流处理,能进行Session的复制 #注意:在你的应用的web.xml加入 <distributable/> 即可,如下 <?xml version="1.0" encoding="UTF-8"?> <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>campus</display-name> <distributable/> <filter> 最后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.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> |
Apache+tomcat配置负载均衡
最新推荐文章于 2024-04-09 03:50:51 发布