1、 LVS简介

LVS全称Linux Virtual Server,即Linux虚拟服务器, 是由章文嵩博士发起的自由软件项目,需要更多信息可以访问官方站点.。
现在LVS是 Linux内核的一部分,源码位于”net/netfilter/ipvs”目录下。

使用LVS技术目的:
通过LVS提供的负载均衡技术实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。
利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等。

2.算法简介

2.1 轮叫调度(Round-Robin Scheduling)

轮叫“调度算法,将外部请求按顺序轮流分配到集群中的real server上,它均等地对待每一台服务器,而不管服务器上实际的连接个数和负载情况。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_rr.c”

2.2 加权轮叫调度(Weighted Round-Robin Scheduling)

加权轮叫”调度算法,根据Real Server的不同处理能力来调度访问请求。对每台Real Server设置不同的调度权值,对于性能相对较好的Real Server可以设置较高的权值,而对于处理能力较弱的Real Server,可以设置较低的权值。
这样保证了处理能力强的服务器处理更多的访问流量,充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server的负载情况,并动态地调整其权值。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_wrr.c”

2.3 最小连接调度(Least-Connection Scheduling)

最少连接”调度算法,动态地将网络请求调度到已建立的链接数最少的real server上。如果集群系统的real server具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_lc.c”

2.4 加权最小连接调度(Weighted Least-Connection Scheduling)

加权最少连接调度”算法,每个real server节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。

在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询real server的负载情况,并动态地调整其权值。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_wlc.c”

2.5 基于局部性的最少链接(Locality-Based Least Connections Scheduling)

基于局部性的最少链接”调度算法,针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的real server:
(1)若该服务器是可用的且没有超载,将请求发送到该服务器;
(2)若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,
则用”最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_lblc.c”

2.6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

带复制的基于局部性最少链接”调度算法,也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。
该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,
若服务器没有超载,将请求发送到该服务器,若服务器超载;
否则按”最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。
同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_lblcr.c”

2.7 目标地址散列调度(Destination Hashing Scheduling)

目标地址散列”调度算法,根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的real server,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
源码位于linux源码目录“net/netfilter/ipvs/ip_vs_dh.c”

2.8 源地址散列调度(Source Hashing Scheduling)

源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的real server,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

源码位于linux源码目录“net/netfilter/ipvs/ip_vs_sh.c”

【参考】

Red Hat关于调度算法的简介

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐