标签: session-replication

粘性会话和会话复制

我正在评估在tomcat中使用会话复制的粘性会话的情况.从我最初的评估开始,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且任何节点都可以接收请求.

但似乎会话复制通常与粘性会话一起使用,否则只要请求转到其他节点,就需要更改会话ID.ref:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node

如果你必须启用粘性会话,任何人都可以解释会话复制的真正用途吗?因为当具有给定会话ID的请求始终到达同一节点时,您将不必要地在每个节点上复制会话.在节点崩溃的情况下它可能是有益的,但是这不会经常发生并且仅使用会话复制似乎是一种过度杀伤.

session tomcat session-replication

26
推荐指数
2
解决办法
3万
查看次数

Tomcat的群集/会话复制无法正确复制

我正在本地计算机上的Tomcat 7上设置群集/复制,以评估它是否与我的环境/代码库一起使用.

建立

我在不同端口上运行的兄弟目录中有两个相同的tomcat服务器.我有httpd侦听其他两个端口并连接到两个tomcat实例作为VirtualHosts.我可以在配置的端口上访问和交互两个环境; 一切都按预期工作.

tomcat服务器在server.xml中启用了这样的集群:

   <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="4001"
                  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>
Run Code Online (Sandbox Code Playgroud)

我将distributable标记添加到web.xml的最开头:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">
  <distributable />

  (lots more...)

</web-app>
Run Code Online (Sandbox Code Playgroud)

什么工作

当服务器启动时,它们会记录

Sep 16, 2013 1:44:23 PM org.apache.catalina.ha.tcp.SimpleTcpCluster startInternal
INFO: Cluster is about to …
Run Code Online (Sandbox Code Playgroud)

java tomcat session-replication cluster-computing

19
推荐指数
2
解决办法
3万
查看次数

AWS上的memcached-session-manager

我有一个在Amazon Web Services上运行的网站,它使用Elastic Beanstalk部署并运行至少2个EC2微实例.自动扩展策略已到位,因此可以根据网站中的流量进行扩展和缩小.由于这种自动扩展策略,我想避免使用粘性会话,因此我使用的是memcached-session-manager.我正在使用Amazon ElastiCache(小实例)作为memcached服务器.

context.xml中的配置如下:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="sessions.myinstancecode.0001.use1.cache.amazonaws.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="none"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
Run Code Online (Sandbox Code Playgroud)

当流量较低(即少于10个在线用户)时,此工作正常,但有时会导致EC2实例重新启动.您可以想象,如果网站当前正在两个实例上运行并且他们都决定同时重新启动,那么该网站将无法访问,这是一个大问题.这些是在EC2实例决定重新启动之前在Amazon S3上轮换的tail_catalina.log中的最后一行:

Jun 13, 2012 12:32:27 AM de.javakaffee.web.msm.BackupSessionTask handleException
WARNING: Could not store session 42F9761AC24F826E1FC3F2A834FBF442 in memcached.
Note that this session was relocated to this node because the original node was not available.
net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: sessions.myinstancecode.0001.use1.cache.amazonaws.com/10.194.23.99:11211
    at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:73)
    at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:230)
    at de.javakaffee.web.msm.BackupSessionTask.doBackupSession(BackupSessionTask.java:195)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:120)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:51)
    at de.javakaffee.web.msm.BackupSessionService$SynchronousExecutorService.submit(BackupSessionService.java:339)
    at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:198)
    at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:967)
    at de.javakaffee.web.msm.SessionTrackerValve.backupSession(SessionTrackerValve.java:226)
    at de.javakaffee.web.msm.SessionTrackerValve.invoke(SessionTrackerValve.java:128)
    at …
Run Code Online (Sandbox Code Playgroud)

memcached session-replication session-management amazon-web-services amazon-elasticache

12
推荐指数
1
解决办法
5850
查看次数

Java EE会话复制有哪些不同的方法?

我正在开发一个需要非常高可用性的项目,我的团队目前正在为未来版本升级一些基础架构和软件.

我们希望启用的功能之一是不仅跨不同服务器进行会话复制,而且理想情况下跨不同站点进行会话复制(地理位置分散).那可能吗?有什么办法?

对于我到目前为止所看到的,为了启用会话复制,通常的供应商方法是以下之一:

  • 可序列化的会话属性
  • web.xml中的<distributable />标记,以及特定于供应商的xml中的其他配置

还有其他方法吗?我应该进行内存复制吗?或者我应该坚持会话状态?哪些应用服务器厂商实施每个解决方

编辑:我开始了赏金,所以我真的在寻找一个全面的答案.:)

session-replication session-state cluster-computing java-ee

10
推荐指数
1
解决办法
3719
查看次数

jboss群集会话复制不起作用(多个jsessionid cookie)

我正在尝试在我的Web应用程序上进行身份验证,该应用程序部署在以2个节点在集群模式下工作的jboss上.

在成功进行身份验证后,我会被重定向到管理页面,其中过滤器会检查我是否已登录.

在独立模式下,它工作得很好但是当我部署到使用群集模式的生产时,过滤器拒绝我的请求,因为它无法访问我在身份验证时建立的会话参数.

使用开发人员工具,我看到有3个JSESSIONID cookie设置:一个用于路径,另一个/用于/myapplication路径,另一个用于/myapplication路径(我已经在开始流程之前清除了所有这些路径)的JSESSIONID-34234 .

浏览jboss文档我看不到这个的解释,虽然它似乎是我的问题的根源.

如何在JBoss群集中进行身份验证(我使用基于Spring安全http表单的身份验证)?

jboss session-replication load-balancing session-variables session-cookies

7
推荐指数
1
解决办法
896
查看次数

FOSS ASP.Net会话复制解决方案?

我一直在寻找(几乎没有成功)asp.net的免费/开源会话集群和复制解决方案.我遇到了常见的嫌疑人(indexus sharedcache,memcached),但每个都有一些限制.

  • Indexus - 非常不成熟,存根会话接口实现.不过,它本来就是一个很好的缓存解决方案.
  • Memcached - 很少的复制/故障转移支持,无需转到数据库后端.几个SF.Net项目 - 在早期阶段全部流产......似乎没有任何牵引力,而且似乎已经全部商业化了.
  • Microsoft Velocity - 不是OSS,但看起来不错.不幸的是,我没有看到CTP1支持故障转移的位置,并且没有明确的路线图.我担心这个可能会像许多其他MS开发项目一样陷入以太.

我已经习惯了Java世界,在这个世界里,人们认为许多解决这类问题的方法都可以从FOSS世界获得.

.Net世界上有没有合适的替代品?

asp.net session failover session-replication cluster-computing

6
推荐指数
1
解决办法
1232
查看次数

Liferay集群会话复制

我试图在tomcat上的liferay中启用会话复制而没有太多运气.我已经编写了一个小测试,以查看是否正在复制会话,并且它在我在webapps/examples下放置的单独JSP文件中运行良好,但是当我在liferay-porlet中输入相同的代码时,只有JSESSION是正确的.

   HttpSession httpSession = request.getSession();
   String testTime = (String) httpSession.getAttribute("testTime");
   String before = testTime;

   testTime = Long.toString(System.currentTimeMillis());
   httpSession.setAttribute("testTime", testTime);

   String sessionid = httpSession.getId();
   System.out.println("JSESSIONID:    "+sessionid);
   System.out.println("TEST TIME WAS: "+before);
   System.out.println("TEST TIME IS:  "+testTime);
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么它不能在liferay-portlet中工作?我已将distributable添加到portlet/WEB-INF/web.xml

编辑1:版本

liferay 6.1.1
Tomcat 7.0.47
Run Code Online (Sandbox Code Playgroud)

编辑2:我尝试了另一个测试.

   HttpSession httpSession = request.getSession();
   String testTime = (String) httpSession.getAttribute("testTime");
   String before = testTime;

   if(testTime == null) {
       testTime = Long.toString(System.currentTimeMillis());
       httpSession.setAttribute("testTime", testTime);
   }

   String sessionid = httpSession.getId();
   System.out.println("JSESSIONID:    "+sessionid);
   System.out.println("TEST TIME WAS: "+before);
   System.out.println("TEST TIME IS:  "+testTime);
Run Code Online (Sandbox Code Playgroud)

这次我只设置变量null.它在liferay之外的JSP中可以正常工作,但在liferay中它就像这样.

  1. 获取请求的第一个服务器获取null结束设置变量
  2. 当其他服务器获取请求时,它也会变为null并设置变量 …

session-replication cluster-computing liferay

5
推荐指数
1
解决办法
2709
查看次数

会话复制不能与tomcat7一起使用

在我的nginx中,我设置了上游和设置粘性会话:

upstream tomcat {
      ip_hash;
      server localhost:XXXX;
      server localhost:XXXY;
      server localhost:XXYY;
}
Run Code Online (Sandbox Code Playgroud)

<distributable/>在我的web.xml中添加了标签(在所有的tomcats中)

在我的tomcat/conf/server.xml文件中添加了这个:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="6">
          <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="5000"
                      selectorTimeout="100"
                      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"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>

          <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.ClusterSessionListener"/>
        </Cluster>
Run Code Online (Sandbox Code Playgroud)

在我的tomcat/conf/context.xml中添加了这个:

<Manager className="org.apache.catalina.ha.session.BackupManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"
                   mapSendOptions="6"/>
Run Code Online (Sandbox Code Playgroud)

但现在我可以登录我的应用程序了.如果所有3个或任何2个实例都启动并且我登录,我会看到JSESSIONID e..g xyz234.tomcat1

现在,如果我关闭tomcat1,它将带我回到登录页面,因为tomcat1已关闭.我再次登录,它创建了与tomcat2相关的会话,同时,我再次启动tomcat1,我的应用程序将带我回到登录页面.所以,我面临两个问题:

  1. 我想保持登录,即使我的tomcat(召开会话)中的任何一个都下降了.
  2. 如果那个tomcat再次出现,我仍然应该保持警惕.

注意:我使用的是JSF2应用程序,因此不确定它是否与它有任何关系.

tomcat session-replication load-balancing nginx cluster-computing

5
推荐指数
0
解决办法
837
查看次数

Tomcat集群——在不同机器上配置2个tomcat

我正在尝试创建一个 tomcat 集群以复制会话。

我的 2 个 tomcats 存在于两台不同的机器上,

所有可用的示例都显示了同一台机器上 2 个 tomcat 的集群。

配置文件中tomcat的ips在哪里配置?

(目前,当我使用默认配置时,出现错误:”

Oct 30, 2013 10:21:03 AM org.apache.catalina.ha.session.DeltaManager getAllClusterSessions
INFO: Manager [localhost#/HATest]: skipping state transfer. No members active in cluster group."
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:我的(默认的,不是很有趣)server.xml:

<?xml version='1.0' encoding='utf-8'?>
Run Code Online (Sandbox Code Playgroud)

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language …
Run Code Online (Sandbox Code Playgroud)

session tomcat session-replication

5
推荐指数
1
解决办法
7182
查看次数

tomcat集群只是会话复制的方式吗?

我在ubuntu服务器上测试Tomcat Clusteringsession replicationapache作为前端负载均衡器.根据我的测试经验,我说最好不要使用tomcat集群,而是将每个节点作为独立运行,不知道彼此没有任何会话复制,因为我觉得它很慢,需要花费很多时间来启动tomcat服务并消耗更多内存.并且FarmDeployer总是在部署中是不可靠的,并且整个配置应该放置在<Host></Host>农场部署者工作的元素下以及每个虚拟主机,因此是一个巨大的server.xml文件.下面是我使用的节点之一的集群配置的tomcat虚拟主机.

<Host name="site1.mydomain.net" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="virtual_log1." suffix=".log" timestamp="true"/>
<Context path="" docBase="/usr/share/tomcat/webapps/myapp" debug="0" reloadable="true"/>

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Manager className="org.apache.catalina.ha.session.DeltaManager" 
          expireSessionsOnShutdown="false"
          notifyListenersOnReplication="true"/>

        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.1.8"
                  port="4001"
                  selectorTimeout="100"
                  maxThreads="6"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4002"
                      securePort="-1"
                      host="192.168.1.9"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/>

             <!--   <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4002"
                      securePort="-1"
                      host="192.168.1.9"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/> -->

            </Interceptor>
        </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"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/usr/share/tomcat/temp/"
            deployDir="/usr/share/tomcat/webapps/"
            watchDir="/usr/share/tomcat/watch/"
            watchEnabled="true"/>
    </Cluster> …
Run Code Online (Sandbox Code Playgroud)

session tomcat session-replication cluster-computing failovercluster

3
推荐指数
1
解决办法
8711
查看次数

tomcat中的会话复制和集群?

我已经配置了HttpServer2.2实现load balancingClustering我的java应用程序.

Load Balancing工作正常,Clustering(session replication)不起作用.

worker.propertiesHttpServer意志是,

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
Run Code Online (Sandbox Code Playgroud)

而且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>
Run Code Online (Sandbox Code Playgroud)

在我server.xmlTomcat one,

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" …
Run Code Online (Sandbox Code Playgroud)

java tomcat session-replication load-balancing cluster-computing

2
推荐指数
1
解决办法
5124
查看次数

如何使会话数据可序列化

以前我们已经实现了粘性会话.

这是我们环境的链接:apache中的Sticky Session不起作用

我们的下一个任务是实现会话复制.

我们目前正在使用tomcat示例cart.jsp来演示此行为.

据说所有session属性都必须实现java.io.serializable.

你有任何关于在哪里实施它的提示吗?我们正在密切关注本教程.

tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

java jsp tomcat session-replication

2
推荐指数
1
解决办法
9008
查看次数

Tomcat 7 复制 - 不同机器

我有2只雄猫:

1) 10.0.50.35

2)10.0.110.31

10.0.50.35 服务器.xml:

<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>           
Run Code Online (Sandbox Code Playgroud)

这是 10.0.110.31 server.xml

<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"
            bind="10.0.50.35"
                    port="45564"
                    frequency="500"
                    dropTime="3000"/>
        <Receiver …
Run Code Online (Sandbox Code Playgroud)

session tomcat session-replication

1
推荐指数
1
解决办法
3469
查看次数