lvs负载均衡
标签(空格分隔): 负载均衡算法 反向代理算法
本文学习自以下文章,讲解得很透彻,想知道深层原理的可以去看看:https://www.cnblogs.com/liwei0526vip/p/6370103.html |
一、反向代理模式
(1)dr模式
(2)nat模式
(3)tunnel模式
dr模式
(1)当lvs服务器接收客户端请求的时候,请求包经过网卡到达read_buffer,然后发送给PREROUTING。PREROUTING链过滤之后发现请求包的
目的地址为本地VIP,源地址为CIP。于是mangle表将请求包设置响应的标志位并且发送给INPUT链。
(2)INPUT收到数据包之后,由于IPVS是内建在INPUT链上的,因此IPVS会判断此数据包是否为本集群的数据包,是的话就将修改请求包的源MAC地址
修改为本机的DIP接口的MAC地址,将目的地址修改为后端应用服务器的RIP接口的MAC地址。并且将修改后的数据包发送给POSTROUTING链。
(3)此时的数据包结构为{[CIP][DIP_MAC]---[VIP][RIP_MAC]}
(4)POSTROUTING检查MAC表,发现目的MAC地址就是后端应用服务器的MAC,所以直接通过二层通讯将数据帧发送给后端应用服务器。
(5)后端服务器收到数据帧之后进行处理,然后通过环回口lo将响应包发送给ens33接口然后再发送至客户端。
(6)此时数据包的结构为{[VIP][VIP_MAC]---[CIP][CIP_MAC]}
这里有一点小疑问,Real server为什么能够知道客户端的MAC地址,那个VIP_MAC地址填的是哪个接口的地址
特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
RS跟Director Server必须在同一个物理网络中
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
不支持地址转换,也不支持端口映射
RS可以是大多数常见的操作系统
RS的网关绝不允许指向DIP(因为我们不允许他经过director)
RS上的lo接口配置VIP的IP地址
缺陷:RS和DS必须在同一机房中
nat模式
(1)Director server收到请求包之后,PREROUTING对数据包进行判断,发现是发往本机的,因此PREROUTING将数据包发送给INPUT链。
(2)此时的数据包结构为{[CIP][CIP_MAC]--[VIP][VIP_MAC]}
(3)INPUT链上的IPVS判断数据包为集群的数据包,因此将数据包的源IP修改为DIP,将目的IP修改为RIP,并且发送给后端应用服务器。
(4)此时的数据包结构为{[DIP]}--[RIP]}
(5)后端服务器收处理数据包,并且将响应包发送给Director
(6)此时的数据包结构为{[RIP]--[DIP]}
(7)Director将数据包的源IP修改为VIP,将目的IP修改为CIP,并且发送给客户端
tunnel模式
(1)客户端将数据包发送给Director,此时的数据包结构为{[CIP]--[VIP]}
(2)PREROUTING收到数据包后,判断数据包为发往本机的,因此将 数据包转发给INPUT链,INPUT链对数据包重新封装。
(3)重新封装后的数据包为{[DIP-CIP]--[RIP-VIP]},INPUT链将此包发送给POSTROUTING链,POSTROUTING链发现目的IP为RIP,因此POSTROUTING链将此包转发给Real server。
(5)Real server收到数据包后进行拆包,发现这个包的真实结构为{[CIP]--[VIP]},并且开始处理数据包,根据需求生成了响应包。
(6)响应包的结构为{[VIP]--[CIP]},此包即将发送给客户端
8种负载均衡算法
负载均衡算法 | 原理 | 优点 |
---|---|---|
轮询 | rr循环地将请求调度到各个服务器上 | 配置简单,若服务器的配置都差不多,那么用轮询还是挺好的 |
加权轮询 | wrr在轮询的基础上对某些服务器附加权重,使请求更加倾向发送到权重较高的服务器上 | 后端服务器的配置参差不齐就可根据配置好坏来配置权重 |
最少连接算法 | lc根据后端服务器已存在的连接数来分配请求,连接数越少越有机会被分配到请求 | 这样不至于存在两极分化 |
加权最少连接算法 | 在lc的基础上增加权重 | 类似于lc算法 |
基于局部的最少连接算法 | lblc优先选择最近处理过此客户端请求的服务器,若没有则再选择曾经处理过此客户端请求的服务器。若此客户端是新的,那么就根据lc算法来进行分配 | 两种算法结合,有利于减少资源消耗 |
复杂的基于局部的最少连接算法 | 记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标IP到一组服务器之间的映射关系,防止单点服务器负载过高。 | 比lblcr更加优化 |
基于源地址散列 | 根据源ip进行散列从而静态地分配服务器资源 | 有利于会话保持 |
基于目的地址散列 | 根据目的ip进行散列从而静态地分配服务器资源 | 有利于会话保持 |