LB

发布时间 2023-09-23 14:53:13作者: 王景迁

FULLNAT模式

客户端流量达到LB时,DNAT把数据包的目的IP改为后端服务IP,SNAT从local ip池中选择一个IP作为源IP,重新选源端口,后端服务应答时目的IP是local ip。

LVS性能问题

LVS做四层负载均衡。
中断是影响LVS性能最重要的一个因素,假如一秒处理600万个数据包,每6个数据包产生一个硬件中断,那么一秒就会产生100万个硬件中断,每一次产生硬件中断都会打断正在进行密集计算的负载均衡程序,中间产生大量的cache miss,对性能的影响很大。
LVS是基于内核netfilter开发的一个应用程序,netfilter是运行在内核协议栈的一个钩子框架。当数据包到达LVS时,经过了一段很长的协议栈处理,但是这段处理对于LVS来说不是必需的,降低了性能。

针对这两个问题,解决方法是使用轮询模式的驱动以及做kernel bypass,DPDK提供的用户态PMD驱动可以解决这两个问题。DPDK在设计时使用了大量硬件相关特性比如numa、 memory channel、 DDIO等,对性能优化非常大,同时提供了比较多网络方面的库,减小开发难度,提高开发效率。

RSS(Receive Side Scaling)通过数据包的元组信息将数据包散列到不同网卡队列,不同的CPU去对应的网卡队列读取数据进行处理,充分利用CPU。FULLNAT会将数据包的元组信息全部改变,同一个连接请求和应答方向的数据包有可能会被RSS散列到不同的网卡队列中,被不同的CPU进行处理,访问session结构时需要对它加锁保护。
解决这个问题的方法有两种,一种在做SNAT选端口时通过选择一个端口lport0让RSS(cip0, cport0, vip0, vport0) = RSS(dip0, dport0, lip0, lport0)相等;另外一种是为每个CPU分配一个local ip,SNAT时不同的CPU选择自己的local ip,应答时通过lip和CPU的映射关系把指定目的IP的数据包送到指定队列上。
网卡的flow director特性支持第2种方法,选择第2种方法去掉session结构的锁。

flow director根据策略把数据包送到指定网卡队列,在网卡中的优先级要比RSS高,初始化时为每个CPU分配一个lip,例如为cpu0分配lip0,为cpu1分配lip1,为cpu2分配lip2,为cpu3分配lip3。 当一个请求包(cip0, cport0, vip0, vport0)到达lb后,被RSS散列到了队列0上,这个包被cpu0处理。cpu0在fullnat时,选择cpu0 lip0,将数据包(lip0, lport0, dip0, dport0)发到后端服务,应答数据包(dip0, dport0, lip0, lport0)被发到了lb。在flow director下一条将目的IP为lip0的数据包送到队列0的规则,应答数据包就会被送到队列0让cpu0处理。CPU在对同一个连接两个方向的数据包进行处理的时候就是完全串行的一个操作,也就不要再对session结构进行加锁保护了。

上下文切换

分离控制平面与数据平面。把CPU分成两组,一组用作数据平面一组用做控制平面。隔离数据平面的CPU,控制平面的进程不会调度到数据平面的这组CPU上面;对数据平面的线程进行CPU绑定。其他的控制平面的程序比如Linux kernel、 SSH等都跑在控制平面的这组CPU上。

高可用

使用OSPF+ECMP的模式组成集群,通过ECMP将数据包散列到集群中各个节点上,再通过OSPF保证单台机器故障以后将这台机器的路由动态的剔除出去,这样ecmp就不会再给这台机器分发流量,也就做到了动态的failover。

传统的ecmp算法有一个很严重的问题,当集群中节点数量发生变化以后,会导致大部分流量的路径发生改变,发生改变的流量到达其他LB节点上时是找不到自己的session结构的,导致大量的连接出现异常,影响业务。集群升级时会将每个节点都进行一次下线操作,加重了这个问题的影响。
一种解决方式是使用支持一致性hash的交换机,这样在节点发生变化的时候,只有发生变化的节点上面的连接会有影响,其他连接都会保持正常,但是支持这种算法的交换机比较少,并且也没有完全实现高可用,因此需要集群间的session同步功能。

集群中每个节点都会全量的将自己的session同步出去,使集群中每个节点都维护一份全局的session表,因此无论节点变化以后流量的路径以任何形式改变,这些流量都可以找到自己的session结构,也就是说可以被正常的转发,这样就可以在集群中节点数量发生变化时保证所有连接正常。

参考资料

https://zhuanlan.zhihu.com/p/24826649