为了账号安全,请及时绑定邮箱和手机立即绑定

原理上搞懂LVS的DR和NAT模式的缺陷,不看小心踩坑

标签:
PHP Python Linux

笔者最近负责公司负载均衡改造,之前公司用的一套商用的负载均衡,用时已久,其功能更新也停止了。为此,我计划采用lvs+keepalive+nginx+lua的开源架构替换掉商用的那一套。
相信一般的小公司用的最多的还是DR和NAT模式,关于DR和NAT模式的原理请看看下图,我们先从lvs的DR和NAT模式特性聊聊一些问题。
图片描述
图片描述

问题1、lvs的DR模式和NAT模式核心缺陷有哪些?
DR模式的缺陷
1:Realserver和 lvs的vip提供服务的端口必须一致。
也就是说:vip的端口对外端口为 80,但后端服务的真实端口为8080,通过lvs的DR模式是实现不了的。
2:Realserver和LVS不能在同一台机器上
3: Realserver 和LVS需要在同一个vlan或者局域网下。
NAT模式的缺陷
1:NAT模式流量的入和出都需要通过LVS服务器。
2: 效率相比DR模式,性能和效率上会差一些。

为什么呢?别着急如果你不太了解,下面来解释为什么?

问题2、为什么Realserver和 lvs,vip提供服务的端口必须一致?
原因:因为LVS的DR模式,改写的就是数据包的目的MAC地址,并不会对数据报文IP和端口地址层修改,所以就作不到端口改写了。

问题3、为什么DR模式下,Realserver和LVS不能在同一台机器上?
原因:假设lvs主服务器上的数据包发送给自己备份节点(也是realserver) eth0 接口。备lv不能正常的被监听指定端口的程序所接收,因为数据包会首先先经过 ip_vs()来接受处理了.
不仅如此,备份节点还会将50%的机率将数据包转发给lvs主,这样一直主和备一直转发,就形成死循环了。所以客户端会发现,一次正常能请求,一次会出现
超时的情况。

问题4、为什么DR模式下,Realserver 和LVS需要在同一个vlan或者局域网下?
原因:LVS的是改写mac地址的,基于mac地址的通讯方式是2层的,所以需要限制在一个vlan或者局域网下。

问题5、为什么NAT模式下,NAT模式流量的入和出都需要通过LVS服务器?
原因:NAT模式修改的目的端的IP地址,对公网的VIP,并不会下放到realserver上,所以后端的realserver的网关必须指向lvs地址。

问题6、为什么效率相比DR模式,性能和效率上会差一些?
原因:原因和NAT模式的特性一样,出入的数据包都需要通过lvs,必然导致数量大了后,成为性能瓶颈。

笔者一直在持续调研,如果你对这个方面感兴趣,欢迎关注我,我将分享更多4层、7层的负载均衡内容。

图片描述

点击查看更多内容
14人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消