一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器

时间:2024-04-03 07:27:22


LVS DR 原理

LVS-DR不同于普通的haproxy代理机制,它在网络中的作用层级更加底层。haproxy一般代理应用层的应用数据,所有的数据都会通过haproxy收发,导致了haproxy是一个性能瓶颈。而lvs-dr作用在IP和数据链路层,效率更高,并且只代理进入proxy的数据,应用的返回数据由应用服务器直接返回给client。

 


pros

cons

haproxy

可以基于端口做代理

真实server与proxy不需要在一个二层网络

单点问题

进出流量都走proxy,负载高

lvs-dr

只有request请求通过proxy,response数据直接返回给客户,性能高。

proxy和server必须在同一个二层网络

 一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器


 

整个数据包的处理流程如下:

  1. Client要访问192.168.1.2上的服务

  2. request数据经过路由到达我们的proxy,上面运行着负载均衡器,负载均衡器通过策略算法,把目标MAC改成真实的Server MAC,并发送给目标MAC(这里决定了proxy和server只能在同一个二层网络中)

  3. Server收到请求后,将响应数据直接通过路由发送给client,不再经过proxy

 

 

基于DPDKDR架构

为什么要用DPDK呢?因为lvs是基于linux内核的,而linux内核处理包的速度太慢(10G网卡34Mpps),特别是对小包的处理,导致了性能瓶颈。而利用DPDK技术可以绕过linux内核从而直接处理网络数据报,写的好的话可以达到线速(10G网卡14Mpps)。

 

这个负载均衡器主要由两部分组成,转发器(Forwarder)和健康检查器(Monitor)。

一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器

Monitor通过ping或者arp的方式检查Server的状态,如果无法连接,则将此Server设置成unreachable的状态。

Forwarder通过hash算法把同一个来源的数据报发往同一个Server,以保证连接的一致性。

 

 

技术细节的考虑

来看看现在的设计距离google的设计还差多远?

一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器

还差着一个集群这么远。。。。。。。。。

目前只有单个proxy的设计,那作为一个集群要怎么玩呢?

首先是DNS层面,根据来源返回一个就近的VIP地址(如果在多个数据中心部署了的话)

然后是Router层面,使用了ECMP,把大量的请求分发到不同的负载均衡器上。

这就带来了一个问题,如何让同一个来源的请求总是能够到达同一个Server呢?有两个方法。

  1. 通过配置ECMP,把相同来源的请求都发往相同的负载均衡器。

  2. 使用一致性hash算法,让不同的负载均衡器在处理同一个请求时都能够转发到同一台Server。

 

 现有技术

在构思这篇博文的时候还没注意到VPP刚出的LoadBalancing,之前一直想自己实现一个lb application或者基于ovs-dpdk进行修改。但是搜索了一下之后发现了VPP LoadBalancing plugin这个plugin就是仿照了Maglev进行设计和实现的。

不知道VPP是何技术的可以去google一下,这是cisco开源的sdn技术,类似于openvswitch,自称转发性能比openvswitch高不知道哪去了。VPP底层基于dpdk或者netmap的技术实现高速收发数据报。

VPP实现的LB跟上面说的有一部分不太一致,就是从proxy到server的过程,VPP是用gre tunnel技术实现的,这样就不需要server和proxy在同一个二层网络里了,相应的,tunnel技术会增加每个封包的长度,需要相应的修改MTU,启用Jumbo Frame

最后的最后,至于VPP的LB性能如何,怎么用,我现在并没有试过:P

 

 Reference

  1. http://www.infoq.com/cn/articles/Maglev-Vortex

  2. http://oilbeater.com/%E5%8D%9A%E5%AE%A2/2016/11/21/google-loadbalancert.html

  3. https://docs.fd.io/vpp/16.12/md_plugins_lb-plugin_README.html

  4. https://github.com/chrisy/vpp/tree/master/plugins/lb-plugin

  5. http://www.xinghaixu.com/archives/472

 


      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1983570,如需转载请自行联系原作者