LVS是基于TCP/UDP的端口来进行调度的,是基于内核的一个实现,比应用层负载均衡实现有更高的效能,但应用层可以识别高层的协议,针对更多的条件进行负载均衡,另外应用层负载均衡器(代理)可以对后端主机进行健康状况的检测等;可以说这两种方式各有千秋,下面浅谈一下LVS的实现方式以及调度算法: 三种常见的实现方式:
Virtual Server viaNAT(VS-NAT):
用户通过虚拟IP地址(Virtual IPAddress)访问服务时,访问请求的报文会到达负载均衡器,由它进行负载均衡调度,从一组真实服务器选出一个,将报文的目标地址Virtual IPAddress改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将报文发送给选定的服务器。真实服务器的回应报文经过负载均衡器时,将报文的源地址和源端口改为VirtualIP Address和相应的端口,再把报文发给用户。VS/NAT的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。缺点是它的伸缩能力有限,当服务器结点数目升到10时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载均衡器。
Virtual Server via IPTunneling(VS-TUN):
在VS/TUN的集群系统中,负载均衡器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载均衡器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。
VS/TUN技术对服务器有要求,即所有的服务器必须支持“IPTunneling”协议。同时,使用隧道技术,将会增加系统开销,实际生产环境中用的案例不多。
Virtual Server viaDirect Routing(VS-DR):
跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。极大的减轻了Director的负担,这可以极大地提高LVS集群系统的伸缩性。跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载均衡器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应。
2.加权最少链接(Weighted Least Connections):wlc
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。计算方法:(Active*256 + Inactive)/ weight ,也是LVM的默认调度算法;
3.基于局部性的最少链接(Locality-Based Least Connections):lblc
相当于dh+lc ;“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。
4.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication):lblcr
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。