干货分享 | 高性能软负载均衡在超高带宽场景下的应用
Posted 苏研大云人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货分享 | 高性能软负载均衡在超高带宽场景下的应用相关的知识,希望对你有一定的参考价值。
+
1、背景介绍
从云计算到云原生、大数据到AI,无论架构如何演进,四层负载均衡作为网络基础设施的重要一员,始终保障着入口流量的稳定运行,随着业务规模不断扩大,带宽从原先的百G到T级演进,其中的稳定性、高性能、可拓展性显得越来越重要,硬件负载均衡成本高,纯软的性能和规模都上不去,为了满足超高带宽的需求,需要从服务器、网卡、软件、交换机、组网架构等各个层面入手,做改造优化。因此大云负载均衡团队自研了一款高性能软负载均衡(Soft Load Balancer,SLB)架构方案,支持超大带宽容量的负载。
+
2、调研论证
硬件F5
硬件负载均衡做到T级带宽需要大型框式服务器,主备模式单点故障域太大,很难实现多活的架构,而且成本在几百万左右,且维护响应不及时、无法满足定制化需求,受制于人。考虑到节约成本和灵活性,硬件F5作为了备选方案。
100G网卡
T级带宽的负载均衡,如果还采用10G网卡,需要至少上百台服务器,成本上是无法接受的。我们调研了Mellanox CX6网卡,限于200G单口需要支持PCIE 4.0,而相关配套服务器还未具备,考虑到稳定性和成熟度,最终选用了支持PCIE 3.0的CX5 100G网卡。
测试结果:DPDK testpmd压测结果显示,100G网卡能跑到大包90G+,小包60G左右。结果显示,DPDK环境下Mellanox CX5 100G网卡性能满足我们的需求。
高性能软负载均衡
采用100G网卡方案,DPDK和网卡驱动成为关键,我们基于DPVS定制开发了DPDK和高性能软负载均衡器,使用Mellanox CX5 100G网卡,DPDK的高性能负载均衡方案终于验证通过,性能在未调优的情况下就达到了1024字节大包50G+的流量,通过后期不断验证优化,性能远超预期。
+
3、整体方案
高性能软负载均衡采用DPDK+LVS加速,通过100G网卡提升带宽密度,交换机堆叠组网保证高可用。服务器通过开源Quagga软件和交换机之间建立BGP邻居,配合交换机的ECMP(Equal-Cost Multipath Routing)协议,提供超大带宽,超高并发,多活,动态扩缩容的负载均衡服务。
以4台SLB集群为例,同一集群内的SLB宣告相同的VIP,在交换机侧形成ECMP等价路由,交换机根据五元组进行分流。当一台服务器(SLB1)故障时,ECMP等价路由会减少,ECMP重新Hash,原先没有故障服务器(SLB2)上的会话也会重新调度到另外的机器上处理,会造成不必要的抖动。为了保证故障机器的流量被均分到剩余三台SLB上,正常服务器上原先的流量保持不变,需要交换机支持一致性Hash。
+
4、高性能SLB实现原理
基于社区DPVS(DPDK+LVS)开发,采用诸多的加速技术:控制面走内核协议栈,数据面走轻量级IP协议栈,配合无锁队列、轮询机制,转发效率比内核态提升5~10倍,并且支持网卡队列和CPU绑定,随着CPU核数的增加,性能线性增长。定制化开发了支持DPDK的ipvsadm和keepalived,匹配用户习惯,减少学习成本。
现网采用FullNat模式部署,外部和内部IP互相隔离,抗攻击,可以支持跨网段:
从Client来的属于本次连接的包,查Hash表,然后发给对应的RS;
FullNat模式相当于做了2次NAT,后端只能看到LB的DIP,如果后端RS服务器需要获取Client IP Port,高性能软负载均衡可以修改IP协议报文,在OPTION字段把Client IP Port放进去。不过后端为了识别这个OPTION字段,需要安装TOA/UOA等模块。
+
5、监控告警
负载均衡作为流量出入口,对网络故障是非常敏感的,而监控告警是决定能否快速定位、排除故障的决定性因素。通过调研多种平台,考虑到平台成熟度和现有套件的二次开发难度,我们最终选用了Prometheus和node_exporter方案。通过对开源node_exporter采集工具的二次开发,不仅满足了主机侧的监控需求,而且新增了DPDK用户态监控指标的获取、负载均衡相关指标的搜集、定制化Grafana仪表模板,最终形成一整套基于高性能负载均衡的可视化监控方案。
+
6、关键优化
仪表极限压测的时候,右侧出现断崖线,业务全断,说明LB已经下线。原因是网卡的队列资源和CPU资源被长时间占用,BGP通信流量因获取不到队列和CPU资源,数据包被丢弃,BGP会话断开,这是无法容忍的故障。
为了解决这个故障,我们对DPVS的报文处理框架进行了深度优化。改进点如下:
原先CPU1没有单独设置处理控制报文,通过修改RSS预留队列0和CPU1绑定,RSS上送的报文只能到队列1-队列14(对应CPU2-CPU15);
通过DPDK的RTE_FLOW技术对报文精确匹配,利用五元组精确匹配BGP报文;
由于RTE_FLOW优先RSS,BGP报文就会送到队列0(CPU1),控制报文和业务报文分离出来到单独的CPU处理,保证BGP邻居不断开。
+
7、性能测试
针对单台SLB,通过思博伦测试仪我们对SLB的转发性能进行了测试。100G网卡、1500字节大包的情景下,UDP报文基本能做到将近94Gbps转发;同时包转发率也能达到1000W PPS。
+
8、总结和展望
通过ECMP+BGP的集群化部署高性能软负载均衡已经能够承担T级网络带宽的流量负载分担,但是自动化、可运维性和隔离性还需进一步加以完善。后期为了支持云化网络架构,需要在多租户隔离、QoS限流、会话同步、运维监控周边等做更多的工作,并且在FPGA加速、P4加速等加快布局,软硬件结合大幅提高系统性能。从负载均衡入手,辐射NAT网关、GSLB负载均衡、智能DNS等做更多的尝试。
作者简介
袁昌斌
中国移动云能力中心,软件开发工程师,长期从事软负载均衡、防火墙、交换机等数通产品的开发,熟悉IDC网络架构设计。
谭跃辉
中国移动云能力中心,负载均衡领域深度开发者,负责云上负载均衡和大带宽下的负载均衡设计和建设。熟悉网络、负载均衡、数据库系统的设计原理、架构及各种应用场景。
往期精选
1、
2、
3、
以上是关于干货分享 | 高性能软负载均衡在超高带宽场景下的应用的主要内容,如果未能解决你的问题,请参考以下文章
简单聊聊 Maglev ,来自 Google 的软负载均衡实践