当前位置:文档之家› 用apache和tomcat搭建集群,实现负载均衡

用apache和tomcat搭建集群,实现负载均衡

型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问题需要解决。

一.Session的复制二.如何将请求发送到正常的服务器针对以上问题,可以使用群集和负载均衡来解决,整体架构如下:(图片来自:)中间由一台服务器做负载均衡(Load Balancer),它将所有请求,根据一定的负载均衡规则发送给指定的群集服务器(Cluster),群集服务器拥有着相同的状态和相同的应用程序,并且他们的Session是相互复制的,这样,不管访问哪台服务器都具有相同的结果,即使一台服务器崩溃掉以后,可以由其他集群服务器继续负责应用程序的运行。

Tomcat中如何配置群集我们假设有如下场景,一台负载均衡服务器负责请求的均衡,群集服务器A和群集服务器B组成一个群集,当某个群集服务器崩溃后,另外一台继续负责应用程序的运行。

一.配置Tomcat5.5.12群集服务器A修改Tomcat配置文件server.xml1.群集服务器A的端口号与B不冲突,即使Server Port,Connector,Coyote/JK2 AJP Connector的端口号唯一2.在Host元素下增加以下内容:<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"managerClassName="org.apache.catalina.cluster.session.DeltaManager"expireSessiuseDirtyFlag="true"notifyListeners><!--每个群集服务器都需要有相同的Membership配置--><MembershipclassName="org.apache.catalina.cluster.mcast.McastService"mcastAddr="228.0.0.4"mcastPort="45564"mcastFrequency="500"mcastDropTime="3000"/><!--tcpListenAddress:本机IP地址服务器将此地址广播给其他群集服务器--><ReceiverclassName="org.apache.catalina.cluster.tcp.ReplicationListener"tcpListenAddress="10.10.13.145"tcpListenPort="4001"tcpSelectorTimeout="100"tcpThreadCount="6"/><SenderclassName="org.apache.catalina.cluster.tcp.ReplicationTransmitter"replicatiackTimeout="15000"waitForAck="true"/><Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/><Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/></Cluster>3.修改Web应用程序配置文件web.xml在web.xml文件中<web-app>元素下增加以下内容:<!--此应用将与群集服务器复制Session--><distributable/>二.配置Tomcat5.5.12群集服务器B与群集服务器A配置基本相同,唯一不同的地方就是server.xml文件中<ReceiverclassName="org.apache.catalina.cluster.tcp.ReplicationListener"tcpListenAddress="10.10.13.145"tcpListenPort="4002"tcpSelectorTimeout="100"tcpThreadCount="6"/>tcpListenAddress应为本机地址,如果两台群集服务器在一台机器上,则端口号要不同注意:B的其他端口不要与A冲突。

三.群集服务器具体配置结果Mcast*用于广播,所有群集服务器需要填写相同的配置tcpListen*本机的IP,群集服务器启动时,会将自己的IP和端口号广播出去,其他群集服务器收到后,响应广播发出者。

四.测试群集启动群集服务器A,再启动群集服务器B会显示群集服务器的信息,表示群集服务器配置成功五.配置负载均衡服务器Apache2.2.3现在虽然群集已经有了相同的状态,但需要不同的IP地址才能访问到服务器A与B,现在我们配置一台负载均衡服务器来实现统一的入口访问,和负载的均衡。

下载Apache服务器2.2.3。

修改httpd.conf文件将以下Module的注释去掉LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_http_module modules/mod_proxy_http.so并增加以下元素ProxyRequests OffProxyPass /helloworld balancer://mycluster stickysession=jsessionid nofailover=On<Proxy balancer://mycluster>BalancerMember http://10.10.13.145:9080/helloworldBalancerMember http://10.10.13.145:10080/helloworld smax=1 loadfactor=20</Proxy><Location /balancer-manager>SetHandler balancer-managerOrder Deny,AllowDeny from allAllow from all</Location><Location /server-status>SetHandler server-statusOrder Deny,AllowDeny from allAllow from all</Location>其中ProxyPass /helloworld balancer://mycluster stickysession=jsessionid nofailover=On<Proxy balancer://mycluster>BalancerMember http://10.10.13.145:9080/helloworldBalancerMember http://10.10.13.145:10080/helloworld smax=1 loadfactor=20</Proxy>ProxyPass为代理转发的Url,即将所有访问/helloworld的请求转发到群集balancer://mycluster BalancerMember为群集的成员,即群集服务器A或B,负载均衡服务器会根据均衡规则来将请求转发给BalancerMember。

(可以同时配置几个站点)配置好后,启动Apahce服务器,访问localhost/hellworld就会看到群集服务器中应用返回的结果。

恭喜你,负载均衡和群集已经配置成功了。

一、集群和负载均衡的概念(一)集群的概念集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。

集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器。

这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据。

除了作为单一系统提供服务,集群系统还具有恢复服务器级故障的能力。

集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并通过系统级的冗余提供固有的可靠性和可用性。

(二)集群的分类1、高性能计算科学集群:以解决复杂的科学计算问题为目的的IA集群系统。

是并行计算的基础,它可以不使用专门的由十至上万个独立处理器组成的并行超级计算机,而是采用通过高速连接来链接的一组1/2/4 CPU的IA服务器,并且在公共消息传递层上进行通信以运行并行应用程序。

这样的计算集群,其处理能力与真正超级并行机相等,并且具有优良的性价比。

2、负载均衡集群:负载均衡集群为企业需求提供更实用的系统。

该系统使各节点的负载流量可以在服务器集群中尽可能平均合理地分摊处理。

相关主题