集群系统具有以下优点:
高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。
配置实现:
1,如果是本机测试,多个tomcat怎么启动此处暂不赘述
1,分别修改多个tomcat的server.xml,去掉注释,增加以下配置(有些tomcat版本已经存在,只需要把注释去除即可):
<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"
bind="127.0.0.1"
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>
此处需要注意的是:
1, Receiver 中的port属性不能重复,在集群tomcat中保持唯一性,多个tomcat可分别使用prot = “4000”,prot = “4001”,prot = “4002”等(不是必须)
2, Tomcat的版本和jdk必须一致,要不然会出现skipping state transfer.No members active incluster group.的问题,即找不到集群
tomcat(尽量不要选择tomcat7和JDK7。bea的JDK尚未测试,情况未知)。
3, Deployer配置可去除,否则会提示严重: FarmWarDeployer can only work as hostcluster subelement! 但不会现象正常使用
4, 如果一个web项目的web.xml文件中指定了<distributable/>元素那么Tomcat服务器启动这个Web应用时,会为它创建由<Cluster>元素指定的会话管理器,这里我们用的是DeltaManager,他们把会话从一个Tomcat服务器复制到集群中另一个Tomcat服务器。
<web-app>
…
<distributable/>
</web-app>
5,
6, 如果项目要发布到集群上,那么与会话有关的类需要实现java.io.Serializable序列化接口
7, 集群中Tomcat间用组播方式进行通信,如果机器上有多个网卡则可能导致组播失败,解决的办法是<Cluster>元素的<Membership>元素配置bind属性,它用于明确知道组播地址:
8, <Membership className="org.apache.catalina.tribes.membership.McastService" bind="127.0.0.1".../>
9, 如果集群较小,Manager可以采用DeltaManager会话管理器,如果多的话建议使用BackupManager
10,如果是tomcat5的集群处理类的路径名可能不一样tomcat6以上org.apache.catalina.ha…
Apache+tomcat:注意事项:
1,Apache使用了loadbalancer后,要求worker的名字与Tomcat的service.xml中的Engine元素的jvmRoute属性一致
2, worker.loadbalancer.sticky_seesion如果设为(true or false)则说明会话具有“粘性”,也就是如果一个用户在一个Tomcat中建立了会话后则此后这个用户的所有操做都由这个Tomcat服务器承担(除非该tomcat挂掉)。集群系统不会进行会话复制。如果设为false则下面的 sticky_session_force无意义。
3,sticky_session_force:假设sticky_session设为true,用户会话具有了粘性,当当前Tomcat服务器停止服务后,如果sticky_session_force为true也就是强制会话与当前Tomcat关联,那么会报500错误,如果设为false则会转到另外的Tomcat服务器。