Lvs集群的通用结构
Lvs集群采用IP负载均衡技术,属于IP层的交换(L4),具有很好的吞吐率。调度器分析客户端到服务器的IP报头信息,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器,Lvs集群系统的通用结构如下所示,主要包含四大部分:
负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务来自一个IP地址上的。当客户请求到达时,调度器只根据负载情况从服务器池选出一个服务器,将请求转发到选出的服务器。因为所有的操作都是在操作系统核心空间中完成,它的调度开销很小,所以具有很小的吞吐率。
服务器池(server pool),是一组真正执行客户请求的服务器,执行的任务有WEB、MAIL、FTP和DNS等。服务器池的节点数目是可变的,当整个系统收到的负载超过目前所有站点的处理能力时,可以在服务器池中添加服务器来满足不断增长的请求负载。对大多数网站来说,节点与节点之间不存在很强的相关性,所以整个系统的性能可以随着服务器池的节点数目增加而线性增长。
后端存储(backend storage),它为服务器池提供一个共享的存储区,这样使得服务器池拥有相同的内容,提供相同的服务。
Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统中每个节点的状况。
IP负载均衡技术
在已有的IP负载均衡技术中有三种:
一、是通过网络地址转换实现虚拟服务器的VS/NAT技术(Virtual Server via Network Address Translation)
二、是通过直接路由的VS/DR技术(Virtual Server via Direct Routing)
三、是通过IP隧道实现虚拟服务器的VS/TUN技术
通过NAT实现虚拟服务器(VS/NAT),请求,响应都在负载均衡器中完成
VS/NAT的体系结构如下图所示,在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的
1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求
2、Load Balancer的外网(eth0)收到该次请求
3、IPVS调度器根据各个Real Server的负载情况,动态选择一台Real Server(例如:172.16.81.144),将请求报文的目标地址改写发送给172.16.81.144
4、Real Server收到请求报文并处理形成响应文本,由于Real Server上的网关地址为Load Balaceer,响应报文从Real Server发往Load Balaceer。
5、Load Balacer收到172.16.81.144的响应报文后,将响应报文的原地址修改为虚拟IP地址,并发送给客户端。
6、客户认为得到正常的服务,而不知道是哪一台服务器处理的。
通过直接路由实现虚拟服务器(VS/DR)
在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器数目在10-20之间时,负载调度器将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载均衡器中只负责调度请求而响应直接返回给客户,将极大提升提高整个集群系统的吞吐量。VS/DR体系结构如下图所示:调度器和服务器都必须在物理上有一个网卡通过不分断的局域网连接,如通过交换机或者高速的HUB连接。VIP地址为调度器和服务器组共享,调度器设置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面不可见,只是用于处理目标地址为VIP请求。
总结:负载只负责调度,响应直接返回给用户,负载和服务器必须在物理上通过网卡通过不分断的局域网连接,负载地址对外可见,服务器池地址对外不可见。
1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求
2、Load Balacer的外网(eth0)收到该次请求
3、IPVS调度器根据各个Real Server的负载情况,动态的选择一台Real Server,将请求报文转发到Real Server(如下的地址)
4、Real Server的内网(eth1)接收到Load Balacer发过来的IP报文并对IP报文解包,得到客户的请求包,发现包的目标地址被配置在本地的lo设备上,所以就处理这个请求
5、Real Server根据路由表将响应报文通过外网(eth0)直接返回给用户,请求报文的目标地址改为VIP,响应报文的源地址也为VIP,所以响应报文不需要做任何修改,直接返回给客户
6、客户认为得到正常服务,而不知道是哪一台服务器处理的。
在VS/DR响应报文根据服务器的路由表直接返回给用户,而不经过负载调度器,所以负载调度器只处于从客户到服务器的半连接中,我们给出半连接的TCP有限状态机。如下图为VS/DR的TCP状态转移,圈表示状态,箭头表示状态间的转换,箭头上的标识表示在当前状态上收到该标识的输入,迁移到下一个状态。VS/DR的TCP状态迁移是按照半连接的TCP有限状态机进行的。
通过IP隧道实现虚拟服务器(VS/TUN)
跟VS/DR方法相同,VS/TUN多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将相应发送给客户,可以极大地提高整个集群系统的吞吐量。IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。
利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给用户。但在这里,后端服务器有一组而非一个,所以不可能静态地建立一一对应的隧道。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。
1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求
2、Load Balacer的外网(eth0)收到请求
3、IPVS动态选择一台服务器,将请求报文封装在另一个IP报文中
4、Load Balacer的内网(eth1)将封装后的IP报文发送给Real Server
5、Real Server的内网(eth1)收到Load Balacer发过来的IP报文并对IP报文解包,得到客户端请求,发现包的目标地址被配置在本地的IP隧道设备上,所以就处理这个请求。
6、Real Server根据路由表将响应报文通过外网(eth0)直接返回给客户,请求报文的目标地址为VIP,响应报文的原地址也为VIP,所以报文不需要修改直接发送给客户。
7、客户得到正常的服务,而不知道是哪一台服务器处理的。
VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。缺点是它的伸缩能力有限,当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。VS/DR 优点是负载调度器可以处理大量的请求, 因为调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户, 这可以极大地提高 LVS 集群系统的伸缩性。 缺点是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作 ARP 响应,或者能将报文重定向(Redirect)到本地的 Socket 端口上。VS/TUN 的优点是负载调度器可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈,因为负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。缺点是 VS/TUN 技术有 IP 隧道的开销并且对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。 FULLNAT模式(淘宝开源)
解决了上述三种的缺点,解决了真实服务器能跨越 VLAN 通讯,只需要连接到内网即可入站时,目标 IP 更改为真实服务器的 IP,源 IP 更改为内网的本地 IP(一组内网 IP)出站时,目标 IP 更改为客户端的 IP,源 IP 更换为 VIP