2 Replies Latest reply on Mar 24, 2008 4:11 PM by brian.stansberry

    HTTP Session Tomcat / JBoss Issue

    ben.pienig

      Hello All,

      I'm having problems with my setup of clustering.

      Here is the information, and the problem

      2 JBOSS Nodes Running 4.0.5.GA

      10:19:37,494 INFO [Server] Starting JBoss (MX MicroKernel)...
      10:19:37,496 INFO [Server] Release ID: JBoss [Zion] 4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)


      An apache frontend running.. 2.2.4

      Server version: Apache/2.2.4 (Unix)
      Server built: Jul 1 2007 18:11:30


      Apache frontend is running Mod JK 1.2.23

      Module Name: mod_jk-1.2.23-apache-2.2.x.so
      

      httpd.conf
      -----------

      <IfModule mod_jk.c>
       JkLogFile /var/log/httpd/modjk.log
       JkLogLevel info
       JkWorkersFile /etc/httpd/jkworkers.properties
       JkShmFile /var/log/httpd/jk.shm
       JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories
       LogFormat "%h %l %u %t \"%r\" %>s %b %{JK_WORKER_NAME}n %{JK_LB_FIRST_NAME}n %{JK_LB_FIRST_BUSY}n %{JK_LB_LAST_NAME}n %{JK_LB_LAST_BUSY}n" mod_jk_log
       CustomLog /var/log/httpd/modjk_access.log mod_jk_log
      
       # JK Balancer manager
       <VirtualHost *:80>
       ServerAdmin test@test.com
       DocumentRoot /srv/httpd/htdocs
       JkMount /* jboss
       </VirtualHost>
      
       <VirtualHost *:5555>
       ServerAdmin test@test.com
       DocumentRoot /srv/httpd/htdocs
       <Location /status/>
       JkMount jkstatus
       </Location>
       </VirtualHost>
      </IfModule>



      jkworkers.properties
      -----------------------
      worker.list=jboss,jkstatus
      
      # First Node
      worker.node1.type=ajp13
      worker.node1.host=192.168.7.235
      worker.node1.port=7929
      worker.node1.lbfactor=1
      worker.node1.socket_timeout=10
      worker.node1.connect_timeout=20000
      
      # Second Node
      worker.node2.type=ajp13
      worker.node2.host=192.168.7.236
      worker.node2.port=7929
      worker.node2.lbfactor=1
      worker.node2.socket_timeout=10
      worker.node2.connect_timeout=20000
      
      # Load balancer
      worker.jboss.type=lb
      worker.jboss.balance_workers=node1,node2
      worker.jboss.sticky_session=1
      
      worker.jkstatus.type=status


      tc5-cluster.sar/META-INF/jboss-service.xml

      <attribute name="ClusterName">Tomcat-${jboss.partition.name:Cluster}</attribute>
      <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
      <attribute name="CacheMode">REPL_ASYNC</attribute>
      

      -----------------------

      Here's the issue.

      I start up the cluster, and all works fine. The moment I start putting any load onto it I get the following problem....


      10:25:41,060 INFO [CacheListener] Possible concurrency problem: Replicated version id 22 matches in-memory version for session ml5CzYIuE0X62k2vNReP4g**
      10:25:59,215 INFO [CacheListener] Possible concurrency problem: Replicated version id 10 matches in-memory version for session GXDm0EZryMgDh-e17hE2Eg**
      10:26:04,487 INFO [CacheListener] Possible concurrency problem: Replicated version id 11 matches in-memory version for session GXDm0EZryMgDh-e17hE2Eg**
      10:26:04,508 WARN [MsgContext] Error sending end packet
      java.net.SocketException: Broken pipe
       at java.net.SocketOutputStream.socketWrite0(Native Method)
       at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
       at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
       at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:531)
       at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:112)
       at org.apache.jk.core.MsgContext.action(MsgContext.java:293)
       at org.apache.coyote.Response.action(Response.java:182)
       at org.apache.coyote.Response.finish(Response.java:304)
       at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:204)
       at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
       at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
       at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
       at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
       at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
       at java.lang.Thread.run(Thread.java:595)
      10:26:04,512 WARN [ChannelSocket] processCallbacks status 2
      10:31:06,604 INFO [CacheListener] Possible concurrency problem: Replicated version id 4 matches in-memory version for session ml5CzYIuE0X62k2vNReP4g**
      10:31:10,643 INFO [CacheListener] Possible concurrency problem: Replicated version id 5 matches in-memory version for session ml5CzYIuE0X62k2vNReP4g**


      Does anyone have any idea why this problem is occuring?

      Any solutions to this problem, is an issue with my configuration?

      Thanks for the help in Advance,

      Ben



        • 1. Re: HTTP Session Tomcat / JBoss Issue
          ben.pienig

          It looks like I solved the problem.....

          Both of the JBOSS Clusters jvmRoutes were set to the same routeId.

          Once this was changed, the systems seemed to function fine.

          10:31:10,643 INFO [CacheListener] Possible concurrency problem: Replicated version id 5 matches in-
          memory version for session ml5CzYIuE0X62k2vNReP4g**


          If you see this, check your JBOSS_HOME/server/all/deploy/jbossweb-tomcat50.sar/server.xml jvmRoute settings.

          Ben

          • 2. Re: HTTP Session Tomcat / JBoss Issue
            brian.stansberry

            Thanks for posting the answer. :-)

            If you see that "INFO [CacheListener] Possible concurrency problem: Replicated version id XX matches in-memory version for session YYYYYYYYYYYY**" logging it's normally a sign of sticky sessions not working properly. Having the wrong jvmRoute would cause a breakdown in sticky sessions.