gpt4 book ai didi

java - tomcat中的 session 复制和集群?

转载 作者:行者123 更新时间:2023-11-30 06:24:53 25 4
gpt4 key购买 nike

我已经为我的 java 应用程序配置了 HttpServer2.2 来实现负载平衡集群

但是负载平衡工作正常而集群( session 复制)不工作。

我在 HttpServer 中的 worker.properties 将是 ,

workers.java_home=C:/Program Files/Java/jdk1.6.0_25

#worker.list=worker1,worker2
worker.list=balancer

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.worker2.port=8019
worker.worker2.host=192.168.100.84
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B
# Specifies whether requests with SESSION ID's
# should be routed back to the same #Tomcat worker.
worker.balancer.sticky_session =True

httpd.conf 将是,

<IfModule jk_module>

JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

JkMount /CustomerChat_V1.02.00 balancer
JkMount /CustomerChat_V1.02.00/* balance

</IfModule>

在我的 server.xml for Tomcat one 中,

<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.8"

port="45564"
frequency="500"
dropTime="3000" />

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4200"
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=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;" />

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="D:/cluster/temp/war-temp/"
deployDir="D:/cluster/temp/war-deploy/"
watchDir="D:/cluster/temp/war-listen/"
watchEnabled="false" />

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

在我的server.xml中为Tomcat二

       <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.0.1"
port="4100"
autoBind="100"
selectorTimeout="5000"
maxThreads="6" />

但还是有问题。

当我关闭 Tomcat one 时,新请求将自动转到 tomcat two。但是Tomcat 2并不知道应用程序的当前用户状态和他存储的 session 对象。

希望我们的堆栈成员能帮助我解决这个问题。

非常感谢好的答案。

最佳答案

一些意见/建议

  • 您提到的配置是纯粹的负载平衡。我假设您在 HttpServer 后面使用 Tomcat(在 Tomcat 中使用 AJP 连接器)。
  • HttpServer 只会转发请求给Tomcat 服务器。它本身不维护用户的 session 。
  • session 在 Tomcat 中维护,因此您应该为 session 集群配置 Tomcat
  • 对于 Tomcat 集群,请参阅特定于 tomcat 版本的文档。这是 Tomcat 6.0 session clustering 的链接.
  • 一旦 Tomcat 服务器正确集群, session 将被复制,每个服务器将识别其他服务器用户的 session 。

编辑:

在你的配置中你提到了

worker.balancer.sticky_session =True

这将使 HttpServer 将所有请求发送到首次创建 session 的 tomcat( session 被固定到该服务器,因此名称为粘性 session )。这违背了 session 集群的目的。请将此设置为 false。

关于java - tomcat中的 session 复制和集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com