1.LVS简介
html
LVS 是 Linux Virtual Server ,Linux 虚拟服务器。能够实现LINUX平台下的简单负载均衡。通常来讲,LVS采用三层结构:负载调度器、服务器池、共享存储。工做在TCP/IP协议的四层,其转发是依赖于四层协议的特征进行转发的,因为其转发要 依赖于协议的特征进行转发,所以须要在内核的TCP/IP协议栈进行过滤筛选,可想而知,这就须要在内核的模块来完成,而这样的过滤转发规则又是由管理员 进行定义的,因此,LVS就是两段式的架构设计,在内核空间中工做的是"ipvs",而在用户空间中工做的,用来定义集群服务规则的 是"ipvsadm"。与iptables相似,其工做在INPUT链上,因为与iptables有冲突,不能同时使用。linux
2.LVS类型算法
1).NAT模型
后端
这个是经过网络地址转换的方法来实现调度的。首先调度器(director)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪一个后端的真实服务器(RS)。而后调度器就把客户端发送的请求数据包的目标IP地址及端口改为后端真实服务器的IP地址(RIP),这样真实服务器(RS)就可以接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下咱们须要把RS的默认路由设置为director服务器。)把响应后的数据包发送给director,director再接收到响应包后,把包的源地址改为虚拟地址(VIP)而后发送回给客户端。缓存
NAT模式特性:服务器
集群节点跟director必须在同一个IP网络中;
RIP一般是私有地址,仅用于各集群节点间的通讯;
director位于client和real server之间,并负责处理进出的全部通讯;
realserver必须将网关指向DIP;
支持端口映射;
realserver可使用任意OS;
较大规模应该场景中,director易成为系统瓶颈;网络
2).DR模型session
DR模式是经过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式同样,DR模式能够极大的提升集群系统的伸缩性。并且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。可是要求调度器LB与真实服务器RS都有一块网卡链接到同一物理网段上,必须在同一个局域网环境。架构
DR模型特性:负载均衡
集群节点跟director必须在同一个物理网络中;
RIP可使用公网地址,实现便捷的远程管理和监控;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver不能将网关指向DIP;
不支持端口映射;
3).TUN模型
采用NAT模式时,因为请求和响应的报文必须经过调度器地址重写,当客户请求愈来愈多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文经过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,因为通常网络服务应答数据比请求报文大不少,采用VS/TUN模式后,集群系统的最大吞吐量能够提升10倍。
TUN模型特性:
集群节点能够跨越Internet;
RIP必须是公网地址;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver网关不能指向director;
只有支持隧道功能的OS才能用于realserver;
不支持端口映射;
3.LVS调度方法
LVS调度方法分为静态调度方法和动态调度方法两类。
静态调度方法:
rr:调度器经过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而无论服务器上实际的链接数和系统负载。
wrr:加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的链接,权值高的服务器比权值低的服务器处理更多的链接,相同权值的服务器处理相同数目的链接数。
dh:目标地址散列调度算法先根据请求的目标IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空,主要应用于缓存服务器。
sh:源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。主要用于session会话绑定。
动态调度方法:
lc:最少连接,简称LC。该调度是把新的链接请求分配到当前链接数最小的服务器。最小链接调度是一种动态调度算法,它经过服务器当前所活跃的链接数来估计服务器的负载状况。计算当前realserver 的负载状况计算方法:active*256+inactive。
wlc:加权最少连接,简称WLC。加权最小链接调度是最小链接调度的超集,各个服务器用相应的权值表示其处理性能。计算当前realserver 的负载状况计算方法:(active*256+inactive)/weight。
sed:最短的指望的延迟,简称SED。分配一个接踵而来的请求以最短的指望的延迟方式到服务器。计算当前realserver 的负载状况计算方法:(active+1)*256/weight。
nq:无需队列。若是有台 realserver的链接数=0就直接分配过去,不须要在进行sed运算。
LBLC:”基于局部性的最少连接“调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近 使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工做负载,则用“最少连接” 的原则选出一个可用的服务器,将请求发送到该服务器。
LBLCR:“带复制的基于局部性最少连接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不一样之处是它要维护从一个 目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器 组,按“最小链接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小链接”原则从这个集群中选出一台 服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以下降复制的程度。
注:active:活动链接,表示已经创建的链接并正在进行数据传输。inactive:非活动链接,表示已经创建的链接但没有在进行数据传输。
参考资料:
LVS原理详解:http://atong.blog.51cto.com/2393905/1348602
LVS工做模式及原理:http://blog.csdn.net/caoshuming_500/article/details/8291940
LVS工做模式及调度算法介绍:http://www.xmydlinux.org/201102/331.html