﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-ASONG-文章分类-应用服务器</title><link>http://www.blogjava.net/ASONG/category/12968.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 15:08:06 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 15:08:06 GMT</pubDate><ttl>60</ttl><item><title>apache+Tomcat负载平衡设置详解</title><link>http://www.blogjava.net/ASONG/articles/83177.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Fri, 24 Nov 2006 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/83177.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/83177.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/83177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/83177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/83177.html</trackback:ping><description><![CDATA[
		<strong>
				<span style="FONT-SIZE: 16px">一、简介：</span>
				<br />
				<br />
		</strong>每个Tomcat worker是一个服务于web server、等待执行servlet的Tomcat实例。例如我们经常使用像Apache之类的web server转发sevlet请求给位于其后面的一个Tomcat进程（也就是前面所说的worker）。本文详细介绍了如何配置各种类型worker和loadbalance，并说明了各种类型worker的特性和loadbalance配置的原理。<br /><br /><b><span style="FONT-SIZE: 16px">二、为什么使用Tomcat workers：</span></b><br /><br />上文描述了一个非常简单的结构，事实上能够配置多个Tomcat workers来处理web server转发的servlet请求。而这样配置的理由不外乎以下几种假想环境：<br />* 我们在开发环境中发布不同的Tomcat workers为各自不同的应用服务。当然在开发环境中的开发者共享同一个web server，但是每个Tomcat worke服务于拥有它的开发者。<br />* 我们在不同的Tomcat进程上定义各自的虚拟主机，这样不同的公司可以使用各自的web site，从而使他们的web site得到了合理的分割。<br />* 我们提供负载平衡的web site，也就意味着同时使用多个Tomcat workers，而每个Tomcat worker具有独立的主机并且在workers之间要分配通过web server转发来的请求。<br />当然，这些假想情况也许并不能涵盖使用多个workers的所有状况。<br /><br /><b><span style="FONT-SIZE: 16px">三、workers.properties配置说明：</span></b><br /><br />定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件。本文将详细解释如何进行配置的：<br /><br /><b>1.定义Workers列表：</b><br />定义workers的方法就是在apache的conf目录下编写一个workers.properties文件，使其作为apache的插件来发挥作用。<br />定义workers列表的格式：<br />worker.list =&lt;使用“,”分割的worker 名字列表&gt;<br />例如：<br /><pre class="overflow"><br />worker.list= worker1, worker2<br /></pre><br />当apache启动时，workers.properties作为插件将初始化出现在worker.list列表中的workers。<br /><br /><b>2.定义Workers的类型：</b><br /><br />每个被命名的worker都应有一些关于其自身的附加信息。这些信息包括了worker的类型和其它相关信息。这里讨论的是JK1.2.5中定义的workers类型。<br />定义worker类型的格式：<br />worker . worker名字. type =&lt;worker类型&gt;<br />worker名字的命名最好遵循java的命名规范。<br />worker类型取值于下面的表格：<br />定义一个名为“local”的worker，其使用ajpv12协议与Tomcat 进程通讯：<br /><pre class="overflow"><br />worker.local.type=ajp12<br /></pre><br />定义一个名为“remote”的worker，其使用ajpv13协议与Tomcat 进程通讯：<br /><pre class="overflow"><br />worker.remote.type=ajp13<br /></pre><br />定义一个名为“fast”的worker，其使用JNI的方式与Tomcat 进程通讯：<br /><pre class="overflow"><br />worker.fast.type=jni<br /></pre><br />定义一个名为“loadbalancer”的worker，其作为对多个Tomcat 进程的负载平衡使用：<br /><pre class="overflow"><br />worker.loadbalancer.type=lb<br /></pre><br />各个类型具有不同的行为，我们在下文中会详细解释。<br /><br /><b>3.设置Worker属性：</b><br /><br />在定义worker之后，还需要提供各个worker的属性，这些属性的定义使用下面的方式：<br />worker.&lt;worker名字&gt;.&lt;属性&gt;=&lt;属性值&gt;<br /><br />3-1 ajp12类型的Worker属性：.<br /><br />ajp12类型的worker工作时使用基于TCP/IP socket的ajpv12协议转发请求给“进程外”Tomcat worker。<br />ajp12 worker属性如下：<br />host：<br />侦听ajp12请求的Tomcat worker主机。<br />port：<br />Tomcat worker主机的侦听端口。<br />lbfactor：<br />当此Tomcat worker被用于一个负载平衡worker使用时，此属性将被使用。它定义了此worker的负载平衡权值。<br />例如：下面的“worker1”定义了一个位于www.x.com主机上的Tomcat，它使用8007端口侦听apache发来的请求，并具有2.5的负载权值<br /><pre class="overflow"><br />worker.worker1.host=www.x.com<br />worker.worker1.port=8007<br />worker.worker1.lbfactor=2.5<br /></pre><br />注意：在ajpv12协议中，针对每个请求都要一个连接建立、使用、关闭。其默认侦听端口为8007。<br /><br />3-2 ajp13类型的Worker属性：<br /><br />ajp13类型的worker工作时使用基于TCP/IP socket的ajpv13协议转发请求给“进程外”Tomcat worker。<br />ajpv13协议与ajpv12协议的主要不同：<br />* ajpv13具有更丰富的二进制协议，它使用将频繁使用的字符串编码为小整数的方式对请求数据进行压缩。<br />* ajpv13重用打开的socket并保留这些打开的socket以处理将来的请求。这在apache与Tomcat之间具有防火墙的网络环境下是必要的。<br />* ajpv13具有对SSL信息的处理能力，以致容器能够实现SSL的相关方法（如isSecure()）。<br /><br /><br />注意：ajp13当前只能用于支持“进程外”协议的Tomcat 4.0.x, 4.1.x and 5。<br />下表描述了ajp13worker接受的属性：<br /><br />host：<br />侦听ajp13请求的Tomcat worker主机。<br /><br />port：<br />Tomcat worker主机的侦听端口。 <br /><br />lbfactor：<br />当此Tomcat worker被用于一个负载平衡worker使用时，此属性将被使用。它定义了此worker的负载平衡权值。<br /><br />cachesize：<br />当在多线程的web server（例如apache2.0、IIS 、Netscape）中使用JK时，此属性是有效的。如果将cachesize的值设置为较高的值，这些支持多线程的web server将获得很好的处理能力。如果此属性不被设置，则连接cache特性将失效。<br /><br />cache_timeout：<br />本属性用于声明JK在cache中保留一个打开的socket的时间，它对减少web serer的线程数有所帮助。<br />使用cache_timeout的原因：<br />周所周知，一个身背重负的web server（例如apache）建立childs/threads来处理负载，而当负载减少时它将销毁无用的childs/threads。每个child在转发请求给Tomcat时要打开一个ajp13连接，而在Tomcat那一端也将建立一个ajp13线程与之通讯。但是问题出现在一个ajp13连接建立完成后，child没有及时的释放那个ajp13连接，由于web server1将保持它的childs/threads运行已处理高负载，即使childs/threads处理快速的静态内容，在Tomcat端也将积累很多的无用ajp13线程。<br /><br />socket_keepalive：<br />当防火墙位于web server与Tomcat之间时，防火墙将尝试断开未激活的网络连接。此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置，一般为120秒)，这样将防止防火墙切断未激活的网络连接。<br />但此设置并不是万能钥匙，它对于某些防火墙也无能为力。<br /><br />socket_timeout：<br />此属性说明连接在未激活的状况下持续多久，web server将主动切断之。这是一个使Tomcat端的陈旧线程不致过多的好方法，但是也带来了在下一次请求到来时需要重新打开socket的开销。此属性与cache_timeout有类似的功效，但是它工作在non-cache模式。<br /><br />connect_timeout：<br />web server在连接建立后将一个PING请求发送到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 /><br />prepost_timeout：<br />web server在转发一个请求后将一个PING请求发送到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 /><br />reply_timeout：<br />此属性告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。默认情况下web server将永远等待。属性值为web server要等待回应的时间（以ms为单位），所以如果具有运行时间较长的servlet时设置其值要小心。此属性在jk 1.2.6版本被增加进来，以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为失效的。<br /><br />recovery_options：<br />此属性说明了web server在检测到Tomcat失败后如何进行恢复工作。默认情况下，web server将转发请求给处于负载平衡模式中的另一个Tomcat。属性值为0，说明全部恢复；属性值为1，说明如果在Tomcat接到请求后出现失败状况，则不进行恢复；属性值为2，说明如果在Tomcat发送http头给客户端后出现失败状况，则不进行恢复；属性值为3，说明如果在Tomcat接到请求后出现失败状况或者在Tomcat发送http头给客户端后出现失败状况，则不进行恢复。此属性在jk 1.2.6版本被增加进来，以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为全部恢复。<br /><br />例如：一个名为“worker2”的worker的配置：<br /><pre class="overflow"><br />worker.worker2.host=www2.x.com<br />worker.worker2.port=8009<br />worker.worker2.lbfactor=3.5<br />worker.worker2.cachesize=10<br />worker.worker2.cache_timeout=600<br />worker.worker2.socket_keepalive=1<br />worker "worker2" want ajp13 connection to be dropped after 5mn (timeout)<br />worker.worker2.socket_timeout=300<br /></pre><br /><br />说明：上例中的worker要求操作系统在连接上发送KEEP-ALIVE信号。<br />注意：在ajpv13协议中默认端口为8009。<br /><br /><b>4.设置lb Worker属性：</b><br />负载平衡类型的worker并不与Tomcat worker通讯，它负责管理这些Tomcat worker。<br /><br />其管理范围如下：<br />* 初始化在web server的worker列表中定义的worker。<br />* 使用worker的负载平衡权值，执行基于权值的负载平衡，将数量多的请求发送到负载平衡权值高（在web server看来就是更加健壮的）的worker。<br />* 维护在同一个Tomcat worker上的同一个session的请求，使其发送到同一个Tomcat worker上。以达到Tomcat worker上的session一致性、持续性。<br />* 标识已经失败的Tomcat workers，悬空发向它们的请求，在被lb worker管理的其它workers上寻找可以失败恢复的worker。<br />被同一个lb worker管理多个worker之间的负载平衡的（基于它们的lbfactor和当前用户session），也可以尽量避免由于单一的Tomcat进程死掉而造成这个网站被“杀”的不良反应。<br />下表说明了lb worker接受的属性：<br />* balanced_workers：一个由“，”分割的worker列表，用来声明lb worker需要被管理的workers。这些workers不应出现在worker.list属性中。<br />* sticky_session：表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。如果属性值不为0，它将被设置为JK_TRUE，session将是粘性的，即SESSION ID的请求路由回到相同的Tomcat worker；当Tomcat正使用能够跨越多个Tomcat实例持久化session数据的Session Manager时，它将被设置为JK_FALSE。属性默认值为JK_TRUE。<br />例如：worker balance1管理着两个workers：worker1、worker2：<br /><pre class="overflow"><br />worker.balance1.balanced_workers=worker1, worker2<br /></pre><br /><br /><b>5.高级lb Worker属性：</b><br /><br />JK 1.2.x版本通过增加两个新的属性：local_worker_only 和 local_worker 为lb worker增添了新的负载平衡和容错支持。<br />下面让我们举一个实际的环境作为example：<br />一个集群具有两个节点(worker1+worker2)，一个web server与tomcat workers一前一后，一个负载平衡器（lb Worker）位于节点的前面、web server的后面。<br />配置如下：<br /><pre class="overflow"><br />worker.list=router<br /># Define a 'local_worker' worker using ajp13<br />worker.worker1.port=8009<br />worker.worker1.host=node1.domain.org<br />worker.worker1.type=ajp13<br />worker.worker1.lbfactor=1<br />worker.worker1.local_worker=1<br /># Define another 'local_worker' worker using ajp13<br />worker.worker2.port=8009<br />worker.worker2.host=node2.domain.org<br />worker.worker2.type=ajp13<br />worker.worker2.lbfactor=1<br />worker.worker2.local_worker=0<br /># Define the LB worker<br />worker.router.type=lb<br />worker.router.balanced_workers=worker1,worker2<br />worker.router.local_worker_only=1<br /></pre><br /><br />在worker1和worker2上的local_worker标志告诉lb_worker哪个连接属于本地worker。<br /><br />如果local_worker值为非0，则它将被设置为JK_TRUE，用来标记“local worker”，而JK_FALSE的情况则相反。如果至少一个worker被标记为local worker，则lb_worker将工作于local worker模式。这种模式下，所有的local workers将被移到在lb_worker中的内部worker列表的头部。<br /><br />这意味着一个带有session id的请求到达lb_worker时，相应的worker（根据权值排序，权值最大的那个worker）将被确定作为此请求的接受/处理者。如果这个worker死掉/当机，请求将被发送到处于非错误状态的第一个local worker；如果一个没有session id的请求到达lb_worker时，此请求将被路由到第一个local worker。如果所有的local worker均处于错误状态，则这时“local_worker_only”标志显得尤其重要。如果local_worker_only的属性值为非0，则它被设置为 JK_TRUE，否则被设置为 JK_FALSE。当它被设置为 JK_TRUE时，这个没有session id的请求将得到一个错误作为回应，否则lb_worker将尝试将请求路由到其它的被管理的worker上。如果其中的一个worker处于错误状态，并且恢复会话的工作并没有任何改变，local worker将查找这个没有session id的请求（因为在local worker中保存有这个请求的session），而其它的worker只能查找带有session id的请求。<br /><br />注意：local_worker默认值是0，local_worker_only默认值也是0。 <br /><br /><b>6.为什么需要这么复杂的过程吗？</b><br /><br />因为我们对于一个关闭的节点需要一个具有灵性的维护。<br />在节点前面的平衡器周期性的对每个节点的特定端口进行查询。如果我们从集群中移走一个节点，我们就会隐性的关闭掉这个特定的端口。由于负载平衡器不能连接它，这个节点将被标记为down。但是我们没有移动在那个关闭的节点上的session到其它的节点上。在这个环境下，如果平衡器发送一个没有session id的请求到一个端口被关掉的节点，那么一个错误将发生。如果平衡器测试到一个节点被标记为down的状态，而没有其它的节点允许发送没有session id的请求。这样这些陈旧的session请求就只有路由到那个被关闭的节点才能被接受。在一段时间后，这些陈旧的session将超时。由于所有的陈旧的session过期，那个不可达（被关闭）的节点将失去这个请求。同时也会导致我们的servlet系统发送一个没有session id的重定向回应给浏览器。<br /><br />但是可能被关闭的节点将会up，重新加入到集群中来，在它上面仍将保留着陈旧的session。所以在最后一个session超时后，更新节点能够为陈旧的session的恢复带来希望，而不是杀掉sessions或者把它们移到其它节点上。而且有时如果那些陈旧的session中有许多big的对象，那么移动它们也将花费许多时间。<br /><br /><b>7.jni类型的Worker属性：</b><br /><br />jni worker会在web server进程中打开一个JVM，并在其中执行Tomcat，这叫做“进程内”worker。来往于JVM的消息将通过调用JNI方法被传递，这使jni worker比那些需要使用ajp消息通讯的“进程外”worker执行的更快。<br /><br />注意：由于JVM是多线程的，jni worker应该只被用于在支持对线程的web server（AOLServer, IIS, Netscape and Apache 2.0）上。同时还应该确认在web server上使用的线程方案是否与被使用的JK web server插件相匹配。<br /><br />由于jni worker 打开了一个JVM，它将接受一些属性（例如classpath等）并将其传递给JVM：<br />worker.worker名.class_path：“进程内”的JVM要使用的classpath。它将包括所有的Tomcat的jar文件和class、配置文件等。<br /><br />为了获得JSP编译器的支持，我们需要将Javac添加到classpath中。当然对于Java2需要添加tools.jar到classpath，而对于JDK1.xx则要添加classes.zip到classpath。<br /><br />worker.worker名.class_path：用于以多行的形式声明多个classpath。JK环境将用“：”或者“；”把这些classpath；连接起来。<br /><br />例如：给名为“wrkjni”的worker设置classpath。<br /><br /><pre class="overflow"><br />worker.wrkjni.class_path=/var/tomcat3/lib/tomcat.jar<br />worker.wrkjni.class_path=/opt/IBMJava2-131/lib/tools.jar<br /></pre><br /><br />worker.worker名.bridge：用于标识将通过JNI方式被使用的Tomcat的类型。此属性目前有两个属性值：tomcat32 or tomcat33。Tomcat 3.2.x虽然已经过时，但是被提供用于发布在一些类似iSeries系统上。此属性的默认值为tomcat33。<br />例如：给“wrkjni”设置bridge类型为tomcat3.3。<br /><br /><pre class="overflow"><br />worker.wrkjni.bridge=tomcat33<br /></pre><br /><br />worker.worker名.cmd_line： 此属性提供了在Tomcat启动代码执行的命令行。使用时将命令行的命令、参数分解为多个cmd_line属性。JK环境通过在各个cmd_line属性值之间添加空格将这些cmd_line连接在一起。<br />例如：设置“wrkjni”的cmd_line属性。<br /><br /><pre class="overflow"><br />worker.wrkjni.cmd_line=-config<br />worker.wrkjni.cmd_line=/etc/tomcat3/conf/alt-server.xml<br />worker.wrkjni.cmd_line=-home<br />worker.wrkjni.cmd_line=/var/tomcat3<br /></pre><br /><br />上面例子中的第一行声明了-config参数名，而第二行声明了与之对应的参数值。第三行与第四行同理。<br /><br />worker.worker名.jvm_lib：用于声明JVM的实现库的完整路径。Jni worker使用这个路径动态装载JVM。<br />例如：设置“wrkjni”的JVM shared lib (IBM SDK on Linux)。<br /><pre class="overflow"><br />worker.wrkjni.jvm_lib=/opt/IBMJava2-131/jre/bin/classic/libjvm.so<br /></pre><br />例如：设置“wrkjni”的JVM shared lib (Sun SDK on Windows)。<br /><pre class="overflow"><br />worker.wrkjni.jvm_lib=c:\JDK\1.3.1\jre\bin\classic<br /></pre><br />worker.worker名.stdout：设置JVM写它的System.out的完整路径位置。 <br />例如：将“wrkjni”的JVM系统输出路径设置为/var/log/http/jk-jvm-out.log。<br /><pre class="overflow"><br />worker.wrkjni.stdout=/var/log/http/jk-jvm-out.log<br /></pre><br />worker.worker名.stderr：设置JVM写它的System.err的完整路径位置。<br />例如：将“wrkjni”的JVM系统错误输出路径设置为/var/log/http/jk-jvm-err.log<br /><pre class="overflow"><br />worker.wrkjni.stderr=/var/log/http/jk-jvm-out.log<br /></pre><br />worker.worker名.ms：设置JVM的初始堆大小。<br />例如：设置“wrkjni”的JVM的初始堆为64M。<br /><pre class="overflow"><br />worker.wrkjni.ms=64<br /></pre><br /><br />worker.worker名.mx：设置JVM的最大的堆大小。<br />例如：设置“wrkjni”的JVM堆最大为128M<br /><pre class="overflow"><br />worker.wrkjni.mx=128<br /></pre><br /><br />worker.worker名.sysprops：设置JVM的系统属性。<br />例如：设置“wrkjni”的JVM使用法语。<br /><pre class="overflow"><br />worker.wrkjni.sysprops=-Duser.region=FR<br /></pre><br /><br />worker.worker名.ld_path：设置附加的动态链接库路径(类似于LD_LIBRARY_PATH)<br />例如：添加一些动态链接库路径到“wrkjni”的java环境中。<br /><pre class="overflow"><br />worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/<br />worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/classic<br /></pre><br /><br />注意：在Linux下，上面的ld_path并不能更新LD_LIBRARY_PATH，所以需要在执行web server之前手动更新LD_LIBRARY_PATH,。<br /><br /><b>8.属性文件宏：</b><br /><br />我们可以在属性文件中定义“宏”。这些宏让我们定义属性，并在以后使用它们来构建其它的属性文件。当我们修改Java Home、Tomcat Home、系统路径分隔符时这是很有用的。<br />例如：定义了属性workers.tomcat_home、workers.java_home。<br /><pre class="overflow"><br />workers.tomcat_home=d:\tomcat<br />workers.java_home=d:\sdk\jdk1.2.2<br /></pre><br />在定义worker.inprocess.class_path时就可以使用前面定义的workers.tomcat_home。<br /><pre class="overflow"><br />worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes<br /></pre><br /><br /><br /><b>9.一个简单而完整的worker.properties：</b><br /><br />文件中定义了比较完整的结构，可以做为参考模版：<br />* 一个位于localhost的使用8007端口的ajp12 worker；<br />    * 一个位于localhost的使用8008端口的ajp13 worker；<br />    * 一个jni worker；<br />    *  一个lb worker：负责ajp12 worker、ajp13 workers的负载平衡。<br />文件内容如下：<br /><pre class="overflow"><br /># Define some properties<br />workers.apache_log=/var/log/httpd/<br />workers.tomcat_home=/var/tomcat3<br />workers.java_home=/opt/IBMJava2-131/<br />ps=/<br /># Define 4 workers, 3 real workers using ajp12, ajp13, jni, the last one being a loadbalancing worker<br />worker.list=worker1, worker2, worker3, worker4<br /># Set properties for worker1 (ajp12)<br />worker.worker1.type=ajp12<br />worker.worker1.host=locahost<br />worker.worker1.port=8007<br />worker.worker1.lbfactor=5<br /># Set properties for worker2 (ajp13)<br />worker.worker2.type=ajp13<br />worker.worker2.host=locahost<br />worker.worker2.port=8009<br />worker.worker2.lbfactor=50<br />worker.worker2.cachesize=10<br />worker.worker2.cache_timeout=600<br />worker.worker2.socket_keepalive=1<br />worker.worker2.socket_timeout=300<br /># Set properties for worker3 (jni)<br />worker.worker3.type=jni<br /># Set worker3 bridge type, here Tomcat 3.3<br />worker.worker3.bridge=tomcat33<br /># Set worker3 classpath<br />worker.worker3.class_path=$(workers.tomcat_home)$(ps)classes<br />worker.worker3.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar<br /># Set worker3 tomcat command line<br />worker.worker3.cmd_line=-home<br />worker.worker3.cmd_line=$(workers.tomcat_home)<br /># Set worker3 Tomcat/JVM settings<br />worker.worker3.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.so<br />worker.worker3.stdout=$(workers.apache_log)$(ps)inprocess.stdout<br />worker.worker3.stderr=$(workers.apache_log)$(ps)inprocess.stderr<br />worker.worker3.sysprops=tomcat.home=$(workers.tomcat_home)<br /># Set properties for worker4 (lb) which use worker1 and worker2<br />worker.worker4.balanced_workers=worker1,worker2<br /></pre><br /><img src ="http://www.blogjava.net/ASONG/aggbug/83177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-11-24 09:40 <a href="http://www.blogjava.net/ASONG/articles/83177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松实现Apache,Tomcat集群和负载均衡</title><link>http://www.blogjava.net/ASONG/articles/83043.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Thu, 23 Nov 2006 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/83043.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/83043.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/83043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/83043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/83043.html</trackback:ping><description><![CDATA[
		<div class="tit">轻松实现Apache,Tomcat集群和负载均衡</div>
		<div class="date">2006-11-18 12:15</div>
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">
												<p> 作者:罗代均 ldj_work#126.com,转载请保持完整性</p>
												<p>
														<strong>0， 环境说明</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>第一部分：负载均衡</strong>
												</p>
												<p>    负载均衡，就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理</p>
												<p>
														<strong>   1.安装apche,tomcat</strong>
												</p>
												<p>   <a href="http://httpd.apache.org/">http://httpd.apache.org/</a> 下载Apache 2.0.55</p>
												<p>    <a href="http://tomcat.apache.org/download-55.cgi">http://tomcat.apache.org/download-55.cgi</a> 下载tomcat5.5 zip版本（解压即可，绿色版）</p>
												<p>   <a href="http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/">http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/</a>  下载mod_jk,注意和  apache版本匹配</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配置文件http.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文件，内容如下</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文件路径<br />JkWorkersFile conf/workers.properties</div>
												<div forimg="1">
												</div>
												<div forimg="1">#指定那些请求交给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文件，内容如下</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 端口号，在tomcat下server.xml配置,默认8009<br />worker.tomcat1.host=localhost  #tomcat的主机地址，如不为本机，请填写ip地址<br />worker.tomcat1.type=ajp13<br />worker.tomcat1.lbfactor = 1   #server的加权比重，值越高，分得的请求越多</div>
												<div forimg="1">
												</div>
												<div forimg="1">#========tomcat2========</div>
												<div forimg="1">worker.tomcat2.port=9009       #ajp13 端口号，在tomcat下server.xml配置,默认8009<br />worker.tomcat2.host=localhost  #tomcat的主机地址，如不为本机，请填写ip地址<br />worker.tomcat2.type=ajp13<br />worker.tomcat2.lbfactor = 1   #server的加权比重，值越高，分得的请求越多</div>
												<div forimg="1">
														<br />#========controller,负载均衡控制器========<br />worker.controller.type=lb<br />worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担请求的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配置文件server.xml</strong>
												</div>
												<div forimg="1">如果你在不同电脑上安装tomcat,tomcat的安装数量为一个，可以不必修改tomcat配置文件</div>
												<div forimg="1">我这里是在同一台电脑上安装两个tomcat，所以需要更改其中一个的设置</div>
												<div forimg="1">
												</div>
												<div forimg="1">打开tomcat2/conf/server.xml文件</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">&lt;% <br />   System.out.println("===========================");<br />%&gt;<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,进行测试</strong>
																		</div>
																		<div forimg="1">
																		</div>
																		<div forimg="1">通过 <a href="http://localhost/test/test.jsp">http://localhost/test/test.jsp</a> 访问，查看tomcat1的窗口，可以看到打印了一行"=========="</div>
																		<div forimg="1">再刷新一次，tomcat2也打印了一条，再刷新，可以看到请求会被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>第二部分，配置集群</strong>
																				</div>
																				<div forimg="1">   只配置负载均衡还不行，还要session复制，也就是说其中任何一个tomcat的添加的session，是要同步复制到其它tomcat， 集群内的tomcat都有相同的session</div>
																				<div forimg="1">
																				</div>
																				<div forimg="1">
																						<strong>1. 修改tomcat1, tomcat2的server.xml</strong>,将集群部分配置的在注释符删掉,并将tomcat2的4001端口改为4002，以避免与tomcat冲突，当然，如果是两台电脑，是不用改端口的，去掉注释符即可</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>2，修改测试项目test</strong></div><div forimg="1">修改test.jsp,内容如下</div><div forimg="1"></div><div forimg="1">  &lt;%@ page contentType="text/html; charset=GBK" %&gt;<br />&lt;%@ page import="java.util.*" %&gt;<br />&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;<br />Server Info:<br />&lt;%<br />out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"&lt;br&gt;");%&gt;<br />&lt;%<br />  out.println("&lt;br&gt; ID " + session.getId()+"&lt;br&gt;");</div><div forimg="1">  // 如果有新的 Session 属性设置<br />  String dataName = request.getParameter("dataName");<br />  if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br />     String dataValue = request.getParameter("dataValue");<br />     session.setAttribute(dataName, dataValue);<br />  }</div><div forimg="1">  out.print("&lt;b&gt;Session 列表&lt;/b&gt;");</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+"&lt;br&gt;");<br />         System.out.println( name + " = " + value);<br />   }<br />%&gt;<br />  &lt;form action="index.jsp" method="POST"&gt;<br />    名称:&lt;input type=text size=20 name="dataName"&gt;<br />     &lt;br&gt;<br />    值:&lt;input type=text size=20 name="dataValue"&gt;<br />     &lt;br&gt;<br />    &lt;input type=submit&gt;<br />   &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div><div forimg="1"></div><div forimg="1">然后在test 新建WEB-INF目录，WEB-INF下新建web.xml,内容如下</div><div forimg="1">&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a><a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>" version="2.4"&gt;<br />       &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br />      <strong><font color="#ff0000"> &lt;distributable/&gt;</font></strong><br />&lt;/web-app&gt;</div><div forimg="1"></div><div forimg="1">注意：在你的应用的web.xml加入 <font color="#ff0000"><strong> &lt;distributable/&gt;</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  ,值为 cdut 的session,提交查询，新开一个ie窗口，再提交查询，如图，可以看到，两个tomcat 是负载均衡，并且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.blogjava.net/ASONG/aggbug/83043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-11-23 14:57 <a href="http://www.blogjava.net/ASONG/articles/83043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实践中整理出tomcat集群和负载均衡</title><link>http://www.blogjava.net/ASONG/articles/82967.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Thu, 23 Nov 2006 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/82967.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/82967.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/82967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/82967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/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为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4
<p><br /><font size="4"><strong>(二)安装过程<br /></strong></font>(1)在三台要安装tomcat的服务器上先安装jdk<br />(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径<br />(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动<br />(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为7080/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>    &lt;Connector port="8080" maxHttpHeaderSize="8192"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true" /&gt;</td></tr></tbody></table><p><br /><br />修改后的配置为</p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    &lt;Connector port="7080" maxHttpHeaderSize="8192"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true" /&gt;</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 href="http://192.168.0.4:9999/"><font color="#ff0000">http://192.168.0.4:9999</font></a></p><p><br /><font size="4"><strong>(三)负载均衡配置过程<br /></strong></font>(1)在那台要安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:\Program Files\Apache Group\Apache2<br />(2)安装后测试apache能否正常启动，调试到能够正常启动http://192.168.0.88<br />(3)下载jk2.0.4后解压缩文件<br />(4)将解压缩后的目录中的modules目录中的mod_jk2.so文件复制到apache的安装目录下的modules目录中,我的为C:\Program Files\Apache Group\Apache2\modules<br />(5)修改apache的安装目录中的conf目录的配置文件httpd.conf，在文件中加LoadModule模块配置信息的最后加上一句LoadModule jk2_module modules/mod_jk2.so<br />(6)分别修改三个tomcat的配置文件conf/server.xml，修改内容如下<br />修改前</p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    &lt;!-- 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). --&gt;<br /><br />    &lt;!-- You should set jvmRoute to support load-balancing via AJP ie :<br />    &lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"&gt;         <br />    --&gt; <br />         <br />    &lt;!-- Define the top level container in our container hierarchy --&gt;<br />    &lt;Engine name="Catalina" defaultHost="localhost"&gt;</td></tr></tbody></table><br />修改后<p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>    &lt;!-- 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). --&gt;<br /><br />    &lt;!-- You should set jvmRoute to support load-balancing via AJP ie :--&gt;<br />    &lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1"&gt;         <br />     <br />         <br />    &lt;!-- Define the top level container in our container hierarchy <br />    &lt;Engine name="Catalina" defaultHost="localhost"&gt;<br />    --&gt;</td></tr></tbody></table><p><br />将其中的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"<br /><br />(7)然后重启三个tomcat，调试能够正常启动。<br />(8)在apache的安装目录中的conf目录下创建文件workers2.propertie，写入文件内容如下<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 />#配置第一个服务器 <br />tomcatId=tomcat1 #要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名称一致<br />debug=0 <br />lb_factor=1 #负载平衡因子，数字越大请求被分配的几率越高<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>&lt;%@ page contentType="text/html; charset=GBK" %&gt;<br />&lt;%@ page import="java.util.*" %&gt;<br />&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;<br />Server Info:<br />&lt;%<br />out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"&lt;br&gt;");%&gt;<br />&lt;%<br />  out.println("&lt;br&gt; ID " + session.getId()+"&lt;br&gt;");<br /><br />  // 如果有新的 Session 属性设置<br />  String dataName = request.getParameter("dataName");<br />  if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br />     String dataValue = request.getParameter("dataValue");<br />     session.setAttribute(dataName, dataValue);<br />  }<br /><br />  out.print("&lt;b&gt;Session 列表&lt;/b&gt;");<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+"&lt;br&gt;");<br />         System.out.println( name + " = " + value);<br />   }<br />%&gt;<br />  &lt;form action="index.jsp" method="POST"&gt;<br />    名称:&lt;input type=text size=20 name="dataName"&gt;<br />     &lt;br&gt;<br />    值:&lt;input type=text size=20 name="dataValue"&gt;<br />     &lt;br&gt;<br />    &lt;input type=submit&gt;<br />   &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></td></tr></tbody></table><p><br />(10)重启apache服务器和三个tomcat服务器,到此负载 均衡已配置完成。测试负载均衡先测试apache,访问http://192.168.0.88/jkstatus.jsp<br />能否正常访问，并查询其中的内容，有三个tomcat的相关配置信息和负载说明,访问http://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>       &lt;!-- <br />        &lt;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"&gt;<br /><br />            &lt;Membership <br />                className="org.apache.catalina.cluster.mcast.McastService"<br />                mcastAddr="228.0.0.4"<br />                mcastPort="45564"<br />                mcastFrequency="500"<br />                mcastDropTime="3000"/&gt;<br /><br />            &lt;Receiver <br />                className="org.apache.catalina.cluster.tcp.ReplicationListener"<br />                tcpListenAddress="auto"<br />                tcpListenPort="4001"<br />                tcpSelectorTimeout="100"<br />                tcpThreadCount="6"/&gt;<br /><br />            &lt;Sender<br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"<br />                replicationMode="pooled"<br />                ackTimeout="5000"/&gt;<br /><br />            &lt;Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"<br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/&gt;<br />                   <br />            &lt;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"/&gt;<br />                      <br />            &lt;ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/&gt;<br />        &lt;/Cluster&gt;<br />        --&gt;   </td></tr></tbody></table><p><br /> 修改后</p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>       &lt;!-- modify by whh --&gt;<br />        &lt;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"&gt;<br /><br />            &lt;Membership <br />                className="org.apache.catalina.cluster.mcast.McastService"<br />                mcastAddr="228.0.0.4"<br />                mcastPort="45564"<br />                mcastFrequency="500"<br />                mcastDropTime="3000"/&gt;<br /><br />            &lt;Receiver <br />                className="org.apache.catalina.cluster.tcp.ReplicationListener"<br />                tcpListenAddress="auto"<br />                tcpListenPort="4001"<br />                tcpSelectorTimeout="100"<br />                tcpThreadCount="6"/&gt;<br /><br />            &lt;Sender<br />                className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"<br />                replicationMode="pooled"<br />                ackTimeout="5000"/&gt;<br /><br />            &lt;Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"<br />                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/&gt;<br />                   <br />            &lt;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"/&gt;<br />                      <br />            &lt;ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/&gt;<br />        &lt;/Cluster&gt;<br />       &lt;!-- modify by whh --&gt;</td></tr></tbody></table><br />将集群配置选项的注释放开即可，如上。<br />(3)重启三个tomcat。到此tomcat的集群已配置完成。<p><font size="4"><strong>(五)应用配置<br /></strong></font>对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文件要添加如下一句配置<br />&lt;distributable/&gt;<br />配置前</p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;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"&gt;<br />  &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><p><br />配置后</p><p></p><table cellspacing="1" cellpadding="1" width="95%" bgcolor="#c0c0c0" border="1"><tbody><tr><td>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;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"&gt;<br />  &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br />   &lt;distributable/&gt;<br />&lt;/web-app&gt;</td></tr></tbody></table><img src ="http://www.blogjava.net/ASONG/aggbug/82967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-11-23 10:32 <a href="http://www.blogjava.net/ASONG/articles/82967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5性能优化</title><link>http://www.blogjava.net/ASONG/articles/81428.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Thu, 16 Nov 2006 00:53:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/81428.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/81428.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/81428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/81428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/81428.html</trackback:ping><description><![CDATA[
		<div id="art" style="MARGIN: 15px; LINE-HEIGHT: 150%" width="560">
				<span style="FONT-SIZE: 12px">tomcat优化设置 <br /><br />  1. 如何加大tomcat连接数 <br /><br />在tomcat配置文件server.xml中的&lt;Connector ... /&gt;配置中，和连接数相关的参数有：<br />minProcessors：最小空闲连接线程数，用于提高系统处理性能，默认值为10<br />maxProcessors：最大连接线程数，即：并发处理的最大请求数，默认值为75<br />acceptCount：允许的最大连接数，应大于等于maxProcessors，默认值为100<br />enableLookups：是否反查域名，取值为：true或false。为了提高处理能力，应设置为false<br />connectionTimeout：网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。<br /><br />其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数，应同时加大这两个参数。<br /><br /><br />web server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是1000个左右。Unix中如何设置这些参数，请参阅Unix常用监控和管理命令 <br /><br />tomcat4中的配置示例：<br />&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"<br />port="8080" minProcessors="10" maxProcessors="1024"<br />enableLookups="false" redirectPort="8443"<br />acceptCount="1024" debug="0" connectionTimeout="30000" /&gt; <br /><br />对于其他端口的侦听配置，以此类推。<br /><br />2. tomcat中如何禁止列目录下的文件<br />在{tomcat_home}/conf/web.xml中，把listings参数设置成false即可，如下：<br />&lt;servlet&gt;<br />...<br />&lt;init-param&gt;<br />&lt;param-name&gt;listings&lt;/param-name&gt;<br />&lt;param-value&gt;false&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />...<br />&lt;/servlet&gt; <br /><br />3. 如何加大tomcat可以使用的内存<br /><br />tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，需要调大。<br /><br />Unix下，在文件{tomcat_home}/bin/catalina.sh的前面，增加如下设置：<br />JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'<br />需要把这个两个参数值调大。例如：<br />JAVA_OPTS='-Xms256m -Xmx512m'<br />表示初始化内存为256MB，可以使用的最大内存为512MB</span>
				<div>
				</div>
		</div>
<img src ="http://www.blogjava.net/ASONG/aggbug/81428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-11-16 08:53 <a href="http://www.blogjava.net/ASONG/articles/81428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增加Tomcat使用内存 </title><link>http://www.blogjava.net/ASONG/articles/81425.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Thu, 16 Nov 2006 00:48:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/81425.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/81425.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/81425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/81425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/81425.html</trackback:ping><description><![CDATA[大家都知道，JAVA程序启动时都会JVM都会分配一个初始内存和最大内存给这个应用程序。这个初始内存和最大内存在一定程度都会影响程序的性能。比如说在应用程序用到最大内存的时候，JVM是要先去做垃圾回收的动作，释放被占用的一些内存。<br />        所以想调整Tomcat的启动时初始内存和最大内存就需要向JVM声明，一般的JAVA程序在运行都可以通过中-Xms -Xmx来调整应用程序的初始内存和最大内存: <br />        如：java -Xms64m  -Xmx128m  a.jar.<br />tomcat的启动程序是包装过的，不能直接使用java -X..... tomcat.*来改变内存的设置。在Tomcat在改变这个设置<br />有两种方法：<br />1.    就需要在环境变量中加上TOMCAT_OPTS, CATALINA_OPTS两个属性，<br />        如 SET  CATALINA_OPTS= -Xms64m -Xmx512m;<br />        ms是最小的，mx是最大，64m, 512m分别是指内存的容量.<br /><br />2.    修改Catalina.bat文件<br />       在166行“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<br /><img src ="http://www.blogjava.net/ASONG/aggbug/81425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-11-16 08:48 <a href="http://www.blogjava.net/ASONG/articles/81425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache和tomcat的集群配置</title><link>http://www.blogjava.net/ASONG/articles/57627.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Tue, 11 Jul 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/57627.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/57627.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/57627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/57627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/57627.html</trackback:ping><description><![CDATA[我的运行环境:Windows2003 Server SP4 + J2SDK1.5.0 + Apache2.0.54 + Tomcat5.5.9<br /><br />  **准备软件:<br />  1、Apache 2.0.54   <br />  2、Tomcat 5.5.14 <br />  3、Jk2连接器（mod_jk2.so）<br />一：软件的部署和配置计划：(修改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 />软件的安装步骤如下：<br />1、    首先按照JDK1.5.0<br />2、    安装Apache ，按照完成后启动Apache，使用IE访问<a href="http://localhost/"><font color="#002c99">http://localhost</font></a> 测试Apache运行是否正常。<br />3、    在192.168.0.12上安装tomcat，安装完成后，启动tomcat，使用IE访问<a href="http://localhost:8080/"><font color="#002c99">http://localhost:8080</font></a> ，测试tomcat运行是否正常。<br />4、    编写一个jsp文件（sessiontest.jsp）把testsession.jsp放到webapps/jsp-examplse;，将tomcat51拷贝到的d:/下,修改名字tomcat52；<br />在tomcat51中的testsession.jsp有提示信息Index Page Served By tocmat51，在tomcat52的testsession.jsp有提示信息Index Page Served By tomcat52<br /><br />4、在tc01和tc02bin下编辑startup.bat，分别添加<br />set CATALINA_HOME=D:\tomcat51和set CATALINA_HOME=D:\tomcat52<br /><br />5、    注释掉tc01和tc02中server.xml的<br />   &lt;!-- Define the top level container in our container hierarchy<br />&lt;Engine name=”Catalina” defaultHost=”localhost” debug=”0”&gt;<br />--&gt;<br />和把下面的注释去掉<br />&lt;Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat51"&gt;<br />TC02的jvmRoute="tomcat52"<br />6、    在TC01的jk2.properties添加：<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.port＝8011<br /><br />7、将mod_jk2.so复制到d:\Apache2\modules目录下：<br />  1.编辑d:\Apache2\conf\httpd.conf文件,在LoadModule那一段代码中添加：<br />  LoadModule jk2_module modules/mod_jk2.so<br />8、将AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset GB2312 使Apache自动支持中文显示；<br />9、在“虚拟主机配置代码段”中添加：（此段配置可以根据你的实际情况进行修改）<br />  &lt;VirtualHost *:80&gt;<br />    ServerAdmin linvsfen◎163.com<br />    DocumentRoot "d:/ Tomcat51/webapps/jsp-examples<br />    ServerName localhost<br />    ErrorLog logs/error_log<br />    CustomLog logs/access_log common<br />  &lt;/VirtualHost&gt;<br /><br />10、建立并配置Apache2/conf/ workers2.properties,如下：<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将请求发给TC01，返回结果，页面显示信息tomcat51。URL不变<br />2、再打开一个IE窗口，访问<a href="http://192.168.0.12/jsp-examples/sessiontest.jsp"><font color="#002c99">http://192.168.0.12/jsp-examples/sessiontest.jsp</font></a><br />Apache将请求发给TC02，返回结果。页面有信息：tomcat52，URL不变<br /><img src ="http://www.blogjava.net/ASONG/aggbug/57627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-07-11 12:00 <a href="http://www.blogjava.net/ASONG/articles/57627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT集群配置</title><link>http://www.blogjava.net/ASONG/articles/57626.html</link><dc:creator>汪松明</dc:creator><author>汪松明</author><pubDate>Tue, 11 Jul 2006 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/ASONG/articles/57626.html</guid><wfw:comment>http://www.blogjava.net/ASONG/comments/57626.html</wfw:comment><comments>http://www.blogjava.net/ASONG/articles/57626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ASONG/comments/commentRss/57626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ASONG/services/trackbacks/57626.html</trackback:ping><description><![CDATA[我的运行环境:Windows2003 Server SP4 + J2SDK1.5.0 +Tomcat5.5.9<br />准备软件<br />Tomcat 5.5.9   JDK1.5.0<br />一．配置过程<br />1、    安装JDK1.5.0。采用默认安装就可以。<br />2、    安装tomcat到C:\ tomcat 50，采用完全安装，该程序用于实现负载均衡功能。<br />3、    将tomcat50的内容进行完全复制，生成C:\ tomcat 51、C:\ tomcat 52、C:\ tomcat 53，分别用做集群中的节点。  <br />4、    修改负载均衡规则，使其遵循轮循算法（RoundRobin）。<br />4.1将testLB.jsp复制到c：\tomcat50\webapps\balancer文件夹中<br />   4.2将文件夹classes复制到c：\tomcat50\webapps\balancer\WEB-INF文件夹中<br />   4.3修改c:\web\tomcat50\webapps\balancer\WEB-INF\web.xml文件如下：<br />   &lt;filter-mapping&gt;<br />    &lt;filter-name&gt;BalancerFilter&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/LoadBalancer&lt;/url-pattern&gt;<br />  &lt;/filter-mapping&gt;<br />5、    在集群中每个节点下，部署clusterapp应用。Clusterapp包含sessiondata.jsp，test.jsp，脚本。test.jsp是用来验证节点状态的页面；sessiondata.jsp是用来响应用户所发送的请求，同时记录会话ID，会话的起始和最后时间，提供用户增加、修改、删除会话的属性字段和属性值，可以通过此来判断会话的持续与否。<br />6、    将log4j的log4j-1.2.9.jar复制到每个％tomcat％/common/ lib下，使其将会话日志统一存储到指定的文件中。<br />7、    修改每个tomcat的server.xml配置文件，参数如下表所示。<br />配置              Instance 1    Instance 2       Instance 3    Instance 4<br />Instance Type    Load Balancer    Node 1       Node 2             Node 3<br />Code name             TC-LB             TC01       TC02             TC03<br />Home Directory    c:/tomcat50    c:/tomcat51      c:/tomcat52    c:/tomcat53<br />Server Port    8005          9005      10005            11005<br />Connector             8080         9080               10080            11080<br />JK2 AJP Connector    8009         9009               10009            11009<br />Cluster mcastAddr    228.0.0.4         228.0.0.4    228.0.0.4           228.0.0.4<br />Cluster mcastPort    45564        45564              45564           45564<br />tcpListenAddress    127.0.0.1        127.0.0.1    127.0.0.1           127.0.0.1<br />Cluster tcpListenPort 4000        4001             4002           4003<br /><br />8、修改c:\web\tomcat50\webapps\balancer\WEB-INF\config\ruler.xml文件如下：<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br /><br />&lt;rules&gt;<br />    &lt;!--  Redirect to server instance based on RoundomRobinRule  --&gt;<br />    &lt;rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"<br />        serverInstance="1"<br />        maxServerInstances="3"<br />        tcpListenAddress="127.0.0.1"<br />        tcpListenPort="4001"<br />        testWebPage="http://localhost:9080/clusterapp/test.jsp"<br />        redirectUrl="http://localhost:9080/clusterapp/sessiondata.jsp" /&gt;<br />    &lt;rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"<br />        serverInstance="2"<br />        maxServerInstances="3"<br />        tcpListenAddress="127.0.0.1"<br />        tcpListenPort="4002"<br />        testWebPage="http://localhost:10080/clusterapp/test.jsp"<br />    redirectUrl="http://localhost:10080/clusterapp/sessiondata.jsp" /&gt;<br /><br />    &lt;rule className="org.apache.webapp.balancer.rules.RandomRedirectRule"<br />        serverInstance="3"<br />        maxServerInstances="3"<br />        tcpListenAddress="127.0.0.1"<br />        tcpListenPort="4003"<br />        testWebPage="http://localhost:11080/clusterapp/test.jsp"<br />    redirectUrl="http://localhost:11080/clusterapp/sessiondata.jsp" /&gt;<br /><br />    &lt;!--  Default redirect if none of the above rules match  --&gt;<br />    &lt;rule className="org.apache.webapp.balancer.rules.AcceptEverythingRule"<br />        redirectUrl="http://localhost:8080/balancer/testLB.jsp" /&gt;<br />&lt;/rules&gt;<br />9、启动tomcat的应用。手动双击每个tomcat/bin的startup.bat程序。<br />二．Web请求集群环境下流程<br />1、    启动访问起始页（http://localhost:8080/balancer/testLB.jsp）<br />2、    JSP重定向请求到负载均衡过滤文件（http://localhost:8080/balancer/LoadBalancer）<br />3、    负载均衡的tomcat接受请求，根据制定的负载均衡算法，重定向到可用的集群节点（TC01、TC02、TC03）<br />4、    对应集群中节点的sessiondata.jsp（位于clusterapp应用下）页面将启动。<br />5、    sesiondata.jsp将在web上显示会话的详细信息（如会话ID，最后访问时间）<br />在测试的过程中采用RoundRobin算法，通过对Instance 1发起多个http://localhost:8080/balancer/testLB.jsp测试请求，发现每个请求返回页面的端口号不完全一致，在9080、10080、11080端口不规则的出现，即客户端的访问请求按照RoundRobin算法被重定向到不同的服务器上进行处理，说明该负载均衡规则在这个测试中得到正确的体现。在关闭集群中一个节点后再启用它，能够自动发现该节点，并为该节点分配请求。<br /><img src ="http://www.blogjava.net/ASONG/aggbug/57626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ASONG/" target="_blank">汪松明</a> 2006-07-11 11:58 <a href="http://www.blogjava.net/ASONG/articles/57626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>