Linux服务器集群系统——LVS集群中的IP负载均衡技术( 四 )

Linux服务器集群系统——LVS集群中的IP负载均衡技术

文章插图
VS/NAT的例子
VS/NAT 的配置如下表所示,所有到IP地址为202.103.106.5和端口为80的流量都被负载均衡地调度的真实服务器172.16.0.2:80和 172.16.0.3:8000上 。目标地址为202.103.106.5:21的报文被转移到172.16.0.3:21上 。而到其他端口的报文将被拒绝 。
Linux服务器集群系统——LVS集群中的IP负载均衡技术

文章插图
 
从以下的例子中,我们可以更详细地了解报文改写的流程 。
访问Web服务的报文可能有以下的源地址和目标地址:
SOURCE202.100.1.2:3456DEST202.103.106.5:80调度器从调度列表中选出一台服务器,例如是172.16.0.3:8000 。该报文会被改写为如下地址,并将它发送给选出的服务器 。
SOURCE202.100.1.2:3456DEST172.16.0.3:8000从服务器返回到调度器的响应报文如下:
SOURCE172.16.0.3:8000DEST202.100.1.2:3456响应报文的源地址会被改写为虚拟服务的地址,再将报文发送给客户:
SOURCE202.103.106.5:80DEST202.100.1.2:3456这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是服务器172.16.0.2还是服务器172.16.0.3处理的 。
4. 通过IP隧道实现虚拟服务器(VS/TUN)
在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈 。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据 。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量 。
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址 。IP隧道技术亦称为IP封装技术(IP encapsulation) 。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址 。
我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户 。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求报文封装和转发给选出的服务器 。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务 。VS/TUN的体系结构如图4所示,各个服务器将VIP地址配置在自己的IP隧道设备上 。
Linux服务器集群系统——LVS集群中的IP负载均衡技术

文章插图
VS/TUN的体系结构
VS/TUN 的工作流程如图5所示:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同 。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户 。
Linux服务器集群系统——LVS集群中的IP负载均衡技术

文章插图
VS/TUN的工作流程
在这里需要指出,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道究竟是哪一台服务器处理的 。
Linux服务器集群系统——LVS集群中的IP负载均衡技术

文章插图
半连接的TCP有限状态机
5. 通过直接路由实现虚拟服务器(VS/DR)
跟VS/TUN 方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量 。该方法与IBM的NetDispatcher产品中使用的方法类似(其中服务器上的IP地址配置方法是相似的),但IBM的 NetDispatcher是非常昂贵的商品化产品,我们也不知道它内部所使用的机制,其中有些是IBM的专利 。
VS/DR的体系结构如图 7所示:调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连 。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求 。


推荐阅读