律师咨询24小时在线(吕氏春秋)

本文希望能够清晰地解释LVS的各种转运模式,以及它们的工作流程和优缺点。同时从网络包循环的原理解释清楚优缺点的原因,用阿里云slb举例说明优缺点。

律师咨询24小时在线(吕氏春秋)

如果不知道网络数据包是如何流动的,建议先看一下这个基础:《程序员网络知识——一个网络数据包的旅程》,对后面理解LVS的转发方式很有帮助。

几个术语和缩写

Cip: clientip,客户端地址vip:虚拟ip,LVS实例iprip: realip,后端地址RS:真正提供服务的真实服务器后端机器LB:负载均衡负载均衡器LVS: Linux虚拟服务器ip:源IP dip:目的地的几种转发模式LVS DR模型-(定向路由-直接路由)NAT模型-(网络地址转换-网络地址转换)全NAT-(全NAT) enat-(en因此NAT或三角模式/DNAT,由阿里云提供)IP TUN模型- (IP隧道-IP隧道)DR模型(定向路由-直接路由)

基本流程如上图(假设cip是200.200.200.2,vip是200.200.200.1):

请求流量(sip 200.200.200.2, dip 200.200.200.1) 先到达 LVS然后LVS,根据负载策略挑选众多 RS中的一个,然后将这个网络包的MAC地址修改成这个选中的RS的MAC然后丢给交换机,交换机将这个包丢给选中的RS选中的RS看到MAC地址是自己的、dip也是自己的,愉快地手下并处理、回复回复包(sip 200.200.200.1, dip 200.200.200.2)经过交换机直接回复给client了(不再走LVS)

我们可以看到上面的过程。请求包到达LVS后,LVS只修改包的目的MAC地址,回复包直接返回给客户端。

同时,你也可以看到多个RS和LVS共享同一个IP,但使用不同的MAC。他们二层路由不需要IP,而且在同一个vlan,所以这里没有问题。

RS会在lo loopback网卡上配置vip,并在route中添加相应的规则,这样在步骤4中收到的包就可以被os正常处理。

优势:

DR模式是性能最好的一种模式,入站请求走LVS,回复报文绕过LVS直接发给Client

缺点:

要求LVS和rs在同一个vlan;RS需要配置vip同时特殊处理arp;不支持端口映射。

为什么要求LVS和RS在同一个vlan中(或同一个第2层网络中)?

因为DR模式依赖于多个RS和LVS共享同一个VIP,然后根据MAC地址在LVS和多个RS之间路由,所以LVS和RS必须在同一个vlan或者同一个二层网络。

为什么DR模式性能最好?

因为回复包不走LVS,大多数情况下请求包小,回复包大,所以LVS很容易成为流量瓶颈。同时,LVS只需要修改传入数据包的MAC地址。

博士模式:为什么你不需要去LVS返回包?

由于RS和LVS共享同一个vip,所以RS在回复时可以正确填写sip为vip,LVS不再需要再修改一次(后面需要NAT和Full NAT)

总结下DR的结构。

绿色是请求包,红色是修改了MAC的请求包。

NAT模型(NetWork Address Translation – 网络地址转换)

nat模式的结构图如下:

基本流程:

client发出请求(sip 200.200.200.2,dip 200.200.200.1)请求包到达lvs,lvs修改请求包为(sip 200.200.200.2, dip rip)请求包到达rs, rs回复(sip rip,dip 200.200.200.2)这个回复包不能直接给client,因为rip不是VIP会被reset掉但是因为lvs是网关,所以这个回复包先走到网关,网关有机会修改sip网关修改sip为VIP,修改后的回复包(sip 200.200.200.1,dip 200.200.200.2)发给client

优势:

配置简单支持端口映射(看名字就知道)RIP一般是私有地址,主要用户LVS和RS之间通信

缺点:

LVS和所有RS必须在同一个vlan进出流量都要走LVS转发LVS容易成为瓶颈一般而言需要将VIP配置成RS的网关

NAT为什么要求lvs和RS在同一个vlan?

因为回复包必须由lvs再次从sip更改为vip,所以客户端识别它。如果回复数据包的sip不是客户端数据包请求的dip(即vip ),则连接将被重置。如果LVS不是网关,因为回复包的dip是cip,可能会从其他路由走,LVS没有机会修改回复包的sip。

总结下层NAT结构

请注意,LVS在修改传入和传出数据包(sip、dip)时,仅更改了其中一个,因此存在下一个完整的NAT。当然NAT最大的缺点是LVS和RS必须在同一个vlan,这就限制了LVS集群和RS集群的部署灵活性,尤其是在阿里云这种对外出售的公有云环境中。NAT基本不实用。

full NAT模型(full NetWork Address Translation-全部网络地址转换)

基本过程(类似于NAT):

client发出请求(sip 200.200.200.2 dip 200.200.200.1)请求包到达lvs,lvs修改请求包为(sip 200.200.200.1, dip rip) 注意这里sip/dip都被修改了请求包到达rs, rs回复(sip rip,dip 200.200.200.1)这个回复包的目的IP是VIP(不像NAT中是 cip),所以LVS和RS不在一个vlan通过IP路由也能到达lvslvs修改sip为vip, dip为cip,修改后的回复包(sip 200.200.200.1,dip 200.200.200.2)发给client

优势:

解决了NAT对LVS和RS要求在同一个vlan的问题,适用更复杂的部署形式

缺点:

RS看不到cip(NAT模式下可以看到)进出流量还是都走的lvs,容易成为瓶颈(跟NAT一样都有这个问题)

为什么全NAT解决了NAT中LVS和RS必须在同一个vlan的问题?

因为LVS在修改入局包时修改了(sip,dip)(这也是full的主要意思),而rs的回复包的目的地址是vip (cip vip(NAT),所以只要vip和rs之间有三层连接,LVS和RS就可以在不同的vlan,也就是不再要求LVS是网关,这样LVS和RS就可以部署在更复杂的网络环境中。

为什么RS完全NAT后看不到cip?

因为cip被修改了,RS只能看到LVS的vip。在Ali内部,cip将被放入TCP包的选项中,并传递给RS。一般RS部署自己编写的toa模块从Options中读取cip,这样RS就可以看到cip了。当然,这不是一个开源的通用方案。

总结下全NAT的结构

请注意上图中绿色传入数据包和红色传出数据包的地址变化。

到目前为止,全NAT已经解决了NAT同样的vlan要求,基本可以在公有云中使用,但是仍然没有解决所有进出流量都要经过LVS的问题(LVS要修改进出包)。

那么,有没有像全NAT这样的方案,不限制lvs和RS之间的网络关系,同时出网流量不像DR模式那样走LVS?

阿里云的ENAT模式(enhence NAT)

优势:

不要求LVS和RS在同一个vlan出去的流量不需要走LVS,性能好

缺点:

集团实现的自定义方案,需要在所有RS上安装ctk组件(类似full NAT中的toa)

基本流程:

client发出请求(cip,vip)请求包到达lvs,lvs修改请求包为(vip,rip),并将cip放入TCP Option中请求包根据ip路由到达rs, ctk模块读取TCP Option中的cip回复包(RIP, vip)被ctk模块截获,并将回复包改写为(vip, cip)因为回复包的目的地址是cip所以不需要经过lvs,可以直接发给client

ENAT模式在内部也称为三角模式或DNAT/SNAT模式。

为什么ENAT的回复包不需要回LVS?

因为在回到全NAT模式之前,LVS需要再次重写应答包的IP,而在ENAT模式下,这是由RS上的ctk模块提前完成的。

为什么LVS和ENAT的RS可以在不同的vlan中?

与完整NAT相同

概述下ENAT的结构

最后说说不太常用的TUN模型。

IP TUN模型(IP Tunneling – IP隧道)

基本流程:

请求包到达LVS后,LVS将请求包封装成一个新的IP报文新的IP包的目的IP是某一RS的IP,然后转发给RSRS收到报文后IPIP内核模块解封装,取出用户的请求报文发现目的IP是VIP,而自己的tunl0网卡上配置了这个IP,从而愉快地处理请求并将结果直接发送给客户

优势:

集群节点可以跨vlan跟DR一样,响应报文直接发给client

缺点:

RS上必须安装运行IPIP模块多增加了一个IP头LVS和RS上的tunl0虚拟网卡上配置同一个VIP(类似DR)

灾难恢复模式下的LVS修改目标MAC。

IP TUN为什么不找同一个vlan?

因为ip TUN不修改MAC来路由,所以不要求同一个vlan,只要求lvs和rs之间的ip连接。DR模式要求广播可以在lvs和RS之间传递。

IP调谐器性能

这个包不能回LVS,但它不如DR在另一个包拆包后的效果好。

总结IP调谐器的结构

图中红线是重新封装的包,ipip是操作系统的一个内核模块。

DR可能在小公司用的比较多,IP TUN用的比较少。相对来说,后面三个差不多,用的比较多,可比性强,所以放在一起。

参考资料

https://www.atatech.org/articles/15279

https://www.atatech.org/articles/48739

https://www.atatech.org/articles/48571

云服务ALB访问、后端依赖内核模块和接口使用指南

https://www.atatech.org/articles/106276

程序员的网络知识-一个网络包的旅程

https://www.atatech.org/articles/80573

@长垣关于LVS的PPT。

作者:plantegg

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/302664.html

发表回复

登录后才能评论