Hi Daniel,
Thanks for the response. It seems that the ports (you're correct, 4000 and
4001) aren't open; telnet reports Connection refused and nmap lists the
ports as closed. Shouldn't tomcat be opening them? I'm not running a
firewall or anything.

I'll come back to your questions about my apache config if we get stuck,
but I suspect that's not the issue.

Thanks,
Nick


On Tue, Sep 17, 2013 at 10:52 AM, Daniel Mikusa <dmik...@gopivotal.com>wrote:

> On Sep 17, 2013, at 9:59 AM, Nicholas Violi <nvi...@globalgiving.org>
> wrote:
>
> > Hello,
> > I'm setting up clustering/replication on Tomcat 7 on my local machine, to
> > evaluate it for use with my environment/codebase, and sessions don't
> appear
> > to be replicating. Hopefully I've provided enough information below, but
> > please let me know if you have any more questions.
> >
> > ___Setup___
> >
> > I have two identical tomcat servers in sibling directories running on
> > different ports.
>
> Good.  Out of curiosity, are they listening on HTTP or AJP?
>
> > I have httpd listening on two other ports and connecting
> > to the two tomcat instances as VirtualHosts.
>
> This sounds a little weird, can you explain further?
>
>   - Why are you listening on two ports?  Is one HTTP and one HTTPS?
>
>   - Where and why are you using VirtualHosts?  That's unnecessary for a
> simple clustering setup and is probably just complicating things.
>
>   - How are you connecting to your Tomcat instances?  mod_proxy or mod_jk?
>  Can you include the config?
>
> > I can access and interact with
> > both environments on the configured ports; everything is working as
> > expected.
> >
> > The tomcat servers have clustering enabled like this, in 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"/>
> >        <Interceptor
> >
> className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
> >      </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.ClusterSessionListener"/>
> >   </Cluster>
>
> Are you trying to setup sticky sessions?  If so, what are you setting for
> "jvmRoute"?
>
> >
> > and I added the distributable tag to the very beginning of 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>
> >
> > ___What's working___
> >
> > When the servers start, they log
> >
> > Sep 16, 2013 1:44:23 PM org.apache.catalina.ha.tcp.SimpleTcpCluster
> > startInternal
> > INFO: Cluster is about to start
> > Sep 16, 2013 1:44:23 PM org.apache.catalina.tribes.transport.ReceiverBase
> > getBind
> > FINE: Starting replication listener on address:10.0.0.100
> > Sep 16, 2013 1:44:23 PM org.apache.catalina.tribes.transport.ReceiverBase
> > bind
> > INFO: Receiver Server Socket bound to:/10.0.0.100:4001
> > Sep 16, 2013 1:44:23 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
> > INFO: Setting cluster mcast soTimeout to 500
> > Sep 16, 2013 1:44:23 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> > INFO: Sleeping for 1000 milliseconds to establish cluster membership,
> start
> > level:4
> > Sep 16, 2013 1:44:24 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> > INFO: Done sleeping, membership established, start level:4
> > Sep 16, 2013 1:44:24 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> > INFO: Sleeping for 1000 milliseconds to establish cluster membership,
> start
> > level:8
> > Sep 16, 2013 1:44:25 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> > INFO: Done sleeping, membership established, start level:8
> >
> > When the second server starts up, the first one logs
> >
> > Sep 16, 2013 2:17:30 PM
> > org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
> > messageReceived
> > FINE: Received a failure detector
> >
> packet:ClusterData[src=org.apache.catalina.tribes.membership.MemberImpl[tcp://{10,
> > 0, 0, 100}:4000,{10, 0, 0, 100},4000, alive=112208, securePort=-1, UDP
> > Port=-1, id={118 6 107 -67 88 98 72 95 -73 41 4 -108 58 -5 -127 -41 },
> > payload={}, command={}, domain={}, ]; id={25 110 120 -2 -25 6 78 -97 -84
> > -34 2 -11 49 -62 -8 -56 }; sent=2013-09-16 14:17:30.139]
> > Sep 16, 2013 2:17:30 PM
> > org.apache.catalina.tribes.transport.nio.NioReplicationTask remoteEof
> > FINE: Channel closed on the remote end, disconnecting
> > Sep 16, 2013 2:17:30 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl memberDataReceived
> > FINE: Mcast add member
> > org.apache.catalina.tribes.membership.MemberImpl[tcp://{10, 0, 0,
> > 100}:4001,{10, 0, 0, 100},4001, alive=1010, securePort=-1, UDP Port=-1,
> > id={82 -45 -109 -56 -110 -5 78 -10 -103 61 -40 -59 -36 -79 104 120 },
> > payload={}, command={}, domain={}, ]
> > Sep 16, 2013 2:17:30 PM org.apache.catalina.ha.tcp.SimpleTcpCluster
> > memberAdded
> > INFO: Replication member
> > added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{10, 0, 0,
> > 100}:4001,{10, 0, 0, 100},4001, alive=1011, securePort=-1, UDP Port=-1,
> > id={82 -45 -109 -56 -110 -5 78 -10 -103 61 -40 -59 -36 -79 104 120 },
> > payload={}, command={}, domain={}, ]
> >
> > and when one is shutdown, the other one logs
> >
> > Sep 16, 2013 2:28:05 PM
> > org.apache.catalina.tribes.membership.McastServiceImpl memberDataReceived
> > FINE: Member has
> > shutdown:org.apache.catalina.tribes.membership.MemberImpl[tcp://{10, 0,
> 0,
> > 100}:4001,{10, 0, 0, 100},4001, alive=422279, securePort=-1, UDP Port=-1,
> > id={54 43 17 -9 13 -11 72 -63 -107 -78 -8 65 -21 -77 115 88 },
> payload={},
> > command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]
> > Sep 16, 2013 2:28:05 PM
> > org.apache.catalina.tribes.group.interceptors.TcpFailureDetector
> > memberDisappeared
> > INFO: Verification complete. Member
> > disappeared[org.apache.catalina.tribes.membership.MemberImpl[tcp://{10,
> 0,
> > 0, 100}:4001,{10, 0, 0, 100},4001, alive=422279, securePort=-1, UDP
> > Port=-1, id={54 43 17 -9 13 -11 72 -63 -107 -78 -8 65 -21 -77 115 88 },
> > payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]]
> > Sep 16, 2013 2:28:05 PM org.apache.catalina.ha.tcp.SimpleTcpCluster
> > memberDisappeared
> > INFO: Received member
> > disappeared:org.apache.catalina.tribes.membership.MemberImpl[tcp://{10,
> 0,
> > 0, 100}:4001,{10, 0, 0, 100},4001, alive=422279, securePort=-1, UDP
> > Port=-1, id={54 43 17 -9 13 -11 72 -63 -107 -78 -8 65 -21 -77 115 88 },
> > payload={}, command={66 65 66 89 45 65 76 69 88 ...(9)}, domain={}, ]
> >
> > so I know they're aware of each other.
>
> Good.  This would seem to indicate that your multicast setup is working
> properly.  That's half the battle.
>
> The second half is making sure that session data can be passed back and
> forth via TCP.  From the output above, it looks like the servers are
> listening on port 4000 and 4001.  Are these ports accessible?  Can you
> connect to them?
>
> >
> > Finally, when I use the Cluster/Operations MBean in jconsole to try to
> set
> > property "foo" to "bar", jconsole reports "method successfully invoked",
> > and the server logs
> >
> > Sep 16, 2013 2:30:18 PM org.apache.catalina.ha.tcp.SimpleTcpCluster
> > setProperty
> > WARNING: Dynamic setProperty(foo,value) has been disabled, please use
> > explicit properties for the element you are trying to identify
> >
> > I'm not too worried about that error; mostly included to demonstrate that
> > setProperty creates a log statement.
> >
> > ___What's not working___
> >
> > As far as I can tell, no session information is being replicated in my
> app.
> >
> > The tomcat manager only lists sessions started on the server it's
> > monitoring, and not the other one in the cluster.
> >
> > I'm under the impression that whenever the app calls
> > HttpSession.setAttribute, that attribute should be replicated to the
> other
> > cluster nodes, and I would expect that some record of that would be
> logged.
>
> I don't think you'll get logging by default.  You'd need to increase the
> logging levels to see something.
>
> > My app includes this line:
> >
> >   public static void saveBillingInfo(IPageContext pageContext,
> BillingInfo
> > billingInfo)
> >   {
> >      pageContext.getSession().setAttribute("billingInfo", billingInfo);
> >      //etc...
> >   }
> >
> > where BillingInfo is a Serializable class containing only one field, a
> > HashMap of information about the billing info.
>
> Try a simpler app.  My favorite app for testing is a simple session backed
> counter.  You can implement it in single JSP and there's no doubt when it
> is or isn't working.
>
> Dan
>
> >
> > No log statements are written when this or any other line processes, and
> I
> > don't see any evidence that session information is actually being shared.
> >
> > Any suggestions or further questions are welcome. Thanks in advance!
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to