用通俗的话来讲负载均衡,就是经过不一样的调度机制将用户的请求分派到后端不一样的服务器。缓解服务器的请求压力,实现负载均衡的方案有多种,下面简单说说了解的几种方式:前端
LVS由两部分组成,包括ipvs和ipvsadm:linux
ipvs:ipvs是工做在内核空间netfilter的input链上的框架,经过用户空间工具进行管理,是真正生效实现调度的代码。nginx
ipvsadm:ipvsadm负责为ipvs内核框架编写规则,管理配置内核中ipvs程序的用户空间的管理工具算法
LVS是工做在linux内核空间的tcp/ip栈的应用程序,其程序名称为ipvs,ipvs会监听input链上的请求,一旦请求的是集群服务的话,ipvs钩子函数会将请求拉出并进行报文修改,强制转发到postrouting处理,关系图以下图所示:后端
在客户端看来,负载层的LVS 就是一个真实的应用服务器,客户端向LVS发送请求信息,LVS接收数据报文至内核空间,工做在input链上的ipvs模块会判断用户请求是否是定义的后端服务器,若是用户请求的就是定义的后端集群服务,数据报文传送到input链上时,input链会强行将数据报文转发给postrouting,postrouting将数据报文传送给后端真实服务器缓存
LVS有多种工做模式,类型以下:服务器
NAT:修改请求报文的目标IP,多目标IP的DNAT网络
DR:操纵封装新的MAC地址session
TUN:在原请求IP报文以外新加一个IP首部架构
FullNAT:修改请求报文的源和目标IP
生产环境中大多使用DR模型工做
在客户端看来,负载层的Director server 就是一个真实的应用服务器,客户端向LVS发送请求信息,Director server接收数据报文至内核空间,工做在input链上的ipvs模块会判断用户请求是否是定义的后端服务器,若是用户请求的就是定义的后端集群服务,数据报文传送到input链上时,input链会强行将数据报文转发给postrouting,postrouting将数据报文传送给后端真实服务器。
LVS-NAT模型运行原理
NAT模式工做过程描述
1, Client向Director server发送带有 [CIP-VIP] 的请求数据报文,PREROUTING 连接收数据报文发现目标ip是本机ip,随后将报文转发值INPUT链
2,工做在INPUT链上的IPVS比对数据包请求的服务是否为集群服务,若是是,修改数据包的目标IP地址为后端服务器IP,而后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
3, POSTROUTING根据选路发给后端realy server,realy server收到数据包发现目标ip是本身,而后向Director响应请求,此时响应报文中的源IP地址信息为 RIP,目标地址IP为CIP
4,Director server在响应Client以前再将报文中ip信息源IP地址改成 VIP,目标IP仍为CIP
NAT模式特色
本质是多目标IP的DNAT,经过将请求报文中的目标地址和目标端口修改成挑出的某个RS的RIP和PORT实现转发
在DR工做模型中,Director收到请求经过修改数据数据报文中目的地址的MAC地址实现数据报文的转发。在该模式下,Director和后端realy server都有一个相同VIP,且在同一物理网络中,所以Client发送的请求报文到达INPUT链时,只要将报文中的[CIP-VIP]的MAC信息改为【DIP-MAC | RIP-MAC】,后端realy server接收报文并构建响应,此时,响应报文再也不通过Director,realy server直接响应客户端。
LVS-DR模型运行原理
DR模式工做流程
1,当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
2, PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3, IPVS比对数据包请求的服务是否为集群服务,如果,将请求报文中的源MAC地址修改成DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,而后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
4, 因为DS和RS在同一个网络中,因此是经过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
5, RS发现请求报文的MAC地址是本身的MAC地址,就接收此报文。处理完成以后,将响应报文经过lo接口传送给eth0网卡而后向外发出。 此时的源IP地址为VIP,目标IP为CIP
DR模式的特色
在TUN工做模式下,Client向Director server 发送请求报文,报文到达Director 内核空间不修改请求报文的ip首部,而是经过在原有ip首部[CIP-VIP]以外,再封装一个ip首部[DIP-RIP],RS收到报文后发现是本身的IP地址,就会将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,并且目标地址是本身的lo接口VIP,那么此时RS开始处理此请求,处理完成滞后,经过lo接口送给eth0网卡,而后向外传递。此时的源IP地址为VIP,目标IP为CIP
LVS-TUN模型运行原理
TUN模式工做流程
TUN模型特色
调度器将请求调度至后端服务器(这种方式最简单,不考虑后端主机性能等因素,公平调度)
在轮询的基础上,调度器能够给后端主机指定权重,考虑到后端主机性能不均衡的问题,可让性能强的主机响应更多的请求
调度器经过"最少链接"调度算法动态地将网络请求调度到已创建的连接数最少的服务器上。若是集群系统的真实服务器具备相近的系统性能,采用"最小链接"调度算法能够较好地均衡负载。
调度器经过"加权轮叫"调度算法根据真实服务器的不一样处理能力来调度访问请求。这样能够保证处理能力强的服务器处理更多的访问流量。调度器能够自动问询真实服务器的负载状况,并动态地调整其权值。
调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工做负载,则用"最少连接"的原则选出一个可用的服务 器,将请求发送到该服务器。
它与LBLC算法的不一样之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小链接"原则从服务器组中选出一台服务器,
若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小链接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以下降复制的程度。
目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
实现session sticky,源IP地址hash;未来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定