• 幕客老师召集小伙伴
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

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

笔者最近负责公司负载均衡改造,之前公司用的一套商用的负载均衡,用时已久,其功能更新也停止了。为此,我计划采用lvs+keepalive+nginx+lua的开源架构替换掉,

我们先从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,必然导致数量大了后,成为性能瓶颈。

 

笔者一直在持续研究,并推广优化lvs,关注我,我将分享更多4层、7层的负载均衡内容。

或者访问我的技术网站:http://www.imoocc.com(没错imooc加一个c就是了!)

 

 

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

Pingbacks已打开。

引用地址

暂无评论

发表评论