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资源,从而无法用top
、vmstat
等命令查看资源使用情况。但是使用LVS提供的ipvsadm
命令可以查看LVS的连接情况,也可以通过LVS建立的设备文件/proc/net/ip_vs_stats
进行查看。
此外,第三方的模块net-snmp-lvs-module可以通过MIB/SNMP监控LVS;lvs_rrd 可以用Web的方式查看LVS的监控图表。
更多的内容可以参考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万并发连接,并且需要自己解决配置、图形化监控等功能(可以通过第三方的软件)。
好处也很明显:
- 完全免费
- 可定制性
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带来的故障和问题。
参考资料
- LVS官方网站
- LVS中文社区
- LVS手册:可伸缩网络服务的设计与实现
- man ipvsadm
- 《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》