2014-09-15 3 views
0

Привет Я новичок в концепции кластеризации, поэтому я попытался установить кластер Tomcat с двумя экземплярами. Я следовал примерам, главным образом в http://www.mulesoft.com/tcat/tomcat-clustering и нескольких других веб-источниках.Tomcat Clustering Multicast throws error - Невозможно выполнить проверку обнаружения сбоя, принимая член вниз

Мой образец создан как, в workers.properties

# Define worker names 
worker.list=jkstatus, loadbalancer 
# Create virtual workers 
worker.jkstatus.type=status 
worker.loadbalancer.type=lb 
# Declare Tomcat server worker 1 
worker.worker1.type=ajp13 
worker.worker1.host=localhost 
worker.worker1.port=7009 
# Declare Tomcat server worker 2 
worker.worker2.type=ajp13 
worker.worker2.port=9009 
worker.worker2.host=localhost 
# Associate real workers with virtual LoadBalancer worker 
worker.loadbalancer.balance_workers=worker1,worker2 

И Apache httpd.conf, как,

# ADDED CLUSTER CONFIG 
# Load module 
LoadModule jk_module modules/mod_jk.so 
# Specify path to worker configuration file 
JkWorkersFile C:/tomcat_clustered/workers.properties 
# Configure logging and memory 
JkShmFile C:/tomcat_clustered/log/location/mod_jk.shm 
JkLogFile C:/tomcat_clustered/log/location/mod_jk.log 
JkLogLevel info 
# Configure monitoring 
JkMount /jkmanager/* jkstatus 
<Location /jkmanager> 
Order deny,allow 
deny from all 
allow from localhost 
</Location> 
# Configure applications 
JkMount /* loadbalancer 
# END CLUSTER CONFIG 

С каждым кота (рабочий) server.xml как,

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1"> 
    <!--For clustering, please take a look at documentation at: 
     /docs/cluster-howto.html (simple how to) 
     /docs/config/cluster.html (reference documentation) --> 
    <!-- 
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 
    --> 
    <!-- CLUSTER BEGIN --> 
    <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="239.0.0.1" 
      port="45564" frequency="500" 
      dropTime="3000"/>  
      <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 
       <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 
      </Sender> 
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
      address="auto" port="4000" autoBind="100" 
      selectorTimeout="5000" maxThreads="6"/> 
      <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> 
<!-- CLUSTER END --> 
    <!-- Use the LockOutRealm to prevent attempts to guess user passwords 
     via a brute-force attack --> 
    <Realm className="org.apache.catalina.realm.LockOutRealm"> 

Для работников1, worker2. Я работаю над Windows 7. Похоже, вам нужен какой-то многоадресный вариант, но я не уверен. При запуске из кота, один начинают хорошо, и при запуске второго (скажет worker2) и кот консоли бросают ошибки, как,

 at org.apache.catalina.tribes.group.ChannelInterceptorBase.heartbeat(Cha 
nelInterceptorBase.java:103) 
     at org.apache.catalina.tribes.group.GroupChannel.heartbeat(GroupChannel. 
ava:155) 
     at org.apache.catalina.tribes.group.GroupChannel$HeartbeatThread.run(Gro 
pChannel.java:690) 

ep 15, 2014 10:11:03 AM org.apache.catalina.tribes.group.interceptors.TcpFailur 
Detector memberAlive 
EVERE: Unable to perform failure detection check, assuming member down. 
ava.net.SocketException: Permission denied: connect 
     at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
     at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI 
pl.java:85) 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.ja 
a:339) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocket 
mpl.java:200) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java 

Не уверен, что если его из-за некоторые многоадресные разрешения на моем Windows, или любую конфигурацию связанной вопросы. Пожалуйста, предложите несколько хороших указателей в этом отношении.

ответ

0

Ошибка, о которой вы сообщаете, выглядит так, как будто она связана с ОС/сетью. Трудно сказать точно. Я могу вам это сказать.

Вы объявили TcpFailureDetector.

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 

Это является частью конфигурации кластера Tomcat и это ответственность, чтобы сделать соединение TCP к любому узлу, который подозревается в неудаче. Если слушатель не может подключиться к узлу, он будет помечен как снизу. Если он может подключиться, узел остается активным.

В этом случае слушатель пытается установить соединение с одним из ваших узлов, и он не работает с ошибкой JDK. В результате этой ошибки возникают некоторые предложения, одним из которых является использование «-Djava.net.preferIPv4Stack = true».

I get java.net.SocketException: Permission denied: connect when sending an email in Jenkins

На отдельной ноте, если вы примечание видели официальную документацию по Tomcat кластеризация, я бы настоятельно рекомендуем вам проверить это. Вот ссылка.

http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

0

Вам необходимо включить многоадресного. см. этот пост, как включить многоадресную рассылку, https://serverfault.com/questions/262634/how-do-i-know-if-ip-multicasting-is-enabled-on-my-network-in-windows

В среде Linux большая часть системного ядра способна обрабатывать многоадресный адрес. , но нам нужно добавить запись маршрута в таблицу маршрутизации ядра.

sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0