1.LVS的介绍:
LVS服务器全称为Linux Virtual Server,由章文嵩博士开发。LVS工作在TCP/IP协议栈上(netfilter/input链上),根据IP/PORT实现数据包的转发、调度,并且能够根据不同的算法,实现调度策略。
注:由于LVS工作在netfilter/input链上,所以无法和IPTABLES同时使用。
2.为什么要使用LVS?
由于互联网人数的直线式增长,导致了WEB服务器资源占用量的急剧增加,这时会出现硬件资源不够用的情况下,此时要想继续为用户提供服务,就必须对硬件资源进行扩充。要么纵向对硬件服务器进行升级(甚至是更换硬件),要么横向扩展增加服务器的数量。然而对硬件服务器进行升级通常是有限的,此时就只能考虑第二种方式,增加服务器的数量。
打个比方:A公司有一个网站,最开始有2000名用户,同时在线最高有1600人,服务器完全应付的过来。但是后来他们对论坛做推广,用户数骤增到4000名,当在线人数高于2000人服务器就会直接挂掉。于是团队对服务器进行硬件升级,增加了3个CPU,16G内存,此时服务器已经达到部件升级的顶级,但是仍然无法应付。这时有了三个方案:
(1)买一台更高级的,把旧的替换掉;
(2)买一台同样的配置的服务器,对其做负载均衡;
(3)买一台更高级的,新旧同时做负载均衡;
这三个方案中,作为老板来讲很显然是最后两个更容易接受。假设A公司选择了第二或第三种方案,并且两台服务器提供了同样的资源,此时如何让用户访问一个域名时能分配到不同的服务器?比较简单的可以做DNS负载均衡,不过,这种负载均衡仅能提供IP的轮流解析,无法实现更高级的算法,当其中一台服务器的用户活跃度比另一台高的时候,就代表你的负载均衡失效,如果不幸挂掉后果可想而知。
这时就需要LVS了,正如第一段所述,LVS不仅仅可以根据IP/PORT实现负载均衡,还可以根据不同的算法实施不同的调度策略,所以其应用场景更加广泛,并且他工作于Linux的内核中,占用资源非常的少,但是效率非常的高。
3.LVS的两个模块:
LVS提供两个模块,ipvsadm和ipvs,ipvs类似于netfilter,是一个规则的实施模块,ipvsadm是一个规则的配置工具,需要用户自行安装。
4.LVS的算法:
算法,就是解决问题的步骤。LVS根据为其配置的调度算法对数据进行分发。LVS有10种调度算法,从而实现不同场景、不同需求的负载调度机制。
大体可分为两种:
4.1 固定调度:不考虑后端服务器的状态因素(例如活动连接数),按照规则对数据进行分发。
4.1.1 rr:轮询,对后端服务器轮流进行数据分发。
4.1.2 wrr:加权轮询,根据权重对后端服务器进行数据分发。
4.1.3 sh:源地址hash,将相同客户端请求分给上次相同的Real Server,实现会话绑定
4.1.4 DH:目标地址hash,将同一个目标IP地址的请求发送给同一个Server,类似于sh,应用于Cache服务器。
4.2 动态调度:考虑后端服务器的状态因素,并依照其状态进行计算实现策略分发。
4.2.1 lc:最少连接:
active*256+inactive;哪台服务器的值小分发给谁;结果一样按IP规则选项;
4.2.2 wlc:加权最少连接:
(active*256+inactive)/weigth;哪台服务器值小分发给谁;所有服务器结果一样按IP排序选项;
4.2.3 sed:最短的期望的延迟;解决了wlc的计算结果一样时,按IP排序的问题,
(active+1)*256/weight
4.2.4 nq:永不排队;改进的sed,上来先轮询一遍,之后进行计算,避免权重高的服务器处理太多请求,而其他服务器空闲;
(actvie+1)*256/weight
4.2.5 lblc:基于本地的最少连接;
尽可能的将同一个目标IP的请求发送给同一个服务器;
4.2.6 lblcr:基于本地的带复制功能的最少连接
Cache服务器共享缓存数据,尽可能的将同一个目标IP地址的请求发送给主Cache Server。
LVS的默认调度算法是wlc,请求数量非常大的收获,非活动连接(inactive)不能忽略。
5.LVS的三种工作模式:NAT、DR、TUN及注意事项
5.1 NAT:地址转换,多目标DNAT
NAT模式。此模式中,LVS位于Client与Real Server之间,LVS需要处理Client请求与Real Server响应请求。大致流程、逻辑架构如下:
我们总结一下NAT特性:
1.所有数据经由LVS转发并做地址转换
2.集群节点必须和Director在同一网络中(real server网关需指向DIP,所以要在同一网络中)
3.real server网关必须指向DIP(所有数据经由LVS转发,所以必须指向DIP)
4.real server可以配置私网、公网地址
5.Director可以做端口映射
6.real server可以使用任何操作系统
NAT模式的缺点:
由于所有数据包都需要经由LVS转换NAT并转发,所以会导致LVS服务器繁忙的处理NAT操作,导致分发(调度)计算能力下降,易成为瓶颈。所以此模式并不适合生产环境使用,但是面试的时候很可能会问到其特性,最好可以记一记。
5.2 DR:直接路由
DR模式。此模式中,LVS位于Client与Real Server之间,不过LVS仅处理Client请求。大致流程、逻辑架构如下
注:LVS是配置的Real Server的IP地址,是RIP,而不是VIP。当数据包来的时候,LVS计算并分配一台服务器,然后得到其RIP,发起ARP广播,获取到RIP的MAC,将这个包发送出去。当Real Server接收到的时候,他发现目标地址是VIP,而恰巧VIP自己也有配置,所以就处理了!
我们总结一下DR特性:
1.Director只负责请求报文
2.Director必须和Real Server在同一物理网络中(因为请求是由MAC地址分发的)
3.RIP可以配置为公网地址,实现远程管理
4.Director通过MAC来实现分发请求到Real Server
5.Director不能做端口映射、Real Server的网关不能指向Director
6.需要拒绝Real Server的对VIP的ARP应答。
5.3 TUN:隧道模式
TUN模式。此模式中,LVS位于Client与Real Server之间,与DR一样,LVS仅处理Client请求。大致流程、逻辑架构如下:
我们总结一下TUN特性:
1.Director可以和Real Server不在同一网络中
2.Director只接收请求报文
3.Director通过重新封装IP首部进行请求分发
4.生产环境中,不同IDC机房的情况下,RIP必须为公网地址
5.Real Server必须是支持TUN的操作系统
最后附一张特性图: