如何实现Apache2.2+tomcate5.0+mod_jd的负载均衡_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2229 | 回复: 0   主题: 如何实现Apache2.2+tomcate5.0+mod_jd的负载均衡        下一篇 
landy
注册用户
等级:新兵
经验:61
发帖:72
精华:0
注册:2011-12-31
状态:离线
发送短消息息给landy 加好友    发送短消息息给landy 发消息
发表于: IP:您无权察看 2015-3-31 14:06:16 | [全部帖] [楼主帖] 楼主

负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。

现在正在做的这个系统在生产环境上做了负载均衡和双机热备的工作。据说是能够维护系统的稳定性,觉得挺好玩的。今天上午没事  自己尝试着整了一下负载均衡,额··因为对这个仅限于知道是分发请求,多台服务器间切换,保证服务的稳定性,所以搞了大半天才弄出来。

我是在自己机器上运行2个 tomcat 。。。。一个tomcat关闭了···请求仍能得到答复······

1.相关的软件

JDK:jdk_1.6
Apache:apache_2.2.11-win32-x86-no_ssl.msi
Tomcat:tomcat-5.5.27(绿色).zip
Mod_jk:mod_jk-1.2.27-httpd-2.2.10.so
2.1


安装JDK,Tomcat,Apache....配置环境变量。。。。不细说了····

mod_jk配置文件

将mod_jk-1.2.27-httpd-2.2.10.so放到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
#指定jk的日志输出文件
JkLogFile logs/mod_jk.log
#指定日志级别
JkLogLevel info
#日志记录的格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# 请求分发配置,可以配置多项
JkMount /* controller
# 关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。
HostnameLookups Off
2.4


在http.conf同目录下新建 workers.properties文件,内容如下

# worker列表

worker.list=s1, s2,controller

#第一个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

#重试次数
worker.retries=3  
#========controller,负载均衡控制器========
worker.controller.type=lb
#指定分担请求的tomcat
worker.controller.balanced_workers=s1,s2  

#设置用于负载均衡的server的session可否共享 网上大部分文章都是说设置为1 但是我死活就是不能自动分配服务,看到

#有个网友说自己设置为0 可以···我试了一下  。。也是设置为0 ··不知道为什么···
worker.controller.sticky_session=0

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


修改tomcat1,tomcat2的配置文件server.xml如果你是水平集群,即在不同电脑上安装tomcat,tomcat的安装数量为一个,可以不必修改tomcat配置文件.我这里是在同一台电脑上安装两个tomcat,实现的是垂直集群方式,所以必须修改其中一个的设置,以避免端口冲突

(1)修改关闭Tomcat的监听端口8005

Tomcat1:<Server port="7005" shutdown="SHUTDOWN">
Tomcat2:<Server port="9005" shutdown="SHUTDOWN">


(2)修改http服务端口号8080

Tomcat1:
<Connector port="8003" maxHttpHeaderSize="8192" maxThreads="500" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
Tomcat2:
<Connector port="8004" 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" />
Tomcat2:<Connector port="9009" enableLookups="false" redirectPort="9443" protocol="AJP/1.3">


修改后两个tomcate 设置对比·····

 tomcate1      tomcate2
<Server port>         7005           9005
<Connector port>(Http)   8003           8004
<Connector port>(AJP)    7009          9009
<Engine jvmRoute>       s1            s2
<Receiver tcpListenPort>  4002          4003


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>
4.1


最后jsp代码测试  index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Clustor</title>
</head>
<body>
<%
out.println(session.getId());
String name = (String)request.getParameter("name");
String tmp = (String)session.getAttribute("name");
session.setAttribute("name",tmp+" , "+name);
if(name!=null && !name.equalsIgnoreCase("")){
      out.println(session.getAttribute("name"));
}
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
out.println("<hr/>"+basePath);
System.out.println("********"+new Date().toLocaleString()+" : "+basePath+"*******sessionId:"+session.getId()+"*******");
%>
<h1>Clustor1</h1>
<form action="index.jsp" method="get">
<input type="text" name="name" value="conan">
<input type="submit" value="Submit">
</form>
</body>
</html>
4.2
WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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_2_5.xsd">
<display-name>clustor</display-name>
<distributable />
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


将这个简单的工程(test)war包 拷贝到 两个tomcate 下的webapps下面,分别启动两个tomcate

分别访问 http://localhost:8003/test/;http://localhost:8004/test/;均能正常访问。。。。

启动apache2.2 服务,在浏览器里面输入 http://localhost:7003/test/ 回车····(此处因为我apache2.2  httpd.conf 配置的端口不是80 而是自己设置的7003  -->  Listen localhost:7003)

多次访问 观察两个tomcate 的后台 ···

北京联动北方科技有限公司

发现两个tomcate 后台都有打印出信息···说明请求被随机分配到了两台服务器上

负载均衡测试成功。。。。

--转自
北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论