??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩一区二区三区,国产一区二区91,亚洲国产资源http://www.aygfsteel.com/ASONG/articles/83177.html汪松?/dc:creator>汪松?/author>Fri, 24 Nov 2006 01:40:00 GMThttp://www.aygfsteel.com/ASONG/articles/83177.htmlhttp://www.aygfsteel.com/ASONG/comments/83177.htmlhttp://www.aygfsteel.com/ASONG/articles/83177.html#Feedback0http://www.aygfsteel.com/ASONG/comments/commentRss/83177.htmlhttp://www.aygfsteel.com/ASONG/services/trackbacks/83177.html 一、简介:

每个Tomcat worker是一个服务于web server、等待执行servlet的Tomcat实例。例如我们经怋用像Apache之类的web server转发sevlethl位于其后面的一个Tomcatq程Q也是前面所说的workerQ。本文详l介l了如何配置各种cdworker和loadbalanceQƈ说明了各U类型worker的特性和loadbalance配置的原理?br />
二、ؓ什么用Tomcat workersQ?/span>

上文描述了一个非常简单的l构Q事实上能够配置多个Tomcat workers来处理web server转发的servleth。而这样配|的理由不外乎以下几U假想环境:
* 我们在开发环境中发布不同的Tomcat workers为各自不同的应用服务。当然在开发环境中的开发者共享同一个web serverQ但是每个Tomcat worke服务于拥有它的开发者?br />* 我们在不同的Tomcatq程上定义各自的虚拟LQ这样不同的公司可以使用各自的web siteQ从而他们的web site得到了合理的分割?br />* 我们提供负蝲q的web siteQ也意味着同时使用多个Tomcat workersQ而每个Tomcat workerh独立的主机ƈ且在workers之间要分配通过web server转发来的h?br />当然Q这些假x况也许ƈ不能늛使用多个workers的所有状c?br />
三、workers.properties配置说明Q?/span>

定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件。本文将详细解释如何q行配置的:

1.定义Workers列表Q?/b>
定义workers的方法就是在apache的conf目录下编写一个workers.properties文gQ其作为apache的插件来发挥作用?br />定义workers列表的格式:
worker.list =<使用?”分割的worker 名字列表>
例如Q?br />

worker.list= worker1, worker2

当apache启动Ӟworkers.properties作ؓ插g初始化出现在worker.list列表中的workers?br />
2.定义Workers的类型:

每个被命名的worker都应有一些关于其自n的附加信息。这些信息包括了worker的类型和其它相关信息。这里讨论的是JK1.2.5中定义的workerscd?br />定义workercd的格式:
worker . worker名字. type =<workercd>
worker名字的命名最好遵循java的命名规范?br />workercd取g下面的表|
定义一个名为“local”的workerQ其使用ajpv12协议与Tomcat q程通讯Q?br />

worker.local.type=ajp12

定义一个名为“remote”的workerQ其使用ajpv13协议与Tomcat q程通讯Q?br />

worker.remote.type=ajp13

定义一个名为“fast”的workerQ其使用JNI的方式与Tomcat q程通讯Q?br />

worker.fast.type=jni

定义一个名为“loadbalancer”的workerQ其作ؓ对多个Tomcat q程的负载^衡用:

worker.loadbalancer.type=lb

各个cdh不同的行为,我们在下文中会详l解释?br />
3.讄Worker属性:

在定义worker之后Q还需要提供各个worker的属性,q些属性的定义使用下面的方式:
worker.<worker名字>.<属?gt;=<属性?gt;

3-1 ajp12cd的Worker属性:.

ajp12cd的worker工作时用基于TCP/IP socket的ajpv12协议转发hl“进E外”Tomcat worker?br />ajp12 worker属性如下:
hostQ?br />侦听ajp12h的Tomcat workerL?br />portQ?br />Tomcat workerL的侦听端口?br />lbfactorQ?br />当此Tomcat worker被用于一个负载^衡worker使用Ӟ此属性将被用。它定义了此worker的负载^衡权倹{?br />例如Q下面的“worker1”定义了一个位于www.x.comL上的TomcatQ它使用8007端口侦听apache发来的请求,q具?.5的负载权?br />

worker.worker1.host=www.x.com
worker.worker1.port=8007
worker.worker1.lbfactor=2.5

注意Q在ajpv12协议中,针对每个h都要一个连接徏立、用、关闭。其默认侦听端口?007?br />
3-2 ajp13cd的Worker属性:

ajp13cd的worker工作时用基于TCP/IP socket的ajpv13协议转发hl“进E外”Tomcat worker?br />ajpv13协议与ajpv12协议的主要不同:
* ajpv13h更丰富的二进制协议,它用将频繁使用的字W串~码为小整数的方式对h数据q行压羃?br />* ajpv13重用打开的socketq保留这些打开的socket以处理将来的h。这在apache与Tomcat之间h防火墙的|络环境下是必要的?br />* ajpv13h对SSL信息的处理能力,以致容器能够实现SSL的相x法(如isSecure()Q?br />

注意Qajp13当前只能用于支持“进E外”协议的Tomcat 4.0.x, 4.1.x and 5?br />下表描述了ajp13worker接受的属性:

hostQ?br />侦听ajp13h的Tomcat workerL?br />
portQ?br />Tomcat workerL的侦听端口?

lbfactorQ?br />当此Tomcat worker被用于一个负载^衡worker使用Ӟ此属性将被用。它定义了此worker的负载^衡权倹{?br />
cachesizeQ?br />当在多线E的web serverQ例如apache2.0、IIS 、NetscapeQ中使用JKӞ此属性是有效的。如果将cachesize的D|ؓ较高的|q些支持多线E的web server获得很好的处理能力。如果此属性不被设|,则连接cacheҎ将失效?br />
cache_timeoutQ?br />本属性用于声明JK在cache中保留一个打开的socket的时_它对减少web serer的线E数有所帮助?br />使用cache_timeout的原因:
周所周知Q一个n背重负的web serverQ例如apacheQ徏立childs/threads来处理负载,而当负蝲减少时它销毁无用的childs/threads。每个child在{发请求给Tomcat时要打开一个ajp13q接Q而在Tomcat那一端也徏立一个ajp13U程与之通讯。但是问题出现在一个ajp13q接建立完成后,child没有及时的释N个ajp13q接Q由于web server1保持它的childs/threadsq行已处理高负蝲Q即使childs/threads处理快速的静态内容,在Tomcat端也积累很多的无用ajp13U程?br />
socket_keepaliveQ?br />当防火墙位于web server与Tomcat之间Ӟ防火墙将试断开未激zȝ|络q接。此属性将告诉操作pȝ在未Ȁzȝq接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作pȝ的设|,一般ؓ120U?Q这样将防止防火墙切断未Ȁzȝ|络q接?br />但此讄q不是万能钥匙,它对于某些防火墙也无能ؓ力?br />
socket_timeoutQ?br />此属性说明连接在未激zȝ状况下持l多久,web server主动切断之。这是一个Tomcat端的陈旧U程不致q多的好ҎQ但是也带来了在下一ơ请求到来时需要重新打开socket的开销。此属性与cache_timeout有类似的功效Q但是它工作在non-cache模式?br />
connect_timeoutQ?br />web server在连接徏立后一个PINGh发送到ajp13协议的连接上?此属性说明了web server{待PONG回应的时_以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13?ping/pong的支持。此属性默认ؓ失效的?br />
prepost_timeoutQ?br />web server在{发一个请求后一个PINGh发送到ajp13协议的连接上。此属性说明了web server{待PONG回应的时_以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13?ping/pong的支持。此属性默认ؓ失效的?br />
reply_timeoutQ?br />此属性告诉web server在接到远端的Tomcat已死q实时的切换到集中的另外一个Tomcat的回应之前等待一D|间。默认情况下web server永q等待。属性gؓweb server要等待回应的旉Q以ms为单位)Q所以如果具有运行时间较长的servlet时设|其D心。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认ؓ失效的?br />
recovery_optionsQ?br />此属性说明了web server在检到Tomcatp|后如何进行恢复工作。默认情况下Qweb server{发请求给处于负蝲q模式中的另一个Tomcat。属性gؓ0Q说明全部恢复;属性gؓ1Q说明如果在Tomcat接到h后出现失败状况,则不q行恢复Q属性gؓ2Q说明如果在Tomcat发送http头给客户端后出现p|状况Q则不进行恢复;属性gؓ3Q说明如果在Tomcat接到h后出现失败状冉|者在Tomcat发送http头给客户端后出现p|状况Q则不进行恢复。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认ؓ全部恢复?br />
例如Q一个名为“worker2”的worker的配|:

worker.worker2.host=www2.x.com
worker.worker2.port=8009
worker.worker2.lbfactor=3.5
worker.worker2.cachesize=10
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker "worker2" want ajp13 connection to be dropped after 5mn (timeout)
worker.worker2.socket_timeout=300


说明Q上例中的worker要求操作pȝ在连接上发送KEEP-ALIVE信号?br />注意Q在ajpv13协议中默认端口ؓ8009?br />
4.讄lb Worker属性:
负蝲qcd的workerq不与Tomcat worker通讯Q它负责理q些Tomcat worker?br />
其管理范围如下:
* 初始化在web server的worker列表中定义的worker?br />* 使用worker的负载^衡权|执行Z权值的负蝲qQ将数量多的h发送到负蝲q权值高Q在web server看来是更加健壮的)的worker?br />* l护在同一个Tomcat worker上的同一个session的请求,使其发送到同一个Tomcat worker上。以辑ֈTomcat worker上的session一致性、持l性?br />* 标识已经p|的Tomcat workersQ悬I发向它们的hQ在被lb worker理的其它workers上寻扑֏以失败恢复的worker?br />被同一个lb worker理多个worker之间的负载^衡的Q基于它们的lbfactor和当前用户sessionQ,也可以尽量避免由于单一的Tomcatq程L而造成q个|站被“杀”的不良反应?br />下表说明了lb worker接受的属性:
* balanced_workersQ一个由“,”分割的worker列表Q用来声明lb worker需要被理的workers。这些workers不应出现在worker.list属性中?br />* sticky_sessionQ表q是否将对SESSION ID的请求\由回到相同的Tomcat worker。如果属性g?Q它被讄为JK_TRUEQsession是_性的Q即SESSION ID的请求\由回到相同的Tomcat workerQ当Tomcat正用能够跨多个Tomcat实例持久化session数据的Session ManagerӞ它将被设|ؓJK_FALSE。属性默认gؓJK_TRUE?br />例如Qworker balance1理着两个workersQworker1、worker2Q?br />

worker.balance1.balanced_workers=worker1, worker2


5.高lb Worker属性:

JK 1.2.x版本通过增加两个新的属性:local_worker_only ?local_worker 为lb worker增添了新的负载^衡和定w支持?br />下面让我们D一个实际的环境作ؓexampleQ?br />一个集具有两个节?worker1+worker2)Q一个web server与tomcat workers一前一后,一个负载^衡器Qlb WorkerQ位于节点的前面、web server的后面?br />配置如下Q?br />

worker.list=router
# Define a 'local_worker' worker using ajp13
worker.worker1.port=8009
worker.worker1.host=node1.domain.org
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker1.local_worker=1
# Define another 'local_worker' worker using ajp13
worker.worker2.port=8009
worker.worker2.host=node2.domain.org
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker2.local_worker=0
# Define the LB worker
worker.router.type=lb
worker.router.balanced_workers=worker1,worker2
worker.router.local_worker_only=1


在worker1和worker2上的local_worker标志告诉lb_worker哪个q接属于本地worker?br />
如果local_workergؓ?Q则它将被设|ؓJK_TRUEQ用来标记“local worker”,而JK_FALSE的情况则相反。如果至一个worker被标Cؓlocal workerQ则lb_worker工作于local worker模式。这U模式下Q所有的local workers被Ud在lb_worker中的内部worker列表的头部?br />
q意味着一个带有session id的请求到达lb_workerӞ相应的workerQ根据权值排序,权值最大的那个workerQ将被确定作为此h的接?处理者。如果这个workerL/当机Q请求将被发送到处于非错误状态的W一个local workerQ如果一个没有session id的请求到达lb_workerӞ此请求将被\由到W一个local worker。如果所有的local worker均处于错误状态,则这时“local_worker_only”标志显得尤光要。如果local_worker_only的属性gؓ?Q则它被讄?JK_TRUEQ否则被讄?JK_FALSE。当它被讄?JK_TRUEӞq个没有session id的请求将得到一个错误作为回应,否则lb_worker尝试将h路由到其它的被管理的worker上。如果其中的一个worker处于错误状态,q且恢复会话的工作ƈ没有M改变Qlocal worker查找这个没有session id的请求(因ؓ在local worker中保存有q个h的sessionQ,而其它的worker只能查找带有session id的请求?br />
注意Qlocal_worker默认值是0Qlocal_worker_only默认g??

6.Z么需要这么复杂的q程吗?

因ؓ我们对于一个关闭的节点需要一个具有灵性的l护?br />在节点前面的q器周期性的Ҏ个节点的特定端口q行查询。如果我们从集群中移C个节点,我们׃隐性的关闭掉这个特定的端口。由于负载^衡器不能q接它,q个节点被标记为down。但是我们没有移动在那个关闭的节点上的session到其它的节点上。在q个环境下,如果q器发送一个没有session id的请求到一个端口被x的节点,那么一个错误将发生。如果^衡器试C个节点被标记为down的状态,而没有其它的节点允许发送没有session id的请求。这栯些陈旧的sessionh只有\由到那个被关闭的节点才能被接受。在一D|间后Q这些陈旧的session超时。由于所有的陈旧的sessionq期Q那个不可达Q被关闭Q的节点失去这个请求。同时也会导致我们的servletpȝ发送一个没有session id的重定向回应l浏览器?br />
但是可能被关闭的节点会upQ重新加入到集群中来Q在它上面仍保留着陈旧的session。所以在最后一个session时后,更新节点能够为陈旧的session的恢复带来希望,而不是杀掉sessions或者把它们Ud其它节点上。而且有时如果那些陈旧的session中有许多big的对象,那么Ud它们也将p许多旉?br />
7.jnicd的Worker属性:

jni worker会在web serverq程中打开一个JVMQƈ在其中执行TomcatQ这叫做“进E内”worker。来往于JVM的消息将通过调用JNIҎ被传递,qjni worker比那些需要用ajp消息通讯的“进E外”worker执行的更快?br />
注意Q由于JVM是多U程的,jni worker应该只被用于在支持对U程的web serverQAOLServer, IIS, Netscape and Apache 2.0Q上。同时还应该认在web server上用的U程Ҏ是否与被使用的JK web server插g相匹配?br />
׃jni worker 打开了一个JVMQ它接受一些属性(例如classpath{)q将其传递给JVMQ?br />worker.worker?class_pathQ“进E内”的JVM要用的classpath。它包括所有的Tomcat的jar文g和class、配|文件等?br />
Z获得JSP~译器的支持Q我们需要将Javacd到classpath中。当然对于Java2需要添加tools.jar到classpathQ而对于JDK1.xx则要dclasses.zip到classpath?br />
worker.worker?class_pathQ用于以多行的Ş式声明多个classpath。JK环境用“:”或者“;”把q些classpathQ连接v来?br />
例如Q给名ؓ“wrkjni”的worker讄classpath?br />

worker.wrkjni.class_path=/var/tomcat3/lib/tomcat.jar
worker.wrkjni.class_path=/opt/IBMJava2-131/lib/tools.jar


worker.worker?bridgeQ用于标识将通过JNI方式被用的Tomcat的类型。此属性目前有两个属性|tomcat32 or tomcat33。Tomcat 3.2.x虽然已经q时Q但是被提供用于发布在一些类似iSeriespȝ上。此属性的默认gؓtomcat33?br />例如Q给“wrkjni”设|bridgecd为tomcat3.3?br />

worker.wrkjni.bridge=tomcat33


worker.worker?cmd_lineQ?此属性提供了在Tomcat启动代码执行的命令行。用时命令行的命令、参数分解ؓ多个cmd_line属性。JK环境通过在各个cmd_line属性g间添加空格将q些cmd_lineq接在一赗?br />例如Q设|“wrkjni”的cmd_line属性?br />

worker.wrkjni.cmd_line=-config
worker.wrkjni.cmd_line=/etc/tomcat3/conf/alt-server.xml
worker.wrkjni.cmd_line=-home
worker.wrkjni.cmd_line=/var/tomcat3


上面例子中的W一行声明了-config参数名,而第二行声明了与之对应的参数倹{第三行与第四行同理?br />
worker.worker?jvm_libQ用于声明JVM的实现库的完整\径。Jni worker使用q个路径动态装载JVM?br />例如Q设|“wrkjni”的JVM shared lib (IBM SDK on Linux)?br />

worker.wrkjni.jvm_lib=/opt/IBMJava2-131/jre/bin/classic/libjvm.so

例如Q设|“wrkjni”的JVM shared lib (Sun SDK on Windows)?br />

worker.wrkjni.jvm_lib=c:\JDK\1.3.1\jre\bin\classic

worker.worker?stdoutQ设|JVM写它的System.out的完整\径位|?
例如Q将“wrkjni”的JVMpȝ输出路径讄?var/log/http/jk-jvm-out.log?br />

worker.wrkjni.stdout=/var/log/http/jk-jvm-out.log

worker.worker?stderrQ设|JVM写它的System.err的完整\径位|?br />例如Q将“wrkjni”的JVMpȝ错误输出路径讄?var/log/http/jk-jvm-err.log

worker.wrkjni.stderr=/var/log/http/jk-jvm-out.log

worker.worker?msQ设|JVM的初始堆大小?br />例如Q设|“wrkjni”的JVM的初始堆?4M?br />

worker.wrkjni.ms=64


worker.worker?mxQ设|JVM的最大的堆大?br />例如Q设|“wrkjni”的JVM堆最大ؓ128M

worker.wrkjni.mx=128


worker.worker?syspropsQ设|JVM的系l属性?br />例如Q设|“wrkjni”的JVM使用法语?br />

worker.wrkjni.sysprops=-Duser.region=FR


worker.worker?ld_pathQ设|附加的动态链接库路径(cM于LD_LIBRARY_PATH)
例如Q添加一些动态链接库路径到“wrkjni”的java环境中?br />

worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/
worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/classic


注意Q在Linux下,上面的ld_pathq不能更新LD_LIBRARY_PATHQ所以需要在执行web server之前手动更新LD_LIBRARY_PATH,?br />
8.属性文件宏Q?/b>

我们可以在属性文件中定义“宏”。这些宏让我们定义属性,q在以后使用它们来构建其它的属性文件。当我们修改Java Home、Tomcat Home、系l\径分隔符时这是很有用的?br />例如Q定义了属性workers.tomcat_home、workers.java_home?br />

workers.tomcat_home=d:\tomcat
workers.java_home=d:\sdk\jdk1.2.2

在定义worker.inprocess.class_path时就可以使用前面定义的workers.tomcat_home?br />

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes



9.一个简单而完整的worker.propertiesQ?/b>

文g中定义了比较完整的结构,可以做ؓ参考模版:
* 一个位于localhost的?007端口的ajp12 workerQ?br />    * 一个位于localhost的?008端口的ajp13 workerQ?br />    * 一个jni workerQ?br />    *  一个lb workerQ负责ajp12 worker、ajp13 workers的负载^衡?br />文g内容如下Q?br />

# Define some properties
workers.apache_log=/var/log/httpd/
workers.tomcat_home=/var/tomcat3
workers.java_home=/opt/IBMJava2-131/
ps=/
# Define 4 workers, 3 real workers using ajp12, ajp13, jni, the last one being a loadbalancing worker
worker.list=worker1, worker2, worker3, worker4
# Set properties for worker1 (ajp12)
worker.worker1.type=ajp12
worker.worker1.host=locahost
worker.worker1.port=8007
worker.worker1.lbfactor=5
# Set properties for worker2 (ajp13)
worker.worker2.type=ajp13
worker.worker2.host=locahost
worker.worker2.port=8009
worker.worker2.lbfactor=50
worker.worker2.cachesize=10
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=300
# Set properties for worker3 (jni)
worker.worker3.type=jni
# Set worker3 bridge type, here Tomcat 3.3
worker.worker3.bridge=tomcat33
# Set worker3 classpath
worker.worker3.class_path=$(workers.tomcat_home)$(ps)classes
worker.worker3.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar
# Set worker3 tomcat command line
worker.worker3.cmd_line=-home
worker.worker3.cmd_line=$(workers.tomcat_home)
# Set worker3 Tomcat/JVM settings
worker.worker3.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.so
worker.worker3.stdout=$(workers.apache_log)$(ps)inprocess.stdout
worker.worker3.stderr=$(workers.apache_log)$(ps)inprocess.stderr
worker.worker3.sysprops=tomcat.home=$(workers.tomcat_home)
# Set properties for worker4 (lb) which use worker1 and worker2
worker.worker4.balanced_workers=worker1,worker2



]]>
L实现Apache,Tomcat集群和负载均?/title><link>http://www.aygfsteel.com/ASONG/articles/83043.html</link><dc:creator>汪松?/dc:creator><author>汪松?/author><pubDate>Thu, 23 Nov 2006 06:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/ASONG/articles/83043.html</guid><wfw:comment>http://www.aygfsteel.com/ASONG/comments/83043.html</wfw:comment><comments>http://www.aygfsteel.com/ASONG/articles/83043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ASONG/comments/commentRss/83043.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ASONG/services/trackbacks/83043.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="tit">L实现Apache,Tomcat集群和负载均?/div> <div id="wmqeeuq" class="date">2006-11-18 12:15</div> <table style="TABLE-LAYOUT: fixed"> <tbody> <tr> <td> <div id="wmqeeuq" class="cnt"> <p> 作?|代?ldj_work#126.com,转蝲请保持完整?/p> <p> <strong>0Q?环境说明</strong> </p> <p>       Apache  :apache_2.0.55     1 ?/p> <p>       Tomcat:  apache-tomcat-5.5.17 (zip? 2?/p> <p>       mod_jk:: mod_jk-apache-2.0.55.so  1?/p> <p> <strong>W一部分Q负载均?/strong> </p> <p>    负蝲均衡Q就是apache客戯求均衡的分给tomcat1,tomcat2....d?/p> <p> <strong>   1.安装apche,tomcat</strong> </p> <p>   <a >http://httpd.apache.org/</a> 下蝲Apache 2.0.55</p> <p>    <a >http://tomcat.apache.org/download-55.cgi</a> 下蝲tomcat5.5 zip版本Q解压即可,l色版)</p> <p>   <a >http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/</a>  下蝲mod_jk,注意和?apache版本匚w</p> <p>   按照jdk,我的路径?E:\ide\apache\Apache2</p> <p>   解压两䆾Tomcat, 路径分别?E:\ide\tomcat1,E:\ide\tomcat2</p> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/9d61f003d5034eec09fa935b.jpg" border="0" small="0" /> </div> <p>下蝲mod_jk</p> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/52855e82373a3ea20df4d224.jpg" border="0" small="0" /> </div> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/46899c50d44e3b628435245b.jpg" border="0" small="0" /> </div> <div forimg="1"> </div> <div forimg="1"> </div> <p> <strong>2.修改Apache配置文ghttp.conf</strong> </p> <p>   在apache安装目录下conf目录中找到http.conf</p> <p>   在文件最后加上下面一句话可以了</p> <p>  include "E:\ide\apache\Apache2\conf\mod_jk.conf"</p> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/d1c28cd49b8d6901a08bb720.jpg" border="0" small="0" /> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>2. http.conf 同目录下新徏mod_jk.conf文gQ内容如?/strong> </div> <div forimg="1">   </div> <div forimg="1">#加蝲mod_jk Module<br />LoadModule jk_module modules/mod_jk-apache-2.0.55.so</div> <div forimg="1"> </div> <div forimg="1">#指定 workers.properties文g路径<br />JkWorkersFile conf/workers.properties</div> <div forimg="1"> </div> <div forimg="1">#指定那些h交给tomcat处理,"controller"为在workers.propertise里指定的负蝲分配控制?/div> <div forimg="1">JkMount /*.jsp controller</div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>3.在http.conf同目录下新徏 workers.properties文gQ内容如?/strong> </div> <div forimg="1"> </div> <div forimg="1">worker.list = controller,tomcat1,tomcat2  #server 列表</div> <div forimg="1"> </div> <div forimg="1">#========tomcat1========</div> <div forimg="1">worker.tomcat1.port=8009         #ajp13 端口P在tomcat下server.xml配置,默认8009<br />worker.tomcat1.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址<br />worker.tomcat1.type=ajp13<br />worker.tomcat1.lbfactor = 1   #server的加权比重,D高,分得的请求越?/div> <div forimg="1"> </div> <div forimg="1">#========tomcat2========</div> <div forimg="1">worker.tomcat2.port=9009       #ajp13 端口P在tomcat下server.xml配置,默认8009<br />worker.tomcat2.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址<br />worker.tomcat2.type=ajp13<br />worker.tomcat2.lbfactor = 1   #server的加权比重,D高,分得的请求越?/div> <div forimg="1"> <br />#========controller,负蝲均衡控制?=======<br />worker.controller.type=lb<br />worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担h的tomcat<br />worker.controller.sticky_session=1</div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>4.修改tomcat配置文gserver.xml</strong> </div> <div forimg="1">如果你在不同电脑上安装tomcat,tomcat的安装数量ؓ一个,可以不必修改tomcat配置文g</div> <div forimg="1">我这里是在同一台电脑上安装两个tomcatQ所以需要更改其中一个的讄</div> <div forimg="1"> </div> <div forimg="1">打开tomcat2/conf/server.xml文g</div> <div forimg="1"> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/a3d133a8ed4063b1ca130c36.jpg" border="0" small="0" /> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/8c3cae7727b25d1bb151b937.jpg" border="0" small="0" /> </div> <div forimg="1"> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/56b04b085ba7f3950b7b8230.jpg" border="0" small="0" /> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>5.~写一个测试jsp</strong> </div> <div forimg="1"> </div> <div forimg="1">建立一个目录test.里面新徏一个test.jsp,内容?/div> <div forimg="1"> </div> <div forimg="1"><% <br />   System.out.println("===========================");<br />%><br /></div> <div forimg="1">把test攑ֈtomcat1,tomcat2的webapps?/div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>6.启动apache,tomcat1,tomcat2,q行试</strong> </div> <div forimg="1"> </div> <div forimg="1">通过 <a href="http://localhost/test/test.jsp">http://localhost/test/test.jsp</a> 讉KQ查看tomcat1的窗口,可以看到打印了一?=========="</div> <div forimg="1">再刷Cơ,tomcat2也打C一条,再刷斎ͼ可以看到h会被tomcat1,tomcat2轮流处理,实现了负载均?/div> <div forimg="1"> <div forimg="1"> <img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/acf2fcf2c8b77d13b17ec53d.jpg" width="913" border="0" small="0" /> </div> <div forimg="1"> </div> <div forimg="1"> </div> <div forimg="1"> <strong>W二部分Q配|集?/strong> </div> <div forimg="1">   只配|负载均衡还不行Q还要session复制Q也是说其中Q何一个tomcat的添加的sessionQ是要同步复制到其它tomcatQ?集群内的tomcat都有相同的session</div> <div forimg="1"> </div> <div forimg="1"> <strong>1. 修改tomcat1, tomcat2的server.xml</strong>,集部分配|的在注释符删掉,q将tomcat2?001端口改ؓ4002Q以避免与tomcat冲突Q当Ӟ如果是两台电脑,是不用改端口的,L注释W即?/div> <div forimg="1">   <div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/aa4ab5fb0f3582224f4aeab2.jpg" border="0" small="0" /></div><div forimg="1"><div forimg="1"><div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/89b84c3627ecc1dda3cc2b92.jpg" border="0" small="0" /></div></div><div forimg="1"><div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/cc4b858b603d47d3fd1f10b2.jpg" border="0" small="0" /></div><div forimg="1"></div><div forimg="1"></div><div forimg="1"><strong><div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/52dfdac4bc506ecb38db4959.jpg" border="0" small="0" /></div></strong></div><div forimg="1"><strong></strong></div><div forimg="1"><strong>2Q修Ҏ试项目test</strong></div><div forimg="1">修改test.jsp,内容如下</div><div forimg="1"></div><div forimg="1">  <%@ page contentType="text/html; charset=GBK" %><br /><%@ page import="java.util.*" %><br /><html><head><title>Cluster App Test</title></head><br /><body><br />Server Info:<br /><%<br />out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%><br /><%<br />  out.println("<br> ID " + session.getId()+"<br>");</div><div forimg="1">  // 如果有新?Session 属性设|?br />  String dataName = request.getParameter("dataName");<br />  if (dataName != null && dataName.length() > 0) {<br />     String dataValue = request.getParameter("dataValue");<br />     session.setAttribute(dataName, dataValue);<br />  }</div><div forimg="1">  out.print("<b>Session 列表</b>");</div><div forimg="1">  Enumeration e = session.getAttributeNames();<br />  while (e.hasMoreElements()) {<br />     String name = (String)e.nextElement();<br />     String value = session.getAttribute(name).toString();<br />     out.println( name + " = " + value+"<br>");<br />         System.out.println( name + " = " + value);<br />   }<br />%><br />  <form action="index.jsp" method="POST"><br />    名称:<input type=text size=20 name="dataName"><br />     <br><br />    ?<input type=text size=20 name="dataValue"><br />     <br><br />    <input type=submit><br />   </form><br /></body><br /></html></div><div forimg="1"></div><div forimg="1">然后在test 新徏WEB-INF目录QWEB-INF下新建web.xml,内容如下</div><div forimg="1"><web-app xmlns="<a xmlns:xsi="<a xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a><a version="2.4"><br />       <display-name>TomcatDemo</display-name><br />      <strong><font color="#ff0000"> <distributable/></font></strong><br /></web-app></div><div forimg="1"></div><div forimg="1">注意Q在你的应用的web.xml加入 <font color="#ff0000"><strong> <distributable/></strong></font><font color="#000000">卛_</font></div><div forimg="1"></div><div forimg="1">ok,讲test复制到tomcat1,tomcat2的webapps下,重启apache,tomcat1,tomcat2,</div><div forimg="1">输入|址 <a href="http://localhost/test/test.jsp">http://localhost/test/test.jsp</a>   </div><div forimg="1"></div><div forimg="1">新徏一?名称?xiaoluo  ,gؓ cdut 的session,提交查询Q新开一个ieH口Q再提交查询Q如图,可以看到Q两个tomcat 是负载均衡,q且session同步?/div><div forimg="1"><div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/79a9317af99aa5ed2e73b385.jpg" width="913" border="0" small="0" /></div></div></div></div></div> </div> </div> </div> </div> </div> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/ASONG/aggbug/83043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ASONG/" target="_blank">汪松?/a> 2006-11-23 14:57 <a href="http://www.aygfsteel.com/ASONG/articles/83043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实践中整理出tomcat集群和负载均?/title><link>http://www.aygfsteel.com/ASONG/articles/82967.html</link><dc:creator>汪松?/dc:creator><author>汪松?/author><pubDate>Thu, 23 Nov 2006 02:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/ASONG/articles/82967.html</guid><wfw:comment>http://www.aygfsteel.com/ASONG/comments/82967.html</wfw:comment><comments>http://www.aygfsteel.com/ASONG/articles/82967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ASONG/comments/commentRss/82967.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ASONG/services/trackbacks/82967.html</trackback:ping><description><![CDATA[ <strong> <font size="4">(一)环境说明<br /></font> </strong>(1)服务器有4収ͼ一台安装apache,三台安装tomcat<br />(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2<br />(3)ip配置,一台安装apache的ip?92.168.0.88,三台安装tomcat的服务器ip分别?92.168.0.1/2/4 <p><br /><font size="4"><strong>(?安装q程<br /></strong></font>(1)在三台要安装tomcat的服务器上先安装jdk<br />(2)配置jdk的安装\?在环境变量path中加入jdk的bin路径,新徏环境变量JAVA_HOME指向jdk的安装\?br />(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启?br />(4)tomcat的默认WEB服务端口?080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改?080/8888/9999<br />修改位置为tomcat的安装目录下的conf/server.xml<br />修改前的配置?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    <Connector port="8080" maxHttpHeaderSize="8192"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true" /></td></tr></tbody></table><p><br /><br />修改后的配置?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    <Connector port="7080" maxHttpHeaderSize="8192"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true" /></td></tr></tbody></table><p><br /><br />依次修改每个tomcat的监听端?7080/8888/9999)<br /><br />(5)分别试每个tomcat的启动是否正?br />http://192.168.0.1:7080<br />http://192.168.0.2:8888<br /><a ><font color="#ff0000">http://192.168.0.4:9999</font></a></p><p><br /><font size="4"><strong>(?负蝲均衡配置q程<br /></strong></font>(1)在那台要安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:\Program Files\Apache Group\Apache2<br />(2)安装后测试apache能否正常启动Q调试到能够正常启动http://192.168.0.88<br />(3)下蝲jk2.0.4后解压羃文g<br />(4)解压羃后的目录中的modules目录中的mod_jk2.so文g复制到apache的安装目录下的modules目录?我的为C:\Program Files\Apache Group\Apache2\modules<br />(5)修改apache的安装目录中的conf目录的配|文件httpd.confQ在文g中加LoadModule模块配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so<br />(6)分别修改三个tomcat的配|文件conf/server.xmlQ修改内容如?br />修改?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    <!-- An Engine represents the entry point (within Catalina) that processes<br />         every request.  The Engine implementation for Tomcat stand alone<br />         analyzes the HTTP headers included with the request, and passes them<br />         on to the appropriate Host (virtual host). --><br /><br />    <!-- You should set jvmRoute to support load-balancing via AJP ie :<br />    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         <br />    --> <br />         <br />    <!-- Define the top level container in our container hierarchy --><br />    <Engine name="Catalina" defaultHost="localhost"></td></tr></tbody></table><br />修改?p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    <!-- An Engine represents the entry point (within Catalina) that processes<br />         every request.  The Engine implementation for Tomcat stand alone<br />         analyzes the HTTP headers included with the request, and passes them<br />         on to the appropriate Host (virtual host). --><br /><br />    <!-- You should set jvmRoute to support load-balancing via AJP ie :--><br />    <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">         <br />     <br />         <br />    <!-- Define the top level container in our container hierarchy <br />    <Engine name="Catalina" defaultHost="localhost"><br />    --></td></tr></tbody></table><p><br />其中的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"<br /><br />(7)然后重启三个tomcatQ调试能够正常启动?br />(8)在apache的安装目录中的conf目录下创建文件workers2.propertieQ写入文件内容如?br /></p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td># fine the communication channel <br />[channel.socket:192.168.0.1:8009] <br />info=Ajp13 forwarding over socket</td></tr></tbody></table><p><br />#配置W一个服务器 <br />tomcatId=tomcat1 #要和tomcat的配|文件server.xml中的jvmRoute="tomcat1"名称一?br />debug=0 <br />lb_factor=1 #负蝲q因子Q数字越大请求被分配的几率越?br /></p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td># Define the communication channel <br />[channel.socket:192.168.0.2:8009] <br />info=Ajp13 forwarding over socket<br />tomcatId=tomcat2 <br />debug=0 <br />lb_factor=1 <br /><br /># Define the communication channel <br />[channel.socket:192.168.0.4:8009] <br />info=Ajp13 forwarding over socket<br />tomcatId=tomcat3 <br />debug=0 <br />lb_factor=1 <br /><br />[status:] <br />info=Status worker, displays runtime information.  <br /><br />[uri:/jkstatus.jsp] <br />info=Display status information and checks the config file for changes. <br />group=status: <br /><br />[uri:/*] <br />info=Map the whole webapp <br />debug=0</td></tr></tbody></table><p><br />(9)在三个tomcat的安装目录中的webapps建立相同的应?我和应用目录名ؓTomcatDemo,在三个应用目录中建立相同 WEB-INF目录和页面index.jsp,index.jsp的页面内容如?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td><%@ page contentType="text/html; charset=GBK" %><br /><%@ page import="java.util.*" %><br /><html><head><title>Cluster App Test</title></head><br /><body><br />Server Info:<br /><%<br />out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%><br /><%<br />  out.println("<br> ID " + session.getId()+"<br>");<br /><br />  // 如果有新?Session 属性设|?br />  String dataName = request.getParameter("dataName");<br />  if (dataName != null && dataName.length() > 0) {<br />     String dataValue = request.getParameter("dataValue");<br />     session.setAttribute(dataName, dataValue);<br />  }<br /><br />  out.print("<b>Session 列表</b>");<br /><br />  Enumeration e = session.getAttributeNames();<br />  while (e.hasMoreElements()) {<br />     String name = (String)e.nextElement();<br />     String value = session.getAttribute(name).toString();<br />     out.println( name + " = " + value+"<br>");<br />         System.out.println( name + " = " + value);<br />   }<br />%><br />  <form action="index.jsp" method="POST"><br />    名称:<input type=text size=20 name="dataName"><br />     <br><br />    ?<input type=text size=20 name="dataValue"><br />     <br><br />    <input type=submit><br />   </form><br /></body><br /></html><br /></td></tr></tbody></table><p><br />(10)重启apache服务器和三个tomcat服务?到此负蝲 均衡已配|完成。测试负载均衡先试apache,讉Khttp://192.168.0.88/jkstatus.jsp<br />能否正常讉KQƈ查询其中的内容,有三个tomcat的相关配|信息和负蝲说明,讉Khttp://192.168.0.88/TomcatDemo/index.jsp看能够运?<br />能运行,则已建立负蝲均衡?/p><p><br /><font size="4"><strong>(?tomcat集群配置<br /></strong></font>(1)负蝲均衡配置的条件下配置tomcat集群<br />(2)分别修改三个tomcat的配|文件conf/server.xml,修改内容如下<br />修改?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>       <!-- <br />        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"<br />                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"<br />                 expireSessionsOnShutdown="false"<br />                 useDirtyFlag="true"<br />                 notifyListenersOnReplication="true"><br /><br />            <Membership <br />                className="org.apache.catalina.cluster.mcast.McastService"<br />                mcastAddr="228.0.0.4"<br />                mcastPort="45564"<br />                mcastFrequency="500"<br />                mcastDropTime="3000"/><br /><br />            <Receiver <br />                className="org.apache.catalina.cluster.tcp.ReplicationListener"<br />                tcpListenAddress="auto"<br />                tcpListenPort="4001"<br />                tcpSelectorTimeout="100"<br />                tcpThreadCount="6"/><br /><br />            <Sender<br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"<br />                replicationMode="pooled"<br />                ackTimeout="5000"/><br /><br />            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"<br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><br />                   <br />            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"<br />                      tempDir="/tmp/war-temp/"<br />                      deployDir="/tmp/war-deploy/"<br />                      watchDir="/tmp/war-listen/"<br />                      watchEnabled="false"/><br />                      <br />            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/><br />        </Cluster><br />        -->   </td></tr></tbody></table><p><br /> 修改?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>       <!-- modify by whh --><br />        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"<br />                 managerClassName="org.apache.catalina.cluster.session.DeltaManager"<br />                 expireSessionsOnShutdown="false"<br />                 useDirtyFlag="true"<br />                 notifyListenersOnReplication="true"><br /><br />            <Membership <br />                className="org.apache.catalina.cluster.mcast.McastService"<br />                mcastAddr="228.0.0.4"<br />                mcastPort="45564"<br />                mcastFrequency="500"<br />                mcastDropTime="3000"/><br /><br />            <Receiver <br />                className="org.apache.catalina.cluster.tcp.ReplicationListener"<br />                tcpListenAddress="auto"<br />                tcpListenPort="4001"<br />                tcpSelectorTimeout="100"<br />                tcpThreadCount="6"/><br /><br />            <Sender<br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"<br />                replicationMode="pooled"<br />                ackTimeout="5000"/><br /><br />            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"<br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><br />                   <br />            <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"<br />                      tempDir="/tmp/war-temp/"<br />                      deployDir="/tmp/war-deploy/"<br />                      watchDir="/tmp/war-listen/"<br />                      watchEnabled="false"/><br />                      <br />            <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/><br />        </Cluster><br />       <!-- modify by whh --></td></tr></tbody></table><br />集配|选项的注释放开卛_Q如上?br />(3)重启三个tomcat。到此tomcat的集已配置完成?p><font size="4"><strong>(?应用配置<br /></strong></font>对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文g要添加如下一句配|?br /><distributable/><br />配置?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td><?xml version="1.0" encoding="UTF-8"?><br /><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"><br />  <display-name>TomcatDemo</display-name><br /></web-app></td></tr></tbody></table><p><br />配置?/p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td><?xml version="1.0" encoding="UTF-8"?><br /><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"><br />  <display-name>TomcatDemo</display-name><br />   <distributable/><br /></web-app></td></tr></tbody></table><img src ="http://www.aygfsteel.com/ASONG/aggbug/82967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ASONG/" target="_blank">汪松?/a> 2006-11-23 10:32 <a href="http://www.aygfsteel.com/ASONG/articles/82967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5性能优化http://www.aygfsteel.com/ASONG/articles/81428.html汪松?/dc:creator>汪松?/author>Thu, 16 Nov 2006 00:53:00 GMThttp://www.aygfsteel.com/ASONG/articles/81428.htmlhttp://www.aygfsteel.com/ASONG/comments/81428.htmlhttp://www.aygfsteel.com/ASONG/articles/81428.html#Feedback0http://www.aygfsteel.com/ASONG/comments/commentRss/81428.htmlhttp://www.aygfsteel.com/ASONG/services/trackbacks/81428.html tomcat优化讄

  1. 如何加大tomcatq接?

在tomcat配置文gserver.xml中的<Connector ... />配置中,和连接数相关的参数有Q?br />minProcessorsQ最空闲连接线E数Q用于提高系l处理性能Q默认gؓ10
maxProcessorsQ最大连接线E数Q即Qƈ发处理的最大请求数Q默认gؓ75
acceptCountQ允许的最大连接数Q应大于{于maxProcessorsQ默认gؓ100
enableLookupsQ是否反查域名,取gؓQtrue或false。ؓ了提高处理能力,应设|ؓfalse
connectionTimeoutQ网l连接超Ӟ单位Q毫U。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?br />
其中和最大连接数相关的参CؓmaxProcessors和acceptCount。如果要加大q发q接敎ͼ应同时加大这两个参数?br />

web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?000个左叻ILinux?000个左叟뀂Unix中如何设|这些参敎ͼ请参阅Unix常用监控和管理命?

tomcat4中的配置CZQ?br /><Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="10" maxProcessors="1024"
enableLookups="false" redirectPort="8443"
acceptCount="1024" debug="0" connectionTimeout="30000" />

对于其他端口的侦听配|,以此cL?br />
2. tomcat中如何禁止列目录下的文g
在{tomcat_home}/conf/web.xml中,把listings参数讄成false卛_Q如下:
<servlet>
...
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>

3. 如何加大tomcat可以使用的内?br />
tomcat默认可以使用的内存ؓ128MBQ在较大型的应用目中,q点内存是不够的Q需要调大?br />
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下讄Q?br />JAVA_OPTS='-Xms【初始化内存大小?-Xmx【可以用的最大内存?
需要把q个两个参数D大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存ؓ256MBQ可以用的最大内存ؓ512MB


]]>
增加Tomcat使用内存 http://www.aygfsteel.com/ASONG/articles/81425.html汪松?/dc:creator>汪松?/author>Thu, 16 Nov 2006 00:48:00 GMThttp://www.aygfsteel.com/ASONG/articles/81425.htmlhttp://www.aygfsteel.com/ASONG/comments/81425.htmlhttp://www.aygfsteel.com/ASONG/articles/81425.html#Feedback0http://www.aygfsteel.com/ASONG/comments/commentRss/81425.htmlhttp://www.aygfsteel.com/ASONG/services/trackbacks/81425.html        所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明Q一般的JAVAE序在运行都可以通过?Xms -Xmx来调整应用程序的初始内存和最大内? 
        如:java -Xms64m  -Xmx128m  a.jar.
tomcat的启动程序是包装q的Q不能直接用java -X..... tomcat.*来改变内存的讄。在Tomcat在改变这个设|?br />有两U方法:
1.    需要在环境变量中加上TOMCAT_OPTS, CATALINA_OPTS两个属性,
        如 SET  CATALINA_OPTS= -Xms64m -Xmx512m;
        ms是最的Qmx是最大,64m, 512m分别是指内存的容?

2.    修改Catalina.bat文g
       ?66行“rem Execute Java with the applicable properties ”以下每?br />%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 中的%CATALINA_OPTS% 替换?Xms64m -Xmx512m


]]>
Apache和tomcat的集配|?/title><link>http://www.aygfsteel.com/ASONG/articles/57627.html</link><dc:creator>汪松?/dc:creator><author>汪松?/author><pubDate>Tue, 11 Jul 2006 04:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/ASONG/articles/57627.html</guid><wfw:comment>http://www.aygfsteel.com/ASONG/comments/57627.html</wfw:comment><comments>http://www.aygfsteel.com/ASONG/articles/57627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ASONG/comments/commentRss/57627.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ASONG/services/trackbacks/57627.html</trackback:ping><description><![CDATA[我的q行环境:Windows2003 Server SP4 + J2SDK1.5.0 + Apache2.0.54 + Tomcat5.5.9<br /><br />  **准备软g:<br />  1、Apache 2.0.54   <br />  2、Tomcat 5.5.14 <br />  3、Jk2q接器(mod_jk2.soQ?br />一QY件的部v和配|计划:(修改server.xml)<br />Configuration Parameter    Instance 1    Instance 2    Instance 3<br />Instance Type              Load Balancer    Cluster Node 1    Cluster Node 2<br />Node name                      AP-LB             TC01              TC02<br />Node IP                       192.168.0.12    192.168.0.12    192.168.0.12<br />Home Directory             D:/apache2    D:/tomcat51    D:/tomcat52<br />Server Ports                          8005              9005<br />AJP Connector Ports                 8009              8011<br />Coyote/JK2 AJP Connector                 8080              9080<br />Cluster mcastAddr                          228.0.0.4              228.0.0.4<br />Cluster mcastPort                          45564              45564<br />tcpListenAddress                          192.168.0.12    192.168.0.12<br />Cluster tcpListenPort                 4000             4001<br />Route                                   Tomcat51             Tomcat52<br />软g的安装步骤如下:<br />1、    首先按照JDK1.5.0<br />2、    安装Apache Q按照完成后启动ApacheQ用IE讉K<a href="http://localhost/"><font color="#002c99">http://localhost</font></a> 试Apacheq行是否正常?br />3、    在192.168.0.12上安装tomcatQ安装完成后Q启动tomcatQ用IE讉K<a href="http://localhost:8080/"><font color="#002c99">http://localhost:8080</font></a> Q测试tomcatq行是否正常?br />4、    编写一个jsp文gQsessiontest.jspQ把testsession.jsp攑ֈwebapps/jsp-examplse;Q将tomcat51拯到的d:/?修改名字tomcat52Q?br />在tomcat51中的testsession.jsp有提CZ息Index Page Served By tocmat51Q在tomcat52的testsession.jsp有提CZ息Index Page Served By tomcat52<br /><br />4、在tc01和tc02bin下编辑startup.batQ分别添?br />set CATALINA_HOME=D:\tomcat51和set CATALINA_HOME=D:\tomcat52<br /><br />5、    注释掉tc01和tc02中server.xml?br />   <!-- Define the top level container in our container hierarchy<br /><Engine name=”Catalina” defaultHost=”localhost” debug=??gt;<br />--><br />和把下面的注释去?br /><Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat51"><br />TC02的jvmRoute="tomcat52"<br />6、    在TC01的jk2.propertiesdQ?br /># Sample jk2.properties file for Tomcat5A<br />channelSocket.address=192.168.0.12<br />channelSocket.port=8009<br />shm.file=D:/Apache2/conf/jk2.shm<br /><br />TC02的channelSocket.portQ?011<br /><br />7、将mod_jk2.so复制到d:\Apache2\modules目录下:<br />  1.~辑d:\Apache2\conf\httpd.conf文g,在LoadModule那一D代码中dQ?br />  LoadModule jk2_module modules/mod_jk2.so<br />8、将AddDefaultCharset ISO-8859-1 改ؓ AddDefaultCharset GB2312 使Apache自动支持中文昄Q?br />9、在“虚拟主机配|代码段”中dQ(此段配置可以Ҏ你的实际情况q行修改Q?br />  <VirtualHost *:80><br />    ServerAdmin linvsfen?63.com<br />    DocumentRoot "d:/ Tomcat51/webapps/jsp-examples<br />    ServerName localhost<br />    ErrorLog logs/error_log<br />    CustomLog logs/access_log common<br />  </VirtualHost><br /><br />10、徏立ƈ配置Apache2/conf/ workers2.properties,如下Q?br />      # Usually commented out on production environments<br />[logger.apache2]<br />file=”D:/Apache2/logs/error.log?br />level=ERROR<br /># Provide the basic config needed<br />[config]<br />file=D:/Apache2/conf/workers2.properties<br />debug=1<br /># Provide the location of shm file on the Apache web server<br />[shm]<br />file=D:/Apache2/conf/jk2.shm<br />size=1000000<br /><br /># Tomcat51<br />[channel.socket:192.168.0.12:8009]<br />host=192.168.0.12<br />port=8009<br />tomcatId=tomcat51<br />group=balanced<br />lb_factor=1<br />route=tomcat51<br /># Tomcat5A worker<br />[ajp13:192.168.0.12:8009]<br />channel=channel.socket:tomcat51<br /><br /># Tomcat52<br />[channel.socket:192.168.0.12:8011]<br />host=192.168.0.12<br />port=8011<br />tomcatId=tomcat52<br />group=balanced<br />lb_factor=1<br />route=tomcat52<br /># Tomcat52 worker<br />[ajp13:192.168.0.12:8011]<br />channel=channel.socket:tomcat52<br /><br /># Load balanced worker<br />[lb:balanced]<br />worker=ajp13:192.168.0.12:8009<br />worker=ajp13:192.168.0.12:8011<br />timeout=30<br />attempts=2<br />recovery=90<br />stickySession=1<br /><br />noWorkersMsg=Server Busy please retry after some time.<br />noWorkerCodeMsg=503<br /># URI mapping<br />[uri:/jsp-examples/*]<br />info=Mappings for the Tomcat context jsp-examples<br />context=/jsp-examples<br />group=balanced<br /># Define a status worker to test the run-time request behavior to the all workers<br />[status:]<br /># Status URI mapping<br />[uri:/jkstatus/*]<br />group=status<br />11、启动Apache和同时启动tomcat服务?br /><br />二.试集群功能<br />1、访?a href="http://localhost/jsp-examples/sessiontest.jsp"><font color="#002c99">http://localhost/jsp-examples/sessiontest.jsp</font></a>, Apache请求发lTC01Q返回结果,面昄信息tomcat51。URL不变<br />2、再打开一个IEH口Q访?a ><font color="#002c99">http://192.168.0.12/jsp-examples/sessiontest.jsp</font></a><br />Apache请求发lTC02Q返回结果。页面有信息Qtomcat52QURL不变<br /><img src ="http://www.aygfsteel.com/ASONG/aggbug/57627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ASONG/" target="_blank">汪松?/a> 2006-07-11 12:00 <a href="http://www.aygfsteel.com/ASONG/articles/57627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT集群配置http://www.aygfsteel.com/ASONG/articles/57626.html汪松?/dc:creator>汪松?/author>Tue, 11 Jul 2006 03:58:00 GMThttp://www.aygfsteel.com/ASONG/articles/57626.htmlhttp://www.aygfsteel.com/ASONG/comments/57626.htmlhttp://www.aygfsteel.com/ASONG/articles/57626.html#Feedback0http://www.aygfsteel.com/ASONG/comments/commentRss/57626.htmlhttp://www.aygfsteel.com/ASONG/services/trackbacks/57626.html准备软g
Tomcat 5.5.9   JDK1.5.0
一Q配|过E?br />1、    安装JDK1.5.0。采用默认安装就可以?br />2、    安装tomcat到C:\ tomcat 50Q采用完全安装,该程序用于实现负载均衡功能?br />3、    将tomcat50的内容进行完全复Ӟ生成C:\ tomcat 51、C:\ tomcat 52、C:\ tomcat 53Q分别用做集中的节炏V ?br />4、    修改负载均衡规则,使其遵@轮@法QRoundRobinQ?br />4.1testLB.jsp复制到cQ\tomcat50\webapps\balancer文g夹中
   4.2文件夹classes复制到cQ\tomcat50\webapps\balancer\WEB-INF文g夹中
   4.3修改c:\web\tomcat50\webapps\balancer\WEB-INF\web.xml文g如下Q?br />   <filter-mapping>
    <filter-name>BalancerFilter</filter-name>
    <url-pattern>/LoadBalancer</url-pattern>
  </filter-mapping>
5、    在集群中每个节点下Q部|clusterapp应用。Clusterapp包含sessiondata.jspQtest.jspQ脚本。test.jsp是用来验证节点状态的面Qsessiondata.jsp是用来响应用h发送的hQ同时记录会话IDQ会话的起始和最后时_提供用户增加、修攏V删除会话的属性字D和属性|可以通过此来判断会话的持l与否?br />6、    将log4j的log4j-1.2.9.jar复制到每个%tomcatQ?common/ lib下,使其会话日志统一存储到指定的文g中?br />7、    修Ҏ个tomcat的server.xml配置文gQ参数如下表所C?br />配置              Instance 1    Instance 2       Instance 3    Instance 4
Instance Type    Load Balancer    Node 1       Node 2             Node 3
Code name             TC-LB             TC01       TC02             TC03
Home Directory    c:/tomcat50    c:/tomcat51      c:/tomcat52    c:/tomcat53
Server Port    8005          9005      10005            11005
Connector             8080         9080               10080            11080
JK2 AJP Connector    8009         9009               10009            11009
Cluster mcastAddr    228.0.0.4         228.0.0.4    228.0.0.4           228.0.0.4
Cluster mcastPort    45564        45564              45564           45564
tcpListenAddress    127.0.0.1        127.0.0.1    127.0.0.1           127.0.0.1
Cluster tcpListenPort 4000        4001             4002           4003

8、修改c:\web\tomcat50\webapps\balancer\WEB-INF\config\ruler.xml文g如下Q?br /><?xml version="1.0" encoding="UTF-8"?>

<rules>
    <!--  Redirect to server instance based on RoundomRobinRule  -->
    <rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"
        serverInstance="1"
        maxServerInstances="3"
        tcpListenAddress="127.0.0.1"
        tcpListenPort="4001"
        testWebPage="http://localhost:9080/clusterapp/test.jsp"
        redirectUrl="http://localhost:9080/clusterapp/sessiondata.jsp" />
    <rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"
        serverInstance="2"
        maxServerInstances="3"
        tcpListenAddress="127.0.0.1"
        tcpListenPort="4002"
        testWebPage="http://localhost:10080/clusterapp/test.jsp"
    redirectUrl="http://localhost:10080/clusterapp/sessiondata.jsp" />

    <rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"
        serverInstance="3"
        maxServerInstances="3"
        tcpListenAddress="127.0.0.1"
        tcpListenPort="4003"
        testWebPage="http://localhost:11080/clusterapp/test.jsp"
    redirectUrl="http://localhost:11080/clusterapp/sessiondata.jsp" />

    <!--  Default redirect if none of the above rules match  -->
    <rule className="org.apache.webapp.balancer.rules.AcceptEverythingRule"
        redirectUrl="http://localhost:8080/balancer/testLB.jsp" />
</rules>
9、启动tomcat的应用。手动双L个tomcat/bin的startup.batE序?br />二.Webh集群环境下流E?br />1、    启动访问v始页Qhttp://localhost:8080/balancer/testLB.jspQ?br />2、    JSP重定向请求到负蝲均衡qo文gQhttp://localhost:8080/balancer/LoadBalancerQ?br />3、    负载均衡的tomcat接受hQ根据制定的负蝲均衡法Q重定向到可用的集群节点QTC01、TC02、TC03Q?br />4、    对应集中节点的sessiondata.jspQ位于clusterapp应用下)面启动?br />5、    sesiondata.jsp在web上显CZ话的详细信息Q如会话IDQ最后访问时_
在测试的q程中采用RoundRobin法Q通过对Instance 1发v多个http://localhost:8080/balancer/testLB.jsp试hQ发现每个请求返回页面的端口号不完全一_?080?0080?1080端口不规则的出现Q即客户端的讉Kh按照RoundRobin法被重定向C同的服务器上q行处理Q说明该负蝲均衡规则在这个测试中得到正确的体现。在关闭集群中一个节点后再启用它Q能够自动发现该节点Qƈ节点分配h?br />

]]>
վ֩ģ壺 Դ| | ɽ| | ̩| ³ľ| ½| ɽ| | | ÷| Ӧ| ζ| | ɽ| Ͼ| | ʡ| ׶| ѷ| ľ| ϳ| ʡ| | | ۷| | ʡ| Դ| ڽ| | | | ʯ| | ˮ| | ¹Ȫ| | Ͱ| |