问题 :
日前用apache2.4和tomcat7在windows上面完成了一个简单的集群配置,apache负责负载均衡,session的处理方面了也试验了两种方面,单一服务器处理和同步复制处理,都可以成功。
启动第二个tomcat的时候,第一个tomcat日志增加:
信息: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{10, 16, 120, 53}:4001,{10, 16, 120, 53},4001, alive=1005, securePort=-1, UDP Port=-1, id={-36 0 -44 37 -76 125 70 125 -83 79 -47 -35 -61 -119 94 -95 }, payload={}, command={}, domain={}, ]
但是用手头的一台PC,安装了centos6.4之后,同样的tomcat配置,启动了第二个tomcat之后,第一个tomcat日志没有任何变化,是否说明这个俩家伙互相没有监听到呢?
启动第二个tomcat的时候,第一个tomcat日志增加:
信息: Replication member added:org.apache.catalina.tribes.membership.MemberImpl[tcp://{10, 16, 120, 53}:4001,{10, 16, 120, 53},4001, alive=1005, securePort=-1, UDP Port=-1, id={-36 0 -44 37 -76 125 70 125 -83 79 -47 -35 -61 -119 94 -95 }, payload={}, command={}, domain={}, ]
但是用手头的一台PC,安装了centos6.4之后,同样的tomcat配置,启动了第二个tomcat之后,第一个tomcat日志没有任何变化,是否说明这个俩家伙互相没有监听到呢?
继续试验session的复制也无法完成,网上的说法是Linux组播没有开打,执行了route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0之后也仍然没有效果。
<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="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"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
原因 : 重点检查下Linux的防火墙策略,是否屏蔽了组播
经过查看tomcat配置发现走的端口是46654
修改linux配置:]# /sbin/iptables -I INPUT -p udp --dport 45564 -j ACCEPT
打开端口
保存:# /etc/rc.d/init.d/iptables save
重启俩tomcat就可以解决问题了。