互联网博客
http://internet.blog.enorth.com.cn >复制 >收藏本站
首页 IT技术(99) 音视频(7) 汽车(6) 搜索引擎(2) 我的日志(34) 歌词(12) James(19) 笑话(10) Blog技术(4) 诗词歌赋(7)

北方博客 > 首页 > 实践中整理出tomcat集群和负载均衡 -- 安装JK2
Google
3上一篇: Apache HTTP Server Version 2.2 文档 下一篇: 一个Flash调色工具4
[IT技术]实践中整理出tomcat集群和负载均衡 -- 安装JK2
Tags: tomcat jk2 apache

实践中整理出tomcat集群和负载均衡
(一)环境说明
(1)服务器有4台,一台安装apache,三台安装tomcat
(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2
(3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4
(二)安装过程
(1)在三台要安装tomcat的服务器上先安装jdk
(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径
(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动
(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为7080/8888/9999
修改位置为tomcat的安装目录下的conf/server.xml
修改前的配置为
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
修改后的配置为
    <Connector port="7080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
依次修改每个tomcat的监听端口(7080/8888/9999)

(5)分别测试每个tomcat的启动是否正常
http://192.168.0.1:7080
http://192.168.0.2:8888
http://192.168.0.4:9999
(三)负载均衡配置过程
(1)在那台要安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:\Program Files\Apache Group\Apache2
(2)安装后测试apache能否正常启动,调试到能够正常启动http://192.168.0.88
(3)下载jk2.0.4后解压缩文件
(4)将解压缩后的目录中的modules目录中的mod_jk2.so文件复制到apache的安装目录下的modules目录中,我的为C:\Program Files\Apache Group\Apache2\modules
(5)修改apache的安装目录中的conf目录的配置文件httpd.conf,在文件中加LoadModule模块配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so
(6)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host). -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
    -->
        
    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Catalina" defaultHost="localhost">
修改后
    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host). -->

    <!-- You should set jvmRoute to support load-balancing via AJP ie :-->
    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">        
    
        
    <!-- Define the top level container in our container hierarchy
    <Engine name="Catalina" defaultHost="localhost">
    -->
将其中的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"

(7)然后重启三个tomcat,调试能够正常启动。
(8)在apache的安装目录中的conf目录下创建文件workers2.propertie,写入文件内容如下

# fine the communication channel
[channel.socket:192.168.0.1:8009]
info=Ajp13 forwarding over socket
#配置第一个服务器
tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名称一致
debug=0
lb_factor=1 #负载平衡因子,数字越大请求被分配的几率越高

# Define the communication channel
[channel.socket:192.168.0.2:8009]
info=Ajp13 forwarding over socket
tomcatId=tomcat2
debug=0
lb_factor=1

# Define the communication channel
[channel.socket:192.168.0.4:8009]
info=Ajp13 forwarding over socket
tomcatId=tomcat3
debug=0
lb_factor=1

[status:]
info=Status worker, displays runtime information.  

[uri:/jkstatus.jsp]
info=Display status information and checks the config file for changes.
group=status:

[uri:/*]
info=Map the whole webapp
debug=0
(9)在三个tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为TomcatDemo,在三个应用目录中建立相同 WEB-INF目录和页面index.jsp,index.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>
(10)重启apache服务器和三个tomcat服务器,到此负载 均衡已配置完成。测试负载均衡先测试apache,访问http://192.168.0.88/jkstatus.jsp
能否正常访问,并查询其中的内容,有三个tomcat的相关配置信息和负载说明,访问http://192.168.0.88/TomcatDemo/index.jsp看能够运行,
能运行,则已建立负载均衡。
(四)tomcat集群配置
(1)负载均衡配置的条件下配置tomcat集群
(2)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
        <!--
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true"
                 notifyListenersOnReplication="true">

            <Membership
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastAddr="228.0.0.4"
                mcastPort="45564"
                mcastFrequency="500"
                mcastDropTime="3000"/>

            <Receiver
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

            <Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"
                ackTimeout="5000"/>

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                  
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                      tempDir="/tmp/war-temp/"
                      deployDir="/tmp/war-deploy/"
                      watchDir="/tmp/war-listen/"
                      watchEnabled="false"/>
                      
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
        </Cluster>
        -->  
修改后
        <!-- modify by whh -->
        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 useDirtyFlag="true"
                 notifyListenersOnReplication="true">

            <Membership
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastAddr="228.0.0.4"
                mcastPort="45564"
                mcastFrequency="500"
                mcastDropTime="3000"/>

            <Receiver
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4001"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

            <Sender
                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                replicationMode="pooled"
                ackTimeout="5000"/>

            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                  
            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                      tempDir="/tmp/war-temp/"
                      deployDir="/tmp/war-deploy/"
                      watchDir="/tmp/war-listen/"
                      watchEnabled="false"/>
                      
            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
        </Cluster>
       <!-- modify by whh -->      
将集群配置选项的注释放开即可,如上。
(3)重启三个tomcat。到此tomcat的集群已配置完成。

 

(五)应用配置
对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的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>TomcatDemo</display-name>
</web-app>
配置后
<?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>TomcatDemo</display-name>
   <distributable/>
</web-app>

问:tomcat集群是怎么处理session的阿

答:在tomcat做集群之后,每个tomcat之间自动根据tomcat的配置文件中的参数进行session复制,
对于一个客户端对说,只要是同一个IP,那它每次上传的sessionID就是一样的,



字体:
引用地址 http://internet.blog.enorth.com.cn/article/46986.shtml


allenzz7 | 2006-04-06 15:08


发表评论
 
昵称
主页
标题
内容
算式的解
看不清校验算式?
 



 


公告

抗震救灾

众志成城

站内搜索

最新日志

linux 中文显示乱码解决办法
国足欢迎你
A780的快捷键图标设置
Jfreechart中画双Y坐标的折线图
在dwr的回调函数中传递多个参数
Lemon Tree
去掉jsessionid
Windows media encoder及其SDK编程说明
保留weblogic中jsp编译后生成的java文件
行为艺术家扮“房奴”抗议房产商(图)
DWR 调用返回值方法
民间节油“秘笈” “节油王”道出节油六高招
开车十五年心得!真真实实的26条教训!
ChannelSocket INFO: connection timeout reached
杭州干部徐新贤死了都要爱!
创业前请回答这些问题
Linux下让编译安装的Apache自动启动
IllegalStateException: getOutputStream() 异常的解决方案
LINUX下配置系统环境变量
Servlet图像处理 X11错误解决方法
解决winxp搜索不到文件中的某个字或词组的问题
夜的第七章
Linux下两种自动启动Tomcat的方法
使用mod_usertrack跟踪用户
apache2.0 prefork和worker模块性能调优

网友评论

Re:Apache-WebLogic plugin插件的安装
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个简单的DWR例子
Re:一个女人的十年 [录音+文字]
Re:一组照片
Re:一组照片
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:apache2.0 prefork和worker模块性能调优
Re:蒋捷《虞美人·少年听雨歌楼上》
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]

我的链接

妮妮的世界
小宝成长日记
汽车维修、保养专业站

CSS2中文手册
SpringFramework中文论坛
以前的事 现在的事 将来的事
DynamicDrive
CSDN 金·评·没|YanHui's blog
tomcat 5.0 文档
sixsun的blog
王育琨专栏
西安信息资源网
[埃里克森]的Blog



flashplayer.cn

Apache HTTP Server Version 2.2 文档
天津一汽
Tortoise Cvs Homepage
天津博客
Java开源大全
OpenSymphony
Java视线论坛

网友留言

<写留言>
我们的感觉好比一个十年的女人
你的博客做得很棒
认识你好高兴
其实我也是学计算机的
你好,朋友!
你是不是搞程序的?
交朋识有
祝你新年快乐!
经常关注你的blog,希望有机会认识一下!
元旦快乐

站内统计

日志总数:200
今日访问:566
访问总数:1143866
评论总数:324
留言总数:14

存档

2008年01月(1)
2007年12月(3)
2007年11月(2)
2007年10月(1)
2007年08月(2)
2007年07月(1)
2007年06月(3)
2007年05月(2)
2007年04月(5)
2007年03月(2)
2007年01月(2)
2006年12月(3)
2006年11月(1)
2006年09月(5)
2006年08月(2)
2006年07月(8)
2006年06月(7)
2006年05月(9)
2006年04月(13)
2006年03月(30)
2006年02月(23)
2006年01月(9)
2005年12月(12)
2005年11月(23)
2005年10月(23)
2005年09月(2)

控制台入口

用户名
密 码