lvs-fullnat模式的优势
FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。
无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
这引发的两个问题是:
1、同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入。
2、LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。
Full-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。
lvs中nat和fullnat的转发示意图
lvs负载均衡fullnat 模式clientip 怎样传递给 realserver
淘宝通过叫TOA的方式解决的。
主要原理是:将client address放到了TCP Option里面带给后端RealServer,RealServer收到后保存在socket
的结构体里并通过toa内核模块hook了getname函数,这样当用户调用getname获取远端地址时,返回的是保
存在socket的TCPOption的IP. 百度的BVS是通过叫ttm模块实现的,其实现方式跟toa基本一样,只是没有开源.
传统lvs三种工作模式简介
DR(Direct Routing)模式:负载均衡器和RS都使用同一个IP对外服务,但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默,也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS,这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
LVS NAT 模式:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为客户端IP地址即可,期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
LVS TUNNEL模式:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大。那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器,注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。
ECMP
等价路由Equal-CostMultipathRouting
ECMP存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。
ECMP最大的特点是实现了等值情况下,多路径负载均衡和链路备份的目的,在静态路由和OSPF中基本上都支持ECMP功能。
如果想了解更深,可以参考ospf原理或者找懂网络的人问问。
参考
LVS 工作模式以及工作原理:https://blog.csdn.net/caoshuming_500/article/details/8291940
lvs 负载均衡fullnat 模式clientip 怎样传递给 realserver:https://blog.csdn.net/mumumuwudi/article/details/47064281
LVS的nat模式和fullnat模式的区别:https://blog.csdn.net/dingding_02/article/details/79007301
lvs中nat和fullnat的区别与图示:https://blog.csdn.net/legend_host/article/details/79006825
吴佳明(普空):LVS在大规模网络环境中的应用:http://blog.sina.com.cn/s/blog_620c47630102v2iz.html
ECMP:https://baike.baidu.com/item/ecmp/9091327