四种工作模型工作过程与特点
lvs有常用的三种工作模式,分别是vs/nat网络地址转换、vs/tun隧道模式、vs/dr直接路由
还有一种fullnat,共计4种,
相关术语
- cip,客户端来源ip
- vip,lvs对外接收客户端数据包的ip
- dip,lvs对内向后端节点转发数据包的ip
- ripN,后端服务器节点的真实ip
- lvs服务器,提供lvs服务,配置ipvs相关规则的服务器
- rs服务器,后端真实提供服务的服务器,支持多种服务,web、mail、media、cache等,
- 客户端,用户客户端浏览器
- own router:tun和dr模式下,rs服务器自己的负责转发响应数据的路由器
vs/nat
图示:
过程解释:
- lvs的vip接收cip发来的是数据包,中间是互联网,此时ip头,cip->vip
- lvs的vip一般不是公网地址,用一个公网地址配置在最外层防火墙,然后由防火墙做个dnat映射到lvs的vip;此时vip就是私网ip,
- lvs做ip头部的修改,将目的的vip,改成选出来的某个rip,此时ip头:cip-ripX
- 这步是ip寻址,所以dip和rip可以跨网段,路由可达即可
- 端口可以修改,所以支持端口映射
- 某个rip收到后,处理后,响应ip头:ripX-cip,发给网关dip,即lvs
- lvs收到后,修改ip头部,此时ip头:vip-cip
- 客户端收到数据
特点:
- 本质是由lvs做的多目标ip的dnat
- lvs需要开启ip_forward
- rs的路由需要指向lvs的dip
- lvs处理请求和响应数据,压力大,可负载的后端节点数量少
- 操作中,修改了ip头部,且支持修改端口,做端口映射
- 后端节点的OS,有tcp/ip协议栈即可,
vs/tun
过程解释
- lvs由vip处收到cip请求:包头:cip-vip
- lvs不对ip头部做修改,在原有ip头部再加一层ip头部,隧道包头:[cip-vip]dip-rip
- 接下来,根据dip和rip完成,lvs到rs的路由寻址
- 可以内部私有网络,可公网互联网
- dip,rip可以都是公网ip,从而完成跨广域网的ip寻址,如跨地域的cache系统
- rs收到后,处理,返回时,包头:vip-cip
- 这个vip一般是配置在每个rs上lo别名接口上,
- 多个vip共存一个网段时,还要做arp相关的设置
- 从rs自己的路由器返回
- 客户端收到响应
特点
- **rs用自己的出口路由,**从而lvs只承担请求建立、请求端口的数据包,极大扩展了lvs能挂的后端节点
- 用ip隧道封装,要求后端rs支持隧道封装,解封装,
- 由于ip隧道封装,可以跨广域网,dip和rip可以都是公网ip
- lvs不对原ip头修改,因此端口无法映射,即,lvs上service端口要和后端rs服务端口一一对应;
vs/dr
过程解释
- lvs从vip处,收到cip的请求数据,包头:cip-vip
- lvs不做ip头部修改、不做ip头部隧道封装,而是!对二次mac做修改
- 本来是:cip-vip:上一跳mac-vip接口mac
- 改成是:cip-vip:dip接口mac-某个rs的rip接口mac
- 经由连接在同一个switch接口,进行二层通信
- rip收到,处理,从自己路由返回
- 某个rs看二层目标mac是自己,收了!
- 拆到三层,目标vip,我也有,收了!
- 于是一直向上进入应用层处理
- 注意:同网段,arp广播,多个相同vip时,arp设置问题
- 客户端收到数据
特点
- lvs的dip和rs的rip要在同一个交换机,同一个网段
- 每个rs要配置vip,在lo的别名接口,且设置non-arp应答
- rs都有自己出口路由
- 修改二层mac,因此端口不可映射,需一一对应
三种模式对比
还有一种模式:fullnat,
- nat
- 后端服务器没什么要求,支持tcp/ip协议栈即可
- 一般在一个私有网络,不硬性要求是一个switch连接的局域网,lvs的dip和rs的rip之间路由可达即可;
- 可负载的后端节点较少,
- lvs同时做了rs响应数据的网关
- tun
- 后端服务器需支持ip的隧道封装,解封装
- lvs的dip和rs的rip可以是局域网,也可是跨互联网的广域网,常用于跨地域的cache系统
- rs有自己的出口路由,
- 响应数据不用经过lvs,所以可以负载的后端节点多
- dr:lvs的默认模式
-
各个rs需要在自己的lo接口的别名接口上配置vip,且设置为不应答arp广播
-
lvs的dip和rs的rip需要是连接在一个交换机上的相同局域网网段内
-
rs有自己的出口路由
-
响应数据不用经过lvs,所以可以负载的后端节点多
nat模式缺点:请求与响应数据包都经由lvs,lvs就极易成为性能瓶颈,且响应数据一般远远大于请求数据包,若响应数据由各个后端真实节点各自返回给客户端,就实现了分而治之,各个节点的压力被分担开,系统方便水平扩展!
因此有了tun模式和dr模式,此2种模式,rs都由自己的路由负责响应数据的转发,lvs只负责 建立连接的请求数据、断开连接的数据 因此极大的提高了lvs可负载的节点数量;
tun和dr模式的区别:tun需要ip封装,性能稍差,但支持跨广域网,dr模式直接改写mac地址,性能好些,但将lvs和rs限制在一个交换机连接的局域网;dr模式为lvs的默认模式
-
fullnat
参考文档:
lvs的fullnat模型,为alibaba添加的新模块,参考文档如下:
https://github.com/alibaba/LVS
https://tonydeng.github.io/sdn-handbook/linux/loadbalance.html