0%

lvs概述

LVS简介、功能特性、与F5、NginX的比较,以及LVS适合应用的场景。

LVS简介

LVS(Linux Virtual Server, Linux虚拟服务器), 实现了负载均衡集群的前端调度器(Director)。

LVS工作在4层,支持大多数的TCP和UDP协议。支持TCP协议的应用有:HTTP,HTTPS ,FTP,SMTP,POP3,IMAP4,PROXY,LDAP,SSMTP等。支持UDP协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。可以用于Web服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等。

LVS是章文嵩博士在1998年发起的开源项目,遵循GPL许可。现在LVS已经集成到Linux内核中(>2.4),并且支持FreeBSD系统。

LVS具有极高的性能,可以支撑上百万的并发连接。

LVS的功能特性

LVS实现了基于IP技术的负载均衡,提供3种负载均衡机制:

  • VS/NAT(基于网络地址转换技术)
  • VS/TUN(基于IP隧道技术)
  • VS/DR(基于直接路由技术)

三种机制的详细说明参考这里

在三种机制的基础上,LVS还提供了多种负载调度(Scheduling)策略。包括:

  • rr(Round Robin), 平均分配负载
  • wrr(Weighted Round Robin),在rr的基础上增加权重设置
  • lc(Least-Connections),分配给连接数最少的服务器
  • wlc(Weighted Least-Connections),在lc的基础上增加权重设置
  • lblc(Locality-Based Least Connections),在lc的基础上将相同目标IP地址的请求调度到同一台服务器。通常用于缓冲(Cache)集群,可以提高各缓存服务器的访问局部性和Cache命中率
  • lblcr(Locality-Based Least Connections with Replication),与lblc类似,只不过同一个目标IP地址会映射到一组缓存服务器
  • dh(Destination Hashing),根据目标地址的Hash运算结果进行分配,通常用于链路负载均衡
  • sh(Source Hashing),根据请求客户端地址的Hash运算结果进行分配,可以实现某种程度的会话保持(Session Persistence)
  • sed(Shortest Expected Delay),在wlc的基础上,进一步计算出期望延迟,向(1+已有连接数)/权重最小者分配请求
  • nq(Never Queue),无队列调度。直接分配给当前无连接的服务器

LVS的监控支持

由于LVS主要进行网络包的转发,所以几乎不消耗CPU资源,从而无法用topvmstat等命令查看资源使用情况。但是使用LVS提供的ipvsadm命令可以查看LVS的连接情况,也可以通过LVS建立的设备文件/proc/net/ip_vs_stats进行查看。

此外,第三方的模块net-snmp-lvs-module可以通过MIB/SNMP监控LVS;lvs_rrd 可以用Web的方式查看LVS的监控图表。

lvs-monitoring

更多的内容可以参考LVS-HOWTO

LVS与F5的对比

LVS最直接的竞争对手应该是F5 Networks公司的BIG-IP系列产品。BIG-IP是著名的硬件负载均衡交换机,支持4层和7层的负载均衡。不同型号的BIG-IP产品的负载能力有所不同,主流型号可以支持400万–800万并发连接。作为商业产品,BIG-IP提供了方便的配置、管理工具,但使用起来仍然比较复杂。BIG-IP设备的价格在十几万至几十万人民币。

与BIG-IP相比,LVS只能支持100万–400万并发连接,并且需要自己解决配置、图形化监控等功能(可以通过第三方的软件)。
好处也很明显:

  1. 完全免费
  2. 可定制性

LVS与NginX的对比

常见的软件负载均衡产品有LVS,NginX,HAProxy等。其中NginX是应用比较广泛的七层负载均衡软件。由于NginX工作在7层,可以按照http协议中的数据(如URL、cookie等)进行负载调度,这是LVS不具备的能力。NginX配置简单,对网络条件的要求也很少。NginX可以支持3–5万的并发连接(7层)。

与NginX相比,LVS并发处理能力要高2个数量级。但这种能力的提高是以相对复杂的网络条件和配置步骤为代价的。同时,LVS无法根据http协议的内容进行负载调度。

LVS不能处理7层的协议内容,但是使用的范围更广泛,可以对绝大多数的TCP和UDP协议的请求进行调度。LVS也可以作为NginX的前端。

LVS的应用场景

由于LVS工作在4层,所有工作在TCP/IP之上的应用或服务都可以通过LVS建立负载均衡集群以提高并发能力。按照集群的用途,可以列出LVS的典型应用场景:

  • web缓存及反向代理

    web缓存及反向代理位于web服务器之前,可以缓存静态内容,只把动态内容的请求反向代理到后端的web服务器。常见的web缓存服务器如Squid,NginX都可以使用LVS构建集群系统。

  • web服务器/应用服务器

    LVS可以作为web服务器/应用服务器(如Nginx,Apache,Tomcat等)的前端调度器,支持会话保持功能。LVS + NginX的组合可以代替F5 BIG-IP的功能,并能达到低端BIG-IP的性能。

  • 数据库服务器

    典型的mysql主-从集群中,LVS可以作为多个从服务器的负载调度器。

  • 重要IP的管理

    对于重要的IP地址(如ESB、数据库、中间件等),可以交给LVS进行统一管理,避免更换IP带来的故障和问题。

参考资料