Liferay群集会话复制

Liferay群集会话复制,liferay,cluster-computing,session-replication,Liferay,Cluster Computing,Session Replication,我试图在tomcat上启用liferay中的会话复制,但运气不太好。我已经写了一个小测试,看看会话是否被复制,它在我放在webapps/examples下的一个单独的JSP文件中运行良好,但是当我在liferay porlet中输入相同的代码时,只有JSESSION是正确的 HttpSession httpSession = request.getSession(); String testTime = (String) httpSession.getAttribute("testT

我试图在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中工作吗?我已经将可分发添加到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内部是这样的

  • 第一个获取请求的服务器获取null end设置变量
  • 当另一个服务器得到请求时,它也会得到null并设置变量
  • 当获取第一个请求的服务器尝试获取变量时,它会从第二个服务器获取值。所以现在它被复制了
  • 不管哪台服务器得到第一个请求,结果总是一样的

    编辑4。群集信息

    节点:2 负载平衡器:

        <Proxy balancer://mycluster>
                BalancerMember ajp://node1:8009 route=tomcat1 loadfactor=1
                BalancerMember ajp://node2:8009 route=tomcat2 loadfactor=1
    
                Order Deny,Allow
                Deny from none
                Allow from all
    
                ProxySet lbmethod=byrequests
        </Proxy>
        <Location /balancer-manager>
                SetHandler balancer-manager
                Order deny,allow
                Allow from all
        </Location>
    
        ProxyPass /balancer-manager !
        ProxyPass / balancer://mycluster/
    

    如果您想要正确的会话复制,您应该将门户以及所有插件声明为可分发的。原因是每一个都是一个独立的webapp

    但是,利用会话复制会产生大量开销。若您出于性能原因构建集群,那个么您马上就会消耗掉相当多的额外性能


    标准的建议(我知道,你不是在问这个问题,但我想在这里看到它,让其他人稍后找到问题)是依靠粘性会话。如果您想关闭一台appserver,请将其从负载平衡器中取出,但要使其保持在线,以便为已分配的会话服务一段时间(它们最终会用完)。不使用会话复制通常会显著降低所需的处理能力。是的,有些应用程序确实需要会话复制,但我估计它们是最初希望使用此功能的应用程序的10%。

    请提供群集设置的相关详细信息,例如portal-ext.properties文件,首先,您的集群拓扑等。所有内容都标记为可分发,除非有一些我不知道的隐藏位置也需要标记为可分发。无论如何,我知道粘性会话是首选的方式,但我在这方面没有发言权,因为这个问题的答案缺失使得尽可能长时间(希望永远)避免使用这种技术的论点更具说服力。这样你就可以在这件事上有发言权了……是的,但仍然如此。如果您使用Stick会话,并且一个节点发生故障,您会希望用户继续,就像在另一个节点上没有发生任何事情一样,不是吗?对我来说,它的工作方式与会话复制完全相同。你仍然面临问题@Kempe??
    cluster.link.enabled=true
    jdbc.default.driverClassName=com.mysql.jdbc.Driver
    jdbc.default.url=jdbc:mysql://dbserver:3306/lportal?autoReconnect&autoReconnectForPools;&useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
    jdbc.default.username=u jdbc.default.password=p
    
    spring.configs=\
            META-INF/base-spring.xml,\
            \
            META-INF/hibernate-spring.xml,\
            META-INF/infrastructure-spring.xml,\
            META-INF/management-spring.xml,\
            \
            META-INF/util-spring.xml,\
            \
            META-INF/jpa-spring.xml,\
            \
            META-INF/executor-spring.xml,\
            \
            META-INF/audit-spring.xml,\
            META-INF/cluster-spring.xml,\
            META-INF/editor-spring.xml,\
            META-INF/jcr-spring.xml,\
            META-INF/ldap-spring.xml,\
            META-INF/messaging-core-spring.xml,\
            META-INF/messaging-misc-spring.xml,\
            META-INF/mobile-device-spring.xml,\
            META-INF/notifications-spring.xml,\
            META-INF/poller-spring.xml,\
            META-INF/rules-spring.xml,\
            META-INF/scheduler-spring.xml,\
            META-INF/scripting-spring.xml,\
            META-INF/search-spring.xml,\
            META-INF/workflow-spring.xml,\
            \
            META-INF/counter-spring.xml,\
            META-INF/mail-spring.xml,\
            META-INF/portal-spring.xml,\
            META-INF/portlet-container-spring.xml,\
            META-INF/staging-spring.xml,\
            META-INF/virtual-layouts-spring.xml,\
            \
            META-INF/dynamic-data-source-spring.xml,\
            #META-INF/shard-data-source-spring.xml,\
            #META-INF/memcached-spring.xml,\
            #META-INF/monitoring-spring.xml,\
            \
            META-INF/ext-spring.xml