bingoideas

轻叩枝头结,默数桃花开
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

apache+tomcat配置负载均衡

Posted on 2009-06-03 22:57  bingoideas  阅读(1311)  评论(0编辑  收藏  举报

 

1.

相关的软件

JDKjdk-1_5_0_05-windows-i586-p.exe

Apacheapache_2.2.11-win32-x86-no_ssl.msi

Tomcatapache-tomcat-5.5.27(绿色).zip

Mod_jkmod_jk-1.2.27-httpd-2.2.10.so

2.1

安装JDK,Tomcat,Apache

配置环境变量

JAVA_HOMEC:"Program Files"Java"jdk1.5.0_05JDK的安装目录)

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 端口号,在tomcatserver.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

#设置用于负载均衡的serversession可否共享 有不少文章说设置为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, tomcat2server.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>