您的位置:首页 > 运维架构 > Tomcat

Apache+Tomcat+JK 实现集群、负载均衡

2011-02-18 15:26 726 查看
Apache+Tomcat+JK

实现集群、负载均衡


1.


软件说明


apache_2.2.10-win32-x86-no_ssl.msi

mod_jk-1.2.27-httpd-2.2.10.so

jakarta-tomcat-5.5.9

(注:

windows xp

系统)

2.


配置


一、


负载均衡


1.

安装

apche,tomcat
http://httpd.apache.org/
下载

Apache
http://tomcat.apache.org/
下载

Tomcat
http://tomcat.apache.org/download-connectors.cgi
下载

JK

这里使用的都是

windows

下的版本。

安装

Apache



Tomcat,

将下载的

mod_jk-1.2.27-httpd-2.2.10.so

文件复制到

apache

安装目录

modules

目录



2.

修改

Apache

配置文件



apache

安装目录下

conf

目录中找到

http.conf

,在文件最后加上下面一句:

http.conf


#
指定
mod_jk
配置文件的位置

Include conf/mod_jk.conf



conf

目录中新建

mod_jk.conf

文件,内容如下:

mod_jk.conf


#
加载
mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so

#
指定
workers.properties
文件路径

JkWorkersFile
conf/workers.properties

# url
请求的配置文件路径

JkMountFile conf/uriworkermap.properties

接着在

conf

目录下新建

workers.properties

文件,内容如下:

workers.properties


worker.list=controller # server

列表,分发控制器

注意不要放
tomcat
实例

# Tomcat1
实例配置

这里要和
Tomcat
配置文件
service.xml

jvmRoute
保持一致

worker.tomcat1.port=8009 #ajp13

端口号,在
tomcat

server.xml
配置
,
默认
8009

worker.tomcat1.host=localhost # tomcat

的主机地址,如不为本机,请填写
ip
地址

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1 # server

的加权比重,值越高,分得的请求越多

# Tomcat2
实例配置

worker.tomcat2.port=9009

worker.tomcat2.host=localhost

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

#
负载均衡分发控制器

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2
#

指定分担请求的
tomcat

worker.controller.sticky_session=false
#

关闭
粘性
session(
默认是
true
打开的
)

接着在

conf

目录下新建

uriworkermap.properties

文件,内容如下:

uriworkermap.properties


#
指定那些请求交给
tomcat
处理
,"controller"
为在
workers.propertise
里指定的负载分配控制器

/*.jsp=controller

3.

修改

tomcat

配置文件

修改

tomcat



conf

目录下的

server.xml

文件。如果你在不同电脑上安装

tomcat,tomcat

的安装数量为一个,可以不必修改

tomcat

配置文件,我这里是在同一台电脑上安装两



tomcat

,所以需要更改其中一个的设置打开

tomcat2/conf/server.xml

文件:

4.

编写测试项目

test

test.jsp


<%

System.out.println("===========================");

%>



test

放到

tomcat1,tomcat2



webapps

下的

test

应用中

5.

启动

apache tomcat

进行测试

通过
http://localhost/test/test.jsp
访问,查看
tomcat1
的窗口,可以看到打印了一行

"============"

,再刷新一次,

tomcat2

也打印了一条,再刷新,可以看到请求会被

tomcat1,tomcat2

轮流处理

,

实现了负载均衡

二、


配置集群


只配置负载均衡还不行,还要

session

复制,也就是说其中任何一个

tomcat

的添加



session

,是要同步复制到其它

tomcat



集群内的
tomcat
都有相同的
session


1.

修改

tomcat1, tomcat2



server.xml

将集群部分配置的在注释符删掉

,

并将

tomcat2



4001

端口改为

4002

,以避免与

tomcat

冲突,当然,如果是两台电脑,是不用改端口的,去掉注释符即可



Engine

标签中添加

jvmRoute=’tomcat1’



jvmRoute

名称必须和

worker.properties

中的

tomcat

实例名称一致,不然无法实现

session_stricky(

粘性

session)

。同时还要将

apache/conf/workers.properties

文件中
worker.controller.sticky_session=true

2.

修改测试项目

test

修改

test.jsp



内容如下:

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>");

//
如果有新的 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>

然后在

test

新建

WEB-INF

目录,

WEB-INF

下新建

web.xml,

内容如下:

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>TestDemo</display-name>

<distributable/>


</web-app>

web.xml

配置文件加上

<distributable/>

节点,此配置说明当前

Web

工程处于分布式部署环境。如果不进行这个配置,每次访问页面

tomcat

都会产生一个新的

sessionid

3.

测试



test

应用复制到

tomcat1,tomcat2



webapps

下,重启

apache,tomcat1,tomcat2



输入网址
http://localhost/test/test.jsp
,表单输入
songsp ,
值为
test

session,
提交查询,

Tomcat1
处理请求。如下图:



Tomcat1

服务关闭。在输入

bbbb,aaaaa

提交,由于

Tomcat1

关闭,

Tomcat2

来处理请求,并且

session

同步的。如下图:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: