gpt4 book ai didi

apache - 启用集群后始终会重新创建 session

转载 作者:行者123 更新时间:2023-11-28 22:30:39 25 4
gpt4 key购买 nike

Apache/Tomcat 设置:

            Apache
|
/ \
/ \
C1 C2 Clusters
| |
/ \ / \
/ \ / \
T1 T2 T3 T4 Tomcats
  • window 服务器 2012
  • Apache 2.2.25
  • mod_jk 1.2.20
  • Tomcat 7.0.42

我在 C1 和 C2 上进行了负载平衡。 T1和T2是一组,T3和T4是另一组。 C1和C2相互独立。

workers.properties:

worker.list=jkstatus,Cluster1,Cluster2,C1T1,C1T2,C2T1,C2T2
worker.jkstatus.type=status

# Configuration Cluster 1
worker.Cluster1.type=lb
worker.Cluster1.balance_workers=C1T1,C1T2

worker.C1T1.port=8119
worker.C1T1.host=localhost
worker.C1T1.type=ajp13
worker.C1T1.lbfactor=1
worker.C1T1.redirect=C1T2

worker.C1T2.port=8129
worker.C1T2.host=localhost
worker.C1T2.type=ajp13
worker.C1T2.lbfactor=1
worker.C1T2.redirect=C1T1

# Configuration Cluster 2
worker.Cluster2.type=lb
worker.Cluster2.balance_workers=C2T1,C2T2

worker.C2T1.port=8219
worker.C2T1.host=localhost
worker.C2T1.type=ajp13
worker.C2T1.lbfactor=1
worker.C2T1.redirect=C2T2

worker.C2T2.port=8229
worker.C2T2.host=localhost
worker.C2T2.type=ajp13
worker.C2T2.lbfactor=1
worker.C2T2.redirect=C2T1

Apache 以这种方式将每个请求重定向到 Cluster1Cluster2:

JkMount /MyApp/* Cluster1

server.xml:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="C1T1">
<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="45562" frequency="500" dropTime="3000"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" autoBind="100" selectorTimeout="5000" maxThreads="6"/>
<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"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
</Engine>

T1/T2 具有相同的地址/端口,T3/T4 具有相同的地址/端口(与 T1/T2 不同)。

我关注了这个:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html还有这个:http://tomcat.apache.org/connectors-doc/reference/workers.html

负载平衡工作正常。如果我关闭集群上的一个 Tomcat,Apache 会将所有请求重定向到另一个 Tomcat。 session 也被复制(我使用 JConsole 来跟踪两个 Tomcat 上的事件 session 数)。

现在,这是我的问题:

每次我按下 F5 都会创建一个新 session (我在 Tomcat 上使用 @SessionBean)。如果我通过使用 HTTP 端口直接访问 Tomcat 来绕过集群,则会创建一个新 session ,但是当我按 F5 键时不会创建新 session 。

我想知道为什么在使用 Apache 访问时,每个请求都会创建一个新 session (以及如何修复它!)。

最佳答案

终于明白了。

集群并没有导致这种情况。它是 JSF 的 JSESSIONID cookie:它的路径是 /MyApp/而不是 / (apache 转发 //MyApp/)。

编辑:必须设置 sessionCookiePath="/"<Context ...></Context> 上tomcats ( conf/context.xml) 的文件如下:

<Context sessionCookiePath="/">
...
</Context>

关于apache - 启用集群后始终会重新创建 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20353973/

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