笔者最近负责公司负载均衡改造,之前公司用的一套商用的负载均衡,用时已久,其功能更新也停止了。为此,我计划采用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层的负载均衡内容。
热门评论
赞 估计之后碰到华为的服务 爬坑用得到[捂脸]
深度好文,真是学习了