LVS - Linux Virtual Server
Linux Virtual Server (LVS) 是一种负载均衡(LB,Laod Balance)技术,采用IP负载均衡技术和基于内容请求分发技术。具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行。
LVS 工作在TCP/UDP协议的四层,能根据用户请求的IP与PROT进行转发,即LVS能实现四层交换、四层路由。
LVS的结构主要分为两部分:
- ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;
- ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及RealServer
IPVS (IP Virtual Server) 在 Linux 内核中实现了传输层负载平衡,即4层交换。在主机上运行的IPVS在真实服务器群集的前端充当负载平衡器,它可以将对基于 TCP/UDP 的服务的请求定向到真实服务器,并使真实服务器的服务显示为单个IP地址的虚拟服务。
LVS的模型中角色
- Director 调度器 也称负载均衡器 、Dispatcher、Balancer、VS(Virtual Server) 调度器主要用于接受用户请求。
- RS (Real Server) 真实主机 用于真正处理用户的请求。
- CIP (Client IP) 客户端IP。
- VIP (Director Virtual IP) 调度器用于与客户端通信的IP地址。
- DIP (Director IP) 调度器用于与RealServer通信的IP地址。
- RIP (Real Server ) 后端主机的用于与调度器通信的IP地址。
LVS IP 负载均衡技术
现在虚拟服务器以三种方式实现。LinuxDirector 中同时存在三种 IP 负载均衡技术(包转发方法)。它们是通过 NAT 的虚拟服务器、通过 IP 隧道的虚拟服务器和通过直接路由的虚拟服务器。
VS/NAT, VS/TUN 与 VS/DR 比较总结:
VS/NAT | VS/TUN | VS/DR | |
---|---|---|---|
server | any | tunneling | non-arp device |
server network | private | LAN/WAN | LAN |
server number | low (10~20) | high | high |
server gateway | load balancer | own router | own router |
LVS 转发模式
- lvs-nat: 修改请求报文的目标IP
- lvs-dr: 操纵封闭新的MAC地址
- lvs-tun: 在原请求IP报文之外新加一个IP首部
- lvs-fullnat: 修改请求报文的源和目标IP
VS/NAT (Network Address Transform)
示意图和调度步骤:
原理:
基于ip伪装MASQUERADES
,原理是多目标DNAT。
所以请求和响应都经由Director调度器。
LVS-NAT的优点与缺点:
优点:
- 支持端口映射
- RS可以使用任意操作系统
- 节省公有IP地址。
RIP和DIP都应该使用同一网段私有地址,而且RS的网关要指向DIP。
使用nat另外一个好处就是后端的主机相对比较安全。
缺点:
- 请求和响应报文都要经过Director转发;极高负载时,Director可能成为系统瓶颈。
就是效率低的意思。
VS/TUN (IP Tuneling)
示意图和调度步骤:
原理:
基于隧道封装技术。在IP报文的外面再包一层IP报文。 当Director接收到请求的时候,选举出调度的RealServer 当接受到从Director而来的请求时,RealServer则会使用lo接口上的VIP直接响应CIP。 这样CIP请求VIP的资源,收到的也是VIP响应。
LVS-TUN的优点与缺点:
优点:
- RIP,VIP,DIP都应该使用公网地址,且RS网关不指向DIP;
- 只接受进站请求,解决了LVS-NAT时的问题,减少负载。
- 请求报文经由Director调度,但是响应报文不需经由Director。
缺点:
- 不指向Director所以不支持端口映射。
- RS的OS必须支持隧道功能。
- 隧道技术会额外花费性能,增大开销。
VS/DR (Direct Routing)
示意图和调度步骤:
原理:
当Director接收到请求之后,通过调度方法选举出RealServer。
讲目标地址的MAC地址改为RealServer的MAC地址。
RealServer接受到转发而来的请求,发现目标地址是VIP。RealServer配置在lo接口上。
处理请求之后则使用lo接口上的VIP响应CIP。
LVS-DR的优点与缺点:
优点:
- RIP可以使用私有地址,也可以使用公网地址。
只要求DIP和RIP的地址在同一个网段内。
- 请求报文经由Director调度,但是响应报文不经由Director。
- RS可以使用大多数OS
缺点:
- 不支持端口映射。
- 不能跨局域网。
总结
三种模型虽然各有利弊,但是由于追求性能和便捷,DR是目前用得最多的LVS模型。
LVS 调度方法(Scheduler)
- 轮叫调度(Round-Robin Scheduling)
- 加权轮叫调度(Weighted Round-Robin Scheduling)
- 最小连接调度(Least-Connection Scheduling)
- 加权最小连接调度(Weighted Least-Connection Scheduling)
- 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
- 目标地址散列调度(Destination Hashing Scheduling)
- 源地址散列调度(Source Hashing Scheduling)
LVS的调度方法分为两类(静态算法、动态算法),共10种
在转发方式选定的情况下,采用哪种调度算法将决定整个负载均衡的性能表现。不同的算法适用于不同的生产环境,有时可能需要针对特殊需求自行设计调度算法。
静态方法:仅根据算法本身进行调度(注重起点公平):
- ① rr Round Robin 轮询或轮叫,算法将外部请求按顺序轮流分配到集群中的RS(真实)服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。不支持权重。
- ② wrr Weighted RR 权重轮询或加权轮叫,此算法根据RS(真实)服务器的不同处理能力来调度访问请求。这样可保证处理能力强的服务器能处理更多的访问请求。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
- ③ sh source hashing 源地址hash,对请求的客户端IP进行hash计算,可实现session绑定,但可能会破坏负载均衡。Director在本地维护一张hash表,此表保存有每一个源IP地址及其第一次调度哪一个Server,每一条记录都有默认时长。
- ④ dh destination hashing 目标地址hash,请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。Director在本地维护一张散列表,此表保存有每一次请求的目标IP及其对应调度的目标服务器(RS)。将发往同一个目标地址的请求始终转发至第一次挑中的RS服务器。使用场景多数为缓存服务器代理。
动态方法:根据算法及RS当前的负载状态(注重结果公平):
- ⑤ lc Least Connection 最少连接,此算法动态地将网络请求调度到已建立的连接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接“算法可以较好地均衡负载。
Overhead=Active*256+Inactive
来实现,采用计算值最小的RS,不支持权重。 - ⑥ wlc Weighted LC 权重最少连接,在集群系统中服务器性能差异较大的情况下,调度器采用”加权最少连接“优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。是LVS默认的调度算法。权重公式:
Overhead=(Active*256+Inactive)/weight
- ⑦ sed Shortest Expect Delay 最短期望延迟,wlc的改进算法,简单地说就是调度器会选择响应速度快的RS(真实)服务器,先选择权重(weight)较大的服务器计算方法:
Overhead=(Active+1)*256/weight
这种方式可能会连接多个请求都发送给一台性能较强(即weight值较大)的RS,而别的RS却连一个请求都不会接收到。 - ⑧ nq Nerver Queus: sed算法的改进,永不排队,每个RS至少先处理一个请求,然后再按sed算法来。
- ⑨ lblc Locality-based least connection 基于局部性的最少连接,可以理解为动态的dh算法。目前主要用于cache集群系统,该算法根据请求的目标ip地址找出该目标ip地址最近使用的服务器,若该服务器是可用的且没有超载,则将请求发送的该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少连接”的原则选出一个可用的服务器,将请求发送到该服务器。
- ⑩ lblcr Replicated and Locality-based least connection带复制的基于 的最少连接。各缓存RS各自匀一匀缓存项,及达到负载均衡)。上面说了dh不利于负载均衡,这个算法算是弥补了这个缺陷。
LVS 集群 架构
为了整个系统的透明性,可伸缩性,可用性和可管理性,通常在LVS集群中采用三层架构。
- 负载平衡器(Load Balancer) 是整个群集系统的前端计算机,它在一组服务器之间平衡来自客户端的请求,以便客户端将所有服务视为来自单个IP地址。
- 服务器群集(Server Cluster),这是一组运行实际网络服务的服务器,例如网络,邮件,FTP,DNS和媒体服务。
- 共享存储(Shared Storage),它为服务器提供了共享的存储空间,因此服务器很容易拥有相同的内容并提供相同的服务。
高可用
现在,负载均衡器可能成为整个系统的单个故障点。为了防止整个系统因负载均衡器故障而停止运行,我们需要设置负载均衡器的一个备份(或多个备份)。两个心跳守护程序分别在主数据库和备份数据库上运行,它们定期通过串行线路和/或网络接口彼此心跳,例如“我还活着”。当备份的心跳守护程序在指定时间内无法听到来自主节点的心跳消息时,它将接管虚拟IP地址以提供负载平衡服务。当出现故障的负载均衡器恢复工作时,有两种解决方案,一种是使其自动成为备用负载均衡器,另一种是活动负载均衡器释放VIP地址,
主负载平衡器具有连接状态,即连接转发到哪个服务器。如果备份负载均衡器接管了这些连接信息,则客户端必须再次发送其请求以访问服务。为了使负载平衡器故障转移对客户端应用程序透明,我们在IPVS中实现了连接同步,主要IPVS负载平衡器通过UDP多播将连接信息同步到备份负载平衡器。当主要负载发生故障后,备份负载平衡器接管时,备份负载平衡器将具有大多数连接状态,因此几乎所有连接都可以继续通过备份负载平衡器访问服务。
有几种与LVS结合使用的软件包可以提供整个系统的高可用性,例如Red Hat Piranha,Keepalived,UltraMonkey,heartbeat plus ldirectord和heartbeat plus mon。
优点
功能特性
- 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生;
- 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
- 工作稳定,自身有完整的双机热备方案;
- 无流量,保证了均衡器IO的性能不会收到大流量的影响;
- 应用范围比较广,可以对所有应用做负载均衡;
高可用性
LVS是一个基于内核级别的应用软件,因此具有很高的处理性能,用LVS构架的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,同时又实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。如配置百兆网卡,采用VS/TUN或VS/DR调度技术,整个集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。
高可靠性
LVS负载均衡集群软件已经在企业、学校等行业得到了很好的普及应用,国内外很多大型的、关键性的web站点也都采用了LVS集群软件,所以它的可靠性在实践中得到了很好的证实。有很多以LVS做的负载均衡系统,运行很长时间,从未做过重新启动。这些都说明了LVS的高稳定性和高可靠性。
适用环境
LVS对前端Director Server目前仅支持Linux和FreeBSD系统,但是支持大多数的TCP和UDP协议,支持TCP协议的应用有:HTTP,HTTPS ,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。支持UDP协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。
LVS对Real Server的操作系统没有任何限制,Real Server可运行在任何支持TCP/IP的操作系统上,包括Linux,各种Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows等。
缺点
需要网络环境的支持
不能针对上层协议分析
如果做成硬件会更完美
类似产品
通过硬件,常见的硬件有比较昂贵的 NetScaler、F5、Radware和Array等商用的负载均衡器,
通过软件 比较常见的有 LVS、Nginx、HAproxy 等,其中 LVS 是建立在四层协议上面的,而另外 Nginx 和 HAproxy 是建立在七层协议之上