|
这意味着一个带有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的请求。
注意:local_worker默认值是0,local_worker_only默认值也是0。
6.为什么需要这么复杂的过程吗?
因为我们对于一个关闭的节点需要一个具有灵性的维护。
在节点前面的平衡器周期性的对每个节点的特定端口进行查询。如果我们从集群中移走一个节点,我们就会隐性的关闭掉这个特定的端口。由于负载平衡器不能连接它,这个节点将被标记为down。但是我们没有移动在那个关闭的节点上的session到其它的节点上。在这个环境下,如果平衡器发送一个没有session id的请求到一个端口被关掉的节点,那么一个错误将发生。如果平衡器测试到一个节点被标记为down的状态,而没有其它的节点允许发送没有session id的请求。这样这些陈旧的session请求就只有路由到那个被关闭的节点才能被接受。在一段时间后,这些陈旧的session将超时。由于所有的陈旧的session过期,那个不可达(被关闭)的节点将失去这个请求。同时也会导致我们的servlet系统发送一个没有session id的重定向回应给浏览器。
但是可能被关闭的节点将会up,重新加入到集群中来,在它上面仍将保留着陈旧的session。所以在最后一个session超时后,更新节点能够为陈旧的session的恢复带来希望,而不是杀掉sessions或者把它们移到其它节点上。而且有时如果那些陈旧的session中有许多big的对象,那么移动它们也将花费许多时间。
7.jni类型的Worker属性:
jni worker会在web server进程中打开一个JVM,并在其中执行Tomcat,这叫做“进程内”worker。来往于JVM的消息将通过调用JNI方法被传递,这使jni worker比那些需要使用ajp消息通讯的“进程外”worker执行的更快。
注意:由于JVM是多线程的,jni worker应该只被用于在支持对线程的web server(AOLServer, IIS, Netscape and Apache 2.0)上。同时还应该确认在web server上使用的线程方案是否与被使用的JK web server插件相匹配。
由于jni worker 打开了一个JVM,它将接受一些属性(例如classpath等)并将其传递给JVM:
worker.worker名.class_path:“进程内”的JVM要使用的classpath。它将包括所有的Tomcat的jar文件和class、配置文件等。
为了获得JSP编译器的支持,我们需要将Javac添加到classpath中。当然对于Java2需要添加tools.jar到classpath,而对于JDK1.xx则要添加classes.zip到classpath。
worker.worker名.class_path:用于以多行的形式声明多个classpath。JK环境将用“:”或者“;”把这些classpath;连接起来。
例如:给名为“wrkjni”的worker设置classpath。
worker.wrkjni.class_path=/var/tomcat3/lib/tomcat.jarworker.wrkjni.class_path=/opt/IBMJava2-131/lib/tools.jar
worker.worker名.bridge:用于标识将通过JNI方式被使用的Tomcat的类型。此属性目前有两个属性值:tomcat32 or tomcat33。Tomcat 3.2.x虽然已经过时,但是被提供用于发布在一些类似iSeries系统上。此属性的默认值为tomcat33。
例如:给“wrkjni”设置bridge类型为tomcat3.3。
worker.wrkjni.bridge=tomcat33
worker.worker名.cmd_line: 此属性提供了在Tomcat启动代码执行的命令行。使用时将命令行的命令、参数分解为多个cmd_line属性。JK环境通过在各个cmd_line属性值之间添加空格将这些cmd_line连接在一起。
例如:设置“wrkjni”的cmd_line属性。
worker.wrkjni.cmd_line=-configworker.wrkjni.cmd_line=/etc/tomcat3/conf/alt-server.xmlworker.wrkjni.cmd_line=-homeworker.wrkjni.cmd_line=/var/tomcat3
上面例子中的第一行声明了-config参数名,而第二行声明了与之对应的参数值。第三行与第四行同理。
worker.worker名.jvm_lib:用于声明JVM的实现库的完整路径。Jni worker使用这个路径动态装载JVM。
例如:设置“wrkjni”的JVM shared lib (IBM SDK on Linux)。
worker.wrkjni.jvm_lib=/opt/IBMJava2-131/jre/bin/classic/libjvm.so
例如:设置“wrkjni”的JVM shared lib (Sun SDK on Windows)。
worker.wrkjni.jvm_lib=c:\JDK\1.3.1\jre\bin\classic
worker.worker名.stdout:设置JVM写它的System.out的完整路径位置。
例如:将“wrkjni”的JVM系统输出路径设置为/var/log/http/jk-jvm-out.log。
worker.wrkjni.stdout=/var/log/http/jk-jvm-out.log
worker.worker名.stderr:设置JVM写它的System.err的完整路径位置。
例如:将“wrkjni”的JVM系统错误输出路径设置为/var/log/http/jk-jvm-err.log
worker.wrkjni.stderr=/var/log/http/jk-jvm-out.log
worker.worker名.ms:设置JVM的初始堆大小。
例如:设置“wrkjni”的JVM的初始堆为64M。
worker.wrkjni.ms=64
worker.worker名.mx:设置JVM的最大的堆大小。
例如:设置“wrkjni”的JVM堆最大为128M
worker.wrkjni.mx=128
worker.worker名.sysprops:设置JVM的系统属性。
(阅读次数:)
共4页: 上一页 [1] [2] 3 [4] 下一页
|