Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7263559
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: LINUX

2012-04-18 14:17:29

几种LVS负载均衡方式的区别 (2011-10-12 09:22:31)
LVS实现服务器集群负载均衡有三种方式,LVS—NAT,LVS—DR和LVS-TUN。下面简单谈谈这三种方式的区别:

LVS-NAT:
LVS-NAT方式的思路很简单,它利用调度服务器实施网络层数据欺骗,它把客户端发送到调度服务器的数据IP包的目标地址进行了替换。

该方式网络工作环境:
一台调度服务器,N台实际服务器,调度服务器和实际服务器在同一个私有网段,调度服务器是实际服务器的默认网关。只有调度服务器拥有公共IP,可以暴露在广域网上。

客户端发送数据
客户端数据包首先发送到具有公共ip的调度服务器上,,这些数据的数据IP包目标地址被替换成了一个调度器根据负载均衡策略选择的一个实际服务器的IP。根据IP层协议,这些数据理所当然会得被分发到实际服务器上去了。

服务器返回数据
实际服务器数据处理完请求生成了返回数据包,返回数据IP包的来源地址是实际处理服务器IP地址,目标地址是客户服务端IP地址。由于实际服务器的默认网 关是调度服务器,因此尽管返回IP数据包的目标地址是客户端的ip地址,返回数据包仍然首先被发回到调度服务器上,调度服务器再次实施欺骗,把返回的IP 数据包的来源地址改成调度服务器的IP。然后再转发到交换机上返回给客户端。整个过程调度器的任务是实施了2次欺骗修改,一次是修改了发送数据包得目标地 址,这次修改的目的是为了实现数据的负载均衡的分发。另一次是修改了返回数据包的来源地址,目的是为了隐藏实际服务器,使用户感觉不到实际服务器的存在。

限制:整个集群的吞吐量受到调度服务器的带宽限制。


LVS-DR:
这个方法的思路是实施数据链路层数据欺骗,修改网络帧数据的Mac地址。

该方式网络工作环境:
一台调度服务器,N台实际服务器,调度服务器和实际服务都拥有公共IP,都暴露在广域网上。实际服务都有一个和调度服务器ip地址一样的ip别名,也就是 说实际服务器有两个ip,一个真实的ip地址,一个和调度服务器地址一样的IP别名。这个大家都一样的的IP地址我们暂时称之为公用ip。公用IP就是开 放给客户端访问的IP地址。
实际服务器还需要做一个配置,使它们忽略所有的针对公用IP的ARP广播,这样做的话,当系统arp广播询问哪个mac地址拥有公用IP时,就只有调度服务器会响应。外界发送的数据就不会发给实际服务器。

客户端发送数据
客户端发送数据包到公用Ip,由于网络环境只有调度服务器响应过ARP广播,因此这些数据包里的mac地址会被打包成调度服务器的mac地址,因此客户端 数据包首先发送到到调度服务器上。然后,调度服务实施链路层欺骗,将帧数据的目标mac地址替换成根据负载均衡策略决定的某一实际服务器的mac地址。根 据网络协议,链路层优先,mac地址优先,所以数据会根据mac地址被发送到某一实际服务器上。(注意:网络模型中,其实mac地址才是数据包最终的依据 的目标地址,ip地址实际上也要转换成mac地址才能被发送到合适的机器上)

实际服务器返回数据
实际服务器受到mac帧,然后将mac帧组装成ip包,发现ip包中的目标地址和自己的ip别名相同,没有问题,继续处理,(这就是要求ip别名相同的原因,如果不同,操作系统可能会直接忽略)生成响应数据,发送回去。
这时候由于调度服务器不是默认网关,因此这些数据会直接发到广域网上,广域网会把数据送到客户端。客户端收到数据,此时客户端解析数据包从包得来源mac 地址和来源ip地址两个域会发现,公用IP地址对应的mac怎么变了?我的路由表里记着的是公用ip对应调度服务的mac,怎么返回的数据表示公用ip对 应一个新的mac(就是实际服务器的mac)?幸运的是,互联网模型并不检查这种冲突,它不会自作主张得把路由表的公用ip的mac地址改掉,因为互联网 协议明确规定ip和mac地址的对应关系只通过arp广播来获得。

优点:返回数据包无需经过调度器,没有调度服务器带宽瓶颈。原则上集群的带宽是所有实际服务器带宽之和,当然他们不可能超过连接的广域网交换机的带宽。

限制:需要购买多个公共IP,调度服务器和实际服务器必须在同一个 WAN网段,也就是要在同一个交换机上。为什么一定要在同一网段呢?很简单,如果实际服务器在另外一个网段,调度服务器把整个数据包和mac帧修改完之后 再发送到交换机上,交换机发现自己的wan内找不到这个mac地址,无法进行转发。交换机只好再看看,这个目标ip存在于哪个其他的wan中?它通过路由 表发现这个目标ip只存在于自己的wan中(因为实际服务器不会响应arp广播,无法把自己的ip和mac地址发送到整个互联网的路由信息中去),好吧, 自己wan中又找不到这个mac,只好丢掉数据包了。如果在同一网段的话,交换机看到修改后的mac地址是存在的,当然,它也会发现自己路由表中的ip对 应的mac和这个新的mac不一样,但这没关系,mac才是发送数据目标地址的key,ip只要做个验证就好,而且这个验证很松散,只需要匹配到一个ip 别名就成,这么着就成功发送了。理解这里的纠结之处在于,交换机种路由表中的信息是ip-mac这样的key-value对,ip是key,要穿过wan 网段实施网际发送必须有ip的key。而wan网内数据数据发送过程中,实际上mac地址是数据真正的目标地址,mac是key,ip只是一个补充验证。 两者的冲突导致了必须同一网段的限制条件。

LVS-TUN:
这个方法是为了突破LVS-DR同一网段内的限制所提出来的。它不做任何欺骗,而是光明正大的交流,在网络层进行了二次包装。

该方式网络工作环境:
一台调度服务器,N台实际服务器,调度服务器和实际服务都拥有公共IP,都暴露在广域网上。公共ip互不相同,没有别名限制,也无需在同一网段。

客户端发送数据:
客户端发送数据到调度服务器,调度服务器把IP包作为有效负载放到一个新的IP包中去,调度服务器根据调度策略确定一个特定的实际服务器ip作为新的IP 包得目的地址。这些新的IP包完全符合网络协议,也没有任何欺骗的勾当,因此这些ip包光明正大得穿过wan网段,达到指定实际服务器。

实际服务器返回数据
实际服务器拿到数据后,它需要做一个事情,把ip包的有效载荷提取出来,然后把这些载荷再作为ip包组成TCP,再向上组成最后的请求数据。根据请求数据,实际服务器生成返回数据后,光明正大返回给客户端。

优点:和LVS-DR一样,没有调度器带宽瓶颈。

缺点:需要额外的打包和解包,有一定的开销。


最后需要指出的是,上述三种方法都无法突破调度服务器的入口带宽的限制,所有的客户端请求都必须经过调度服务器,区别在于,LVS-NAT受调度服务器出 口带宽的限制,而LVS-DR和LVS-TUN可以突破这个限制,把这个限制提高到wan交换机的出口带宽限制。幸运的是,大部分的网络应用都是请求数据 很少,返回数据数据很大,所以尽可能的提高出口的带宽显得十分有意义,入口的带宽就显得不那么重要了。
阅读(3797) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~