2007年11月8日
今天研究了下TOMCAT集群,遇到问题,望解答!
环境是一样的2台机器(下面用tomcat1,tomcat2来表示这两台机器)
按照官方网站的文档配置,2个服务器都能正常起来。而且都监听到了对方的存在,下面是输出信息:
信息: Verification complete. Member disappeared[org.apache.catalina.tribes.membership.MemberImpl[tcp://WDGJ-14:4001,WDGJ-14,4001, alive=1608998,id={101 20 -85 1 -96 113 79 34 -116 24 -43 -93 27 -49 -87 44 }, payload={}, command={}, domain={}, ]]
web.xml的 <distributable/> 已经配置了
使用同一个IE窗口访问2个服务得到的SESSION ID不同,在tomcat1保存一个session attribute,在tomcat2上没有,得到结果,配置失败。SESSION没有被复制到另一个服务。望高手帮帮忙!
我没有做负载均衡,只做了集群。
以下是tomcat官网上的原话,不知道是不是我没理解明白,谁能再给说明下:
1.All your session attributes must implement java.io.Serializable
2.Uncomment the Cluster element in server.xml
If you have defined custom cluster valves, make sure you have the ReplicationValve defined as well under the Cluster element in server.xml
3.If your Tomcat instances are running on the same machine, make sure the tcpListenPort attribute is unique for each instance, in most cases Tomcat is smart enough to resolve this on it 's own by autodetecting available ports in the range 4000-4100
4.Make sure your web.xml has the <distributable/> element or set at your <Context distributable= "true " />
5.If you are using mod_jk, make sure that jvmRoute attribute is set at your Engine <Engine name= "Catalina " jvmRoute= "node01 " > and that the jvmRoute attribute value matches your worker name in workers.properties
6.Make sure that all nodes have the same time and sync with NTP service!
7.Make sure that your loadbalancer is configured for sticky session mode.
两个TOMCAT的server.xml唯一不同的地方就是Receiver的监听端口,一个是4000一个是4001
server.xml文件如下:
<Server port= "8005 " shutdown= "SHUTDOWN ">
<Listener className= "org.apache.catalina.core.AprLifecycleListener " SSLEngine= "on " />
<Listener className= "org.apache.catalina.core.JasperListener " />
<Listener className= "org.apache.catalina.mbeans.ServerLifecycleListener " />
<Listener className= "org.apache.catalina.mbeans.GlobalResourcesLifecycleListener " />
<GlobalNamingResources>
<Resource name= "UserDatabase " auth= "Container "
type= "org.apache.catalina.UserDatabase "
description= "User database that can be updated and saved "
factory= "org.apache.catalina.users.MemoryUserDatabaseFactory "
pathname= "conf/tomcat-users.xml " />
</GlobalNamingResources>
<Service name= "Catalina ">
<Connector port= "80 " protocol= "HTTP/1.1 "
connectionTimeout= "20000 "
redirectPort= "8443 " />
<Connector port= "8009 " protocol= "AJP/1.3 " redirectPort= "8443 " />
<Engine name= "Catalina " defaultHost= "localhost ">
<Cluster className= "org.apache.catalina.ha.tcp.SimpleTcpCluster "
channelSendOptions= "8 ">
<Manager className= "org.apache.catalina.ha.session.DeltaManager "
expireSessionsOnShutdown= "false "
notifyListenersOnReplication= "true "/>
<Channel className= "org.apache.catalina.tribes.group.GroupChannel ">
<Membership className= "org.apache.catalina.tribes.membership.McastService "
address= "228.0.0.4 "
port= "45564 "
frequency= "500 "
dropTime= "3000 "/>
<Receiver className= "org.apache.catalina.tribes.transport.nio.NioReceiver "
address= "auto "
port= "4000 "
autoBind= "100 "
selectorTimeout= "5000 "
maxThreads= "6 "/>
<Sender className= "org.apache.catalina.tribes.transport.ReplicationTransmitter ">
<Transport className= "org.apache.catalina.tribes.transport.nio.PooledParallelSender "/>
</Sender>
<Interceptor className= "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector "/>
<Interceptor className= "org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor "/>
</Channel>
<Valve className= "org.apache.catalina.ha.tcp.ReplicationValve "
filter= " "/>
<Valve className= "org.apache.catalina.ha.session.JvmRouteBinderValve "/>
<Deployer className= "org.apache.catalina.ha.deploy.FarmWarDeployer "
tempDir= "/tmp/war-temp/ "
deployDir= "/tmp/war-deploy/ "
watchDir= "/tmp/war-listen/ "
watchEnabled= "false "/>
<ClusterListener className= "org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener "/>
<ClusterListener className= "org.apache.catalina.ha.session.ClusterSessionListener "/>
</Cluster>
<Realm className= "org.apache.catalina.realm.UserDatabaseRealm "
resourceName= "UserDatabase "/>
<Host name= "localhost " appBase= "webapps "
unpackWARs= "true " autoDeploy= "true "
xmlValidation= "false " xmlNamespaceAware= "false ">
</Host>
</Engine>
</Service>
</Server>
posted @
2007-11-08 15:14 dd.zhang 阅读(1197) |
评论 (1) |
编辑 收藏
2007年9月17日
欢迎大家访问
http://www.thinkinginjava.org(Java开源,Java开源大全,webwork,hibernate,struts,spring等java热门开源介绍)
谷歌网站管理员工具不仅能帮助我们和网站管理员沟通,也提供了
举报垃圾网站的在线渠道。感谢我们的用户,我们收到了很多垃圾网站举报。这些举报对我们改进搜索质量,给出更相关、有用的结果有很大帮助。谷歌用户可以很方便地通过两个渠道(认证的和不需认证的)进行垃圾网站举报。我们往往优先处理通过
认证的渠道(譬如站长工具)递交的垃圾网站。当然,你也可以提交
未经认证报告。由于未经认证报告是匿名举报,我们给他们赋予的优先级会相对较低。
这里我们想讲一讲我们是如何处理从站长管理员工具得到的垃圾网站举报的。
我们评估垃圾网站举报
我们非常重视垃圾网站的举报,并有专门人员及时处理。
我们主要根据我们的
网站管理员指南来处理垃圾网站举报,确定是否赞同或不赞同用户的举报。
垃圾站点通常使用作弊手法来误导搜索引擎使之错误地把用户带入某些网站。谷歌网站管理员指南包含大部分(但不是全部)常见形式的欺骗性或操纵行为。我们建议你经常阅读我们
网站管理员帮助中心上的网站管理员指南。该指南内容将不但帮助你创建一个对搜索引擎友好的网站,而且避免了谷歌和你的用户把你的网站看作是垃圾网站。
在有些情况下,我们并不赞同用户的举报内容,被举报的网站将不会受到任何影响。对确认作弊的垃圾网站我们会将他们转交给我们的软件工程师作出相应的惩罚。
我们对确认的垃圾网站进行惩罚
对确认作弊的网站,我们会人工地或从算法上采取一些行动。当然,我们对作弊网站的惩罚度会视网站违反质量指南的严重程度而定,也就是说,对确认作弊的网站并不总是把他们全部从我们的索引中移去。
改进反垃圾网站算法
反垃圾网站算法是我们打击垃圾网站最有效的方法。对某一网站的举报可能改进我们对所有类似垃圾网站的处理算法。当然,在我们使用我们的新代码之前,我们会大量地测试新代码。这个过程需要时间。当人们问"为什么我举报的网站没有受到惩罚?”,如果是我们确认的垃圾网站举报,很可能是我们正在给出,或者将会给出一个算法上的处理。
人工处理一个垃圾站点
我们也可能人工处理一个确认了的垃圾网站。这个过程显然要快得多,但它并不是一个健全的方法。我们更愿意使用算法改善我们的搜索质量。
我们可能联系网站管理员,让他们改正他们的网站
如果我们发现一个被举报的垃圾站点可能无意中违反了谷歌网站管理员指南,我们会试图联络网站管理员来以纠正他们的错误。我们可能通过
电子邮件来联系网站管理员。如果他们已经在网站管理员工具上
确认了他们的网站,我们会通过
信息中心来传递我们的信息。
我们的宗旨是为用户提供最相关的结果。我们希望我们的用户和网站管理员继续举报垃圾网站。它对我们改进算法和改善搜索质量是有很大帮助的。如果您还不了解什么是垃圾网站,请访问我们的帮助中心或者在我们的
讨论组上发表你的问题。当然,如果你发现一个垃圾网站,
请告诉我们!
posted @
2007-09-17 17:19 dd.zhang 阅读(352) |
评论 (1) |
编辑 收藏