1.1      三种IP负载均衡技术的优缺点归纳在下表中:

_
VS/NAT
VS/TUN
VS/DR
Server
any
Tunneling
Non-arp device
server network
private
LAN/WAN
LAN
server number
low (10~20)
High (100)
High (100)
server gateway
load balancer
own router
Own router
 

1.1.1     Virtual Server via NAT

VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。我们在Pentium 166 处理器的主机上测得重写报文的平均延时为60us,性能更高的处理器上延时会短一些。假设TCP报文的平均长度为536 Bytes,则调度器的最大吞吐量为8.93 MBytes/s. 我们再假设每台服务器的吞吐量为800KBytes/s,这样一个调度器可以带动10台服务器。(注:这是很早以前测得的数据)
基于 VS/NAT的的集群系统可以适合许多服务器的性能要求。如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法、VS/TUN VS/DR。在DNS混合集群系统中,有若干个VS/NAT负载调度器,每个负载调度器带自己的服务器集群,同时这些负载调度器又通过RR-DNS组成简单的域名。但VS/TUNVS/DR是提高系统吞吐量的更好方法。
对于那些将IP地址或者端口号在报文数据中传送的网络服务,需要编写相应的应用模块来转换报文数据中的IP地址或者端口号。这会带来实现的工作量,同时应用模块检查报文的开销会降低系统的吞吐率。

1.1.2      Virtual Server via IP Tunneling

VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。VS/TUN调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。目前,VS/TUN的后端服务器主要运行Linux操作系统,我们没对其他操作系统进行测试。因为“IP Tunneling”正成为各个操作系统的标准协议,所以VS/TUN应该会适用运行其他操作系统的后端服务器。

1.1.3      Virtual Server via Direct Routing

VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。

2      heartbeat的介绍

里的 heartbeat 就是 linux-ha 项目,被许多高可用系统采用。我们这里 lvs 必须是个高可用系统,所以我们采用 heartbeat 。本文也以 lvs 作为高可用服务来说明 heartbeat 的使用。 Heartbeat 的高版本可以负责 3 个及以上的节点。本文 2 个节点来说明,在你的两台机器 ( 一台 作为主节点,另一台为从节点 ) 上运行 heartbeat, 并配置好相关的选项,最重要的是 lvs 资源一定要配置进去。那么开始时主节点提供 lvs 服务,一旦主节点崩溃,那么从节点立即接管 lvs 服务。如果是自己 开启了其它的服务资源,那么接管的时候,该服务资源相应的 tcp 连接必须重连,而且主从节点的应用层逻辑状态有应用层自己保证一致。 Lvs 不存在应用层的 逻辑状态。