当前位置:Linux教程 - Linux文化 - [图]Apusic1.1 实现负载均衡

[图]Apusic1.1 实现负载均衡


第一节 负载均衡简介

一、 负载均衡的定义

负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。


二、 负载均衡的作用

如果你发现你的Web站点负载量非常大时,应当考虑使用负载均衡技术来将负载平均分摊到多个内部服务器上。如果有多个服务器同时执行某一个任务时,这些服务器就构成一个集群(clustering)。使用集群技术可以用最少的投资获得接近于大型主机的性能。

三、 类型

目前比较常用的负载均衡技术主要有:

1. 基于DNS的负载均衡
通过DNS服务中的随机名字解析来实现负载均衡,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,他们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。

2. 反向代理负载均衡
使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。Apusic负载均衡器就属于这种类型的。

3. 基于NAT的负载均衡技术
网络地址转换为在内部地址和外部地址之间进行转换,以便具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问地址转换网关拥有的某一外部地址时,地址转换网关能将其转发到一个映射的内部地址上。因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后外部网络中的计算机就各自与自己转换得到的地址上服务器进行通信,从而达到负载分担的目的。
第二节 Apusic负载均衡器的安装使用

一、 使用Apusic负载均衡器的系统结构

本文前面的插图是一个典型的使用Apusic负载均衡器的负载均衡服务集群的系统结构。

在这个系统中,我们可以看出,Apusic负载均衡器是用Apusic 1.1实现的,也就是说,负载均衡器和其他APUSIC服务器没有多少区别,不同的是它上面没有安装应用系统,并且使用不同的配置文件,它只是专门提供负载均衡服务。客户通过访问负载均衡器的Web服务,来访问整个集群的资源。真正存放Web应用的是服务器1和服务器2,当然还可以更多,只需要修改负载均衡器的配置文件即可添加和删除,也可以使用负载均衡器的配置工具,详细内容可参考第三小节"配置"。

用户请求达到负载均衡器后,负载均衡器将它分配到某个Apusic应用服务器上,让这个应用服务器为此用户提供服务。


二、 安装

负载均衡器和其他APUSIC服务器没有多少区别,不同的是它上面没有安装应用系统,并且使用不同的配置文件。因此它的安装方法和安装一个Apusic应用服务器是一样的,请参考第一章"Apusic Application Server 的安装配置"。
三、 配置

在APUSIC安装目录下找到文件config/loadbalancer.conf,它的内容一般是这样的:

<CONFIG>
<SERVICE CLASS="com.apusic.logging.ConsoleLogger" NAME="Logger:type=console,name=Log">
<ATTRIBUTE NAME="Filter" VALUE="info,warn,error"/>
</SERVICE>

<SERVICE CLASS="com.apusic.logging.FileLogger" NAME="Logger:type=file,name=Log">
<ATTRIBUTE NAME="Filter" VALUE="info,warn,error"/>
<ATTRIBUTE NAME="MaxFileSize" VALUE="1024"/>
<ATTRIBUTE NAME="LogName" VALUE="logs/loadbalancer.log"/>
</SERVICE>

<SERVICE CLASS="com.apusic.servlet.http.loadbalancer.LoadBalancer">
<ATTRIBUTE NAME="ServerName" VALUE="mycluster"/>
<ATTRIBUTE NAME="ServerPort" VALUE="80"/>
<ATTRIBUTE NAME="BackendServers" VALUE="server1:8080,server2:8080"/>
</SERVICE>

<SERVICE CLASS="com.apusic.servlet.http.tcp.TCPEndpoint" NAME="Endpoint:type=tcp,service=LoadBalancer"/>
<ATTRIBUTE NAME="Port" VALUE="80"/>
</SERVICE>

<SERVICE CLASS="com.apusic.servlet.http.ssl.SSLEndpoint" NAME="Endpoint:type=ssl,service=LoadBalancer"/>
<ATTRIBUTE NAME="Port" VALUE="443"/>
<ATTRIBUTE NAME="KeyStore" VALUE="config/sslserver"/>
<ATTRIBUTE NAME="KeyPassword" VALUE="keypass"/>
</SERVICE>

</CONFIG>

大家可以和APUSIC应用服务器的配置文件config/apusic.conf比较一下,可以发现少了一些东西,但多了一个LoadBalancer服务。其中有一个重要的属性BackendServers定义了集群中的服务器,这是一个用逗号分隔的服务器地址列表,包括主机名和端口号,负载均衡器将根据这个列表采取循环或随机的策略来选择服务器。负载均衡器和内部服务器启动的先后次序无关紧要,负载均衡器将总是选择目前可用的内部服务器,并周期性地检测内部服务器是否正常工作。

当用这个配置文件启动APUSIC应用服务器时,这台服务器就成为一个负载均衡器。

另外,还可以使用负载均衡器的配置工具来增加、删除或修改它所管理的应用服务器。


四、 运行

启动命令行为:

java com.apusic.server.Main -config config/loadbalancer.conf

由于剔除了EJB,JMS,JDBC等组件,负载均衡器有更多的资源来处理负载,将客户的请求转发到内部服务器上,并将内部服务器的回应转发给客户。另外,APUSIC负载均衡器还可以结合其他负载均衡技术,例如基于DNS和基于NAT的负载均衡。以DNS为例,你可以在集群系统中安装多个 负载均衡器,每个负载均衡器都和内部服务器有连接,并配置DNS,使所有的负载均衡器都映射到同一个域名,这样当用户使用域名访问系统时,DNS会首先将域名映射到其中一个负载均衡器的IP地址,用户将请求发到指定IP地址的负载均衡器上,而此负载均衡器再将请求转发到一个内部服务器上.

五、 对Apusic 应用服务器的要求

在使用负载均衡器之前,首先要在集群中所有的服务器上安装APUSIC应用服务器,安装方法和在单独一台服务器上安装是一样的,但注意在安装应用系统时要在所有服务器上都保持一致,如果有条件可以采用一个共享硬盘组。安装完成后启动服务器,并测试应用系统能否正常工作。如果只有一台机器,也可以测试APUSIC的集群功能,可以启动多个服务器进程,但它们的各种服务的侦听端口都不能有冲突。
第三节 在Apusic负载均衡集群上开发应用系统的特点

利用Apusic 1.1建立的负载均衡集群有一个很重要的特点,APUSIC实现了分布式Session管理,这是实现Web服务器集群的关键,由于Web应用被分布到多台服务器上运行,因此保存在Session中的共享数据必须完全保持一致。APUSIC没有使用共享数据库来保存Session数据,虽然这种方式能保证Session数据的一致性,但由于Session的变化是很频繁的,对数据库将造成很大的压力,最终将成为整个系统的瓶颈。APUSIC使用一种分布式Session服务,每个服务器管理自己所产生的Session,当Web应用从一台服务器迁移到另一台服务器时,Session也会自动进行迁移,这样使得对Session的管理被均匀地分布到所有的服务器上,任何一台服务器失效并不会使Session丢失。对应用开发者来说,要保证分布式Session能够正常工作,在Session中只能保存实现了java.io.Serializable的数据,否则Session将无法完成迁移。

总之,如果你的Web应用中使用了session,它在Apusic负载均衡集群中不受任何影响,可以正常使用,同时,还能享受到Apusic负载均衡集群给您的应用带来的高度的安全和最大的速度。


摘自:http://www.apusic.com