我正在评估在tomcat中使用会话复制的粘性会话的情况.从我最初的评估开始,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且任何节点都可以接收请求.
但似乎会话复制通常与粘性会话一起使用,否则只要请求转到其他节点,就需要更改会话ID.ref:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
如果你必须启用粘性会话,任何人都可以解释会话复制的真正用途吗?因为当具有给定会话ID的请求始终到达同一节点时,您将不必要地在每个节点上复制会话.在节点崩溃的情况下它可能是有益的,但是这不会经常发生并且仅使用会话复制似乎是一种过度杀伤.
我正在本地计算机上的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>
我将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>
当服务器启动时,它们会记录
Sep 16, 2013 1:44:23 PM org.apache.catalina.ha.tcp.SimpleTcpCluster startInternal
INFO: Cluster is about to …我有一个在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" />
当流量较低(即少于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 …memcached session-replication session-management amazon-web-services amazon-elasticache
我正在开发一个需要非常高可用性的项目,我的团队目前正在为未来版本升级一些基础架构和软件.
我们希望启用的功能之一是不仅跨不同服务器进行会话复制,而且理想情况下跨不同站点进行会话复制(地理位置分散).那可能吗?有什么办法?
对于我到目前为止所看到的,为了启用会话复制,通常的供应商方法是以下之一:
还有其他方法吗?我应该进行内存复制吗?或者我应该坚持会话状态?哪些应用服务器厂商实施每个解决方
编辑:我开始了赏金,所以我真的在寻找一个全面的答案.:)
我正在尝试在我的Web应用程序上进行身份验证,该应用程序部署在以2个节点在集群模式下工作的jboss上.
在成功进行身份验证后,我会被重定向到管理页面,其中过滤器会检查我是否已登录.
在独立模式下,它工作得很好但是当我部署到使用群集模式的生产时,过滤器拒绝我的请求,因为它无法访问我在身份验证时建立的会话参数.
使用开发人员工具,我看到有3个JSESSIONID cookie设置:一个用于路径,另一个/用于/myapplication路径,另一个用于/myapplication路径(我已经在开始流程之前清除了所有这些路径)的JSESSIONID-34234 .
浏览jboss文档我看不到这个的解释,虽然它似乎是我的问题的根源.
如何在JBoss群集中进行身份验证(我使用基于Spring安全http表单的身份验证)?
jboss session-replication load-balancing session-variables session-cookies
我一直在寻找(几乎没有成功)asp.net的免费/开源会话集群和复制解决方案.我遇到了常见的嫌疑人(indexus sharedcache,memcached),但每个都有一些限制.
我已经习惯了Java世界,在这个世界里,人们认为许多解决这类问题的方法都可以从FOSS世界获得.
.Net世界上有没有合适的替代品?
asp.net session failover session-replication cluster-computing
我试图在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);
任何人都知道为什么它不能在liferay-portlet中工作?我已将distributable添加到portlet/WEB-INF/web.xml
编辑1:版本
liferay 6.1.1
Tomcat 7.0.47
编辑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);
这次我只设置变量null.它在liferay之外的JSP中可以正常工作,但在liferay中它就像这样.
在我的nginx中,我设置了上游和设置粘性会话:
upstream tomcat {
      ip_hash;
      server localhost:XXXX;
      server localhost:XXXY;
      server localhost:XXYY;
}
我<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>
在我的tomcat/conf/context.xml中添加了这个:
<Manager className="org.apache.catalina.ha.session.BackupManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"
                   mapSendOptions="6"/>
但现在我可以登录我的应用程序了.如果所有3个或任何2个实例都启动并且我登录,我会看到JSESSIONID e..g xyz234.tomcat1
现在,如果我关闭tomcat1,它将带我回到登录页面,因为tomcat1已关闭.我再次登录,它创建了与tomcat2相关的会话,同时,我再次启动tomcat1,我的应用程序将带我回到登录页面.所以,我面临两个问题:
注意:我使用的是JSF2应用程序,因此不确定它是否与它有任何关系.
tomcat session-replication load-balancing nginx cluster-computing
我正在尝试创建一个 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."
谢谢!
编辑:我的(默认的,不是很有趣)server.xml:
<?xml version='1.0' encoding='utf-8'?>
  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 …我在ubuntu服务器上测试Tomcat Clustering了session 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> …session tomcat session-replication cluster-computing failovercluster
我已经配置了HttpServer2.2实现load balancing和Clustering我的java应用程序.
但Load Balancing工作正常,Clustering(session replication)不起作用.
我worker.properties的HttpServer意志是,
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的Tomcat one,
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" …java tomcat session-replication load-balancing cluster-computing
以前我们已经实现了粘性会话.
这是我们环境的链接:apache中的Sticky Session不起作用
我们的下一个任务是实现会话复制.
我们目前正在使用tomcat示例cart.jsp来演示此行为.
据说所有session属性都必须实现java.io.serializable.
你有任何关于在哪里实施它的提示吗?我们正在密切关注本教程.
tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html
我有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>           
这是 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 …