LVS NAT,DR,TUN三种负载原理
负载均衡简单介绍
用通俗的话来说负载均衡,就是通过不同的调度机制将用户的请求分派到后端不同的服务器。缓解服务器的请求压力,实现负载均衡的方案有多种,下面简单说说了解的几种方式:
- DNS 负载:利用DNS的解析可以实现区域的性用户请求负载,这种负载方式是离用户最近的负载方案,请求还没有到达内部系统架构服务前就已经被分流了。
- LVS :就是本篇文件要整理的解决方案,LVS性能特别强,它是工作在linux系统内核的一个程序,LVS负载的特点是超强的分流功能,但它只能负载调度流量的去向,没有办法实现在业务层分流负载。
- Haproxy:haproxy可以工作在ISO7层模型中的4层和7层,工作在4层时是基于IP的负载,这与LVS作用相同,工作在7层时是基于应用层的应用协议进行负载,可以根据分析报文内容并结合算法来选择后端服务
- Nginx: nginx也是应用层负载均衡器,可以实现反向代理功能,nginx的特点是可以将请求按照业务类型进行向后端调度,对请求从业务功能上进行了负载调度。
lVS工作组成
LVS由两部分组成,包括ipvs和ipvsadm:
-
ipvs:ipvs是工作在内核空间netfilter的input链上的框架,通过用户空间工具进行管理,是真正生效实现调度的代码。
-
ipvsadm:ipvsadm负责为ipvs内核框架编写规则,管理配置内核中ipvs程序的用户空间的管理工具
LVS工作原理
LVS是工作在linux内核空间的tcp/ip栈的应用程序,其程序名称为ipvs,ipvs会监听input链上的请求,一旦请求的是集群服务的话,ipvs钩子函数会将请求拉出并进行报文修改,强制转发到postrouting处理,关系图如下图所示:
在客户端看来,负载层的LVS 就是一个真实的应用服务器,客户端向LVS发送请求信息,LVS接收数据报文至内核空间,工作在input链上的ipvs模块会判断用户请求是不是定义的后端服务器,如果用户请求的就是定义的后端集群服务,数据报文传送到input链上时,input链会强行将数据报文转发给postrouting,postrouting将数据报文传送给后端真实服务器
LVS的4种工作模式
LVS有多种工作模式,类型如下:
-
NAT:修改请求报文的目标IP,多目标IP的DNAT
-
DR:操纵封装新的MAC地址
-
TUN:在原请求IP报文之外新加一个IP首部
-
FullNAT:修改请求报文的源和目标IP
生产环境中大多使用DR模型工作
LVS-NAT模式
在客户端看来,负载层的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实现转发
- 1,RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 2,请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 3, 支持端口映射,可修改请求报文的目标PORT
- 4, LVS必须是Linux系统,RS可以是任意OS系统
LVS-DR模式
在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模式的特点
- 1,保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS
- 2,RS的RIP可以使用私有地址,但也可以使用公网地址
- 3,RS和director必须在同一物理网络中
- 4,请求报文有director调度,但响应报文不一定经由director
- 5,不支持端口映射
- 6,RS可以支持大多数OS
- 7,RS的网关不能指向DIP
LVS-TUN模式
在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模式工作流程
- 1,当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
- 2, PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- 3,IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
- 4,POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
- 5, RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
TUN模型特点
- 1,RIP、VIP、DIP全是公网地址
- 2,RS的网关不会也不可能指向DIP
- 3,所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
- 4,不支持端口映射,
- 5,RS的系统必须支持隧道
LVS调度算法
- RR 轮询
调度器将请求调度至后端服务器(这种方式最简单,不考虑后端主机性能等因素,公平调度)
- WRR 加权轮询
在轮询的基础上,调度器可以给后端主机指定权重,考虑到后端主机性能不均衡的问题,可以让性能强的主机响应更多的请求
- LC 最少连接
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
- WLC 加权最少连接
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
- LBLC 基于局部性最少连接
调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
- LBLCR 带复制的基于局部性最少连接
它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,
若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
- DH 目标地址哈希
目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
- SH 源地址哈希
实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定