2014-02-15 16 views
1

我想在我的VM連接到的幾個網絡中的一個上對羣集Tomcat實例進行羣集。使用默認配置,我在感興趣的網絡上看不到任何多播流量。如何使用McastService綁定進行Tomcat集羣?

因此,我試圖使用McastService中的bind屬性告訴Tomcat要使用哪個網絡接口。

當我使用IPv4或IPv6的bind網絡接口地址,我看到3個包走在了正確的組播地址/端口,但隨後的Tomcat會拋出異常:

Feb 15, 2014 8:22:45 PM org.apache.catalina.ha.tcp.SimpleTcpCluster startInternal 
SEVERE: Unable to start cluster. 
org.apache.catalina.tribes.ChannelException: java.io.IOException: Invalid argument; No faulty members identified. 
     at org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:178) 
     at org.apache.catalina.tribes.group.ChannelCoordinator.start(ChannelCoordinator.java:99) 
     at org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:162) 
     at org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor.start(MessageDispatchInterceptor.java:157) 
     at org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:162) 
     at org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:162) 
     at org.apache.catalina.tribes.group.GroupChannel.start(GroupChannel.java:419) 
     at org.apache.catalina.ha.tcp.SimpleTcpCluster.startInternal(SimpleTcpCluster.java:685) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1106) 
     at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.startup.Catalina.start(Catalina.java:691) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456) 
Caused by: java.io.IOException: Invalid argument 
     at java.net.PlainDatagramSocketImpl.send(Native Method) 
     at java.net.DatagramSocket.send(DatagramSocket.java:676) 
     at org.apache.catalina.tribes.membership.McastServiceImpl.send(McastServiceImpl.java:503) 
     at org.apache.catalina.tribes.membership.McastServiceImpl.send(McastServiceImpl.java:480) 
     at org.apache.catalina.tribes.membership.McastServiceImpl.start(McastServiceImpl.java:269) 
     at org.apache.catalina.tribes.membership.McastService.start(McastService.java:386) 
     at org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:167) 
     ... 22 more 

我知道組​​播是工作,因爲我能夠看到包含tcpdump的數據包並使用mcsender發送數據包。我試圖禁用IPv6,並沒有幫助。

如何將Tomcat連接到正確的網絡接口進行羣集。我需要將它連接到:

eth2  Link encap:Ethernet HWaddr bc:76:4e:05:5b:22 
      inet addr:192.168.3.4 Bcast:192.168.3.255 Mask:255.255.255.0 
      inet6 addr: fe80::be76:4eff:fe05:5b22/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:70 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:4160 (4.1 KB) TX bytes:648 (648.0 B) 

運行Tomcat 7.0.42。我一直在試圖使用的配置(主要是默認+ bind)是:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="main4"> 

    <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" 
        bind="192.168.3.4" 
        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"/> 

     <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 
     <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 
    </Cluster> 

回答

0

另一種選擇可能是要問的Java運行時使用的IPv4這個啓動參數: -Djava.net.preferIPv4Stack=true

相關問題