Linux服务器下多网口负载均衡算法的研究

2013-07-20 02:34幸福杨峰燕霄翔王文志
计算机工程与应用 2013年24期
关键词:网卡内核复杂度

幸福,杨峰,燕霄翔,王文志

中国矿业大学(北京)机电与信息工程学院计算机科学与技术系,北京 100083

Linux服务器下多网口负载均衡算法的研究

幸福,杨峰,燕霄翔,王文志

中国矿业大学(北京)机电与信息工程学院计算机科学与技术系,北京 100083

1 引言

近年来,随着web2.0高速普及和web3.0兴起,带来了大量的数据信息和文件资料的产生,从而导致网络业务数据量的急剧提高和多客户端的访问量快速增长。在这样的背景下,网络存储架构需要有一个可靠稳定的后端存储服务来支撑,因此如何保持网络存储服务器的高可用性至关重要。由于单网口网络吞吐力有限,成为制约整个系统性能的瓶颈。如果单靠对网卡硬件升级来增加网络带宽,其性价比不高。为实现这些要求,现在Linux服务器大多是采用多网卡配置。利用链路聚合技术[1],将服务器的多个网口绑定成一个虚拟网卡能有效提高服务器的网络吞吐率及高可靠性。

由于客户端对服务器存取数据的需求逐渐增大,网口负载常常超过它的最大处理能力,网络发生拥塞的可能性越来越大,造成数据传输速度下降,读写性能衰减。如果不对绑定的多网口负载进行有效的控制和在网卡负载过重时使网口能及时恢复到正常的状态,就会造成严重的网络拥塞,甚至导致网络崩溃。因此,多网口负载均衡的研究与实现越来越重要[2]。

Linux的2.4.x以上内核Bonding模块实现了一个聚合的方法,它将多个物理网口聚合为一个单一虚拟网口,同时通过六种算法模式来提供负载均衡和网络冗余服务。由于Linux Bonding技术的不对称性[3],对于接收数据的负载均衡只是利用ARP协商机制实现,本文针对此算法的研究分析,指出其实际存在的缺陷不足,提出另外一种在此基础上改进的算法,即基于适应性负载均衡的动态接收算法的实现方法。并进行了实际测试验证。

表1 Netfilter相关参数说明

2 相关研究工作

2.1 负载均衡技术

负载均衡[4]主要思想就是如何根据某种算法将网络的业务流量平均分配到不同的服务器和网络设备上去,以减轻单台服务器和网络设备的负担,从而提高整个系统的效率。

负载均衡分为静态均衡和动态均衡[5]。静态均衡通过平均分配任务给计算设备节点,虽然能获得最优负载均衡结果。但这种方法要求任务量必须是确定的值,在现实网路中任务量是随时间的变化而变化的,很难做到任务量确定。动态均衡方法通过实时分析计算设备节点的负载状况和任务量,选取负载最轻的节点提供服务。

2.2 Linux内核Bonding技术的实现

Linux的Bonding技术通过在数据链路层与网卡驱动层之间实现一个虚拟层[6],服务器接在交换机上的多个网口被绑定为一个虚拟网口,进而构成一个虚拟的网卡。服务器在收发数据时,服务器上的虚拟网卡接到请求后,根据某种算法来决定由谁处理数据的传输。

目前Bonding模块中已经实现了六种算法[7],即轮转算法(balance-rr)、主备份算法(active-backup)、异或算法(balance-xor)、广播算法(broadcast)、传输负载均衡算法(balance-tlb)和适应性负载均衡算法(balance-alb),其中前五种算法只能处理发送数据的负载均衡,最后一种算法能够处理发送和接收数据的负载均衡。

2.3 Linux内核Netfilter架构

Netfilter[8]是Linux内核的一个子系统,它的架构就是在整个网络流程放置了5个hook检测点,而在每个检测点上登记了一些处理函数进行处理,如数据包过滤、数据包处理、和基于状态的过滤等。Netfilter的关键参数见表1。

3 适应性负载均衡算法的研究

3.1 算法原理的研究

适应性负载均衡算法的原理采用轮换分配Bonding设备中多个网口的MAC地址。当双方建立通信时,服务器端通过发送ARP广播报文通知对端,当ARP应答从对端到达时,Bonding驱动把对端的信息从ARP包中复制并保存下来,并发起一个ARP应答让对端的ARP缓存记录服务器端本次分配出的网口MAC地址。同时通过给所有的对端发送更新(ARP应答包)来解决ARP广播请求带来的物理网段中的对端ARP缓存记录覆盖的问题。ARP应答包中包含了服务器端Bonding设备分配给所有对端的唯一MAC地址。

3.2 算法性能缺陷的研究

此算法的设计只是一种通过预先静态分配网口来实现接收流量的负载均衡的算法,但是在实际的复杂网络环境下,客户端机往往数量很多。在实际测试中发现,当出现分配到同一MAC地址的客户端同时向服务器写数据时,他们只会根据自己本地ARP缓存记录的服务器网口MAC地址发送数据,而不管此网口负载情况,这样就会造成服务器Bonding设备的网口中出现“一忙多闲”的现象。同时如果对同一网口传输的客户端不断增加或者传输数据速度升高,导致此网口负载加重,超过网口最大传输速度,网口内的每个客户端IP流量的传输速度就会急剧下降,这样造成网络I/O性能的降低,影响服务器写性能。

4 基于适应性负载均衡的动态接收算法

4.1 算法描述实现

基于适应性负载均衡的动态接收算法的核心原理是:通过Bonding模块里的链路监控函数周期性地监控Bonding中的每个slave网口流量总和,监控采用循环Bonding中的所有网口,通过3 s采样,即3 s内每一秒计算一次每个网口流量情况,当发现有某个网口流量和在3 s内有2次超过网口工作最大阙值,就判定此网口高负载,触发调用调整策略。调整策略会将此网口内的所有IP流量分摊到剩余Bonding中的其他空闲网口中,使整个Bonding设备内的多网口实现接收数据负载均衡。算法主要流程图如图1所示。

图1 适应性负载均衡动态接收算法操作流程

客户端的信息保存在一个以IP为哈希键的结构体数组中,将前一秒此客户端接收到的数据长度总和rx_history记录下来,同时在链路监控函数中每秒获取一次当前客户端接收到的数据长度总和rx_bytes,将两者相减得到客户端当前时刻的传输速度rx_second。

本算法中的关键参数说明:

(1)网口阙值。考虑到网卡实际带宽的处理能力,设定网口最大工作能力为理论最大传输速度的80%。

(2)3 s采样。在网络流量很大的情况下经常会由于cpu调度中断导致当前时刻从网卡驱动到的数据为零,因此采用3 s采样的方法来避免数据错误导致的监控失效。

4.2 客户端IP流量的统计

客户端向服务器传输数据是基于IP流传输,单个网口高负载正是由于此网口接收到的IP流增多,传输流量总和超过其最大处理能力,导致每个IP流传输速度下降。因此,为了能动态地对负载网口内的所有基于客户端IP流调整,需要实时获取每个客户端IP流速率,这样才能实现动态地将当前负载网口中的IP流量调整到空闲或者负载低的其他剩余网口中。为此,在Bonding模块中加入Netfilter技术。当加载Bonding模块的算法时,算法初始化函数在NF_IP_LOCAL_IN点会注册一个钩子函数,当经路由查找后送往本机的数据包经过此处时触发钩子函数。

此钩子函数主要功能是:对确定接收为本机的数据包每当经过此注册点时,就通过NF_HOOK回调函数进入此自定义函数,然后将此数据包IP头取出,以源IP地址为哈希key值在客户端结构体链表中查找出Bonding中登记的客户端信息,当查找成功后再通过累加的方式统计此客户端接收数据包流量总值rx_bytes。函数返回NF_ACCEPT完成数据包的统计工作。

由于内核处理速度很快,此数据统计过程额外的开销可以忽略不计,不会对网络数据传输造成影响。

4.3 调整策略

调整策略的主要思路是:首先会从客户端接收哈希链表中查找出此负载网口中当前正在传输的N个客户端,由于同一网段网口之间总是会有流量很小的测试报文在接收,对网口传输性能无影响,基于实际考虑,定义客户端数据传输的最小速率为5 KB/s,低于此值的客户端IP流量全部忽略,不作为调整的N个客户端之内。

当N为1时,表示此网口中只有一个客户端在传输数据,定义这样的客户端IP流为单个大流量,这是不需要调整出去的;否则将N个客户端IP流按当前传输速度从大到小的顺序排序,再循环这些客户端IP流,按照选择最优网口原则最大程度地将每个IP流分配到Bonding中的其他网口上去,分配调整的方法是通过本机发送ARP学习更新包,让客户端更新自己的ARP缓存表信息。

选择最优网口原则如下:

(1)当客户端中无单个最大流量时只循环N-1次,否则就循环N次。

(2)当客户端是单个最大流量时跳过此客户端循环下一个。

(3)当选择最优网口时不满足以下3点,跳过此客户端循环下一个:

①最优网口为当前负载最轻的网口;

②客户端IP流分配到新的网口后不会造成最优网口超过负载阀值;

③客户端IP流的速度小于高负载的网口与最优网口流量总和差值;

(4)当选择的最优网口等于高负载的网口时,立即终止循环。

4.4 算法复杂度分析

新算法主要增加了周期性监控所有Bonding网口,客户端IP流量统计和动态调整负载网口3个模块。

周期性监控模块中每秒更新所有客户端的流量信息,查找客户端时间复杂度为O(n)。

客户端IP流量统计只是对单一数据包处理,其时间复杂度为O(1)。

检查所有网口的时间复杂度为O(n)。当触发调整函数后,筛选出需要调整的客户端,时间复杂度为O(n),然后会对需要调整的客户端根据IP流速率大小排序,排序算法采用快速排序,时间复杂度为O(nlbn),最后将排好序的IP流迁移到最优网口,时间复杂度为O(n)。新算法时间复杂度为Ο(n+1+n(n+nlbn+n))=Ο(n2(2+lbn)+n+1)=Ο(n2lbn)。

受硬件的制约,单台服务器能够支持的网卡数量有限,目前市场上的高性能存储服务器最多也只能支持20个网口,而内核Bonding模块最大支持客户端数为256。按照上面的时间复杂度公式,该算法在每次监控网口时最多执行次数为20+1+20×(256+256×lb256+256)=51 221次。在面对网路数据传输高负荷的情况下,该算法执行效率很高。

5 测试验证

为了验证算法性能,在此给出在Bonding模块实现阶段对改进算法的测试实验结果,通过搭建的模拟复杂环境对改进前后的算法进行流量测试。需要先将修改的Bonding模块内核编译,执行加载命令:modprobe bonding mode= 6 miimon=100,加载修改后的bonding模块,调度算法为适应性动态接收算法。

测试软件环境:SUSE Linux11(内核2.6.27.19)。

测试硬件环境:一台服务器S(2块支持MII状态字寄存器的千兆网卡,每个网卡上有一个网口,即eth0和eth1);一台千兆交换机;4台客户机(千兆网卡)C1,C2,C3,C4;服务器和客户机与交换机相连。

测试软件:Netperf。Netperf是一种网络性能的测量工具,可以模拟出需要的传输速度来进行实验。

测试步骤:首先服务器S按上面的命令加载Bonding模块,接着通过修改服务器/ete/sysconfig/network-script下的网口配置文件将2个网口绑定成一个虚拟网口Bond1,然后让C1~C4客户机与服务器通信,查看客户机ARP缓存表信息可知,C1和C3记录S网口0的MAC地址,C2和C4记录S网口1的MAC地址。接着进行3次模拟测试,第一次C1向服务器发送文件,第二次C3向服务器发送文件,第三次C1和C3同时向服务器发送文件。测试结果见表2。

表2 测试结果

根据以上实验结果得知:当同时有多个客户机向服务器发送数据时,适应性负载均衡算法不会根据网口负载情况作出相应调整,导致网口eth0满负荷工作,而网口eth1却空闲没得到利用,实际吞吐率仅为112.7 Mb/s,负载均衡失效。而改进的适应性动态接收算法会根据网口实际负载情况,当发现网口高负荷后,实时动态地调整客户端的传输通道,吞吐率达到161.6 Mb/s,新算法比原算法吞吐率提高43%。新算法大大提高了服务器网络吞吐量和网口利用率,实现多网口动态负载均衡。

6 结束语

本文针对Linux Bonding模式6下会出现写性能下降的问题,通过对该算法进行研究介绍,分析其存在的缺陷不足,并详细描述了基于适应性负载均衡的动态接收算法的实现流程和关键技术,最后通过实际测试对新算法性能进行验证。该算法能高效处理复杂网络环境下多网口服务器接收数据负载均衡的问题。然而目前Bonding技术只能通过ARP协商机制来实现接收负载均衡,这要求客户端必须在同一物理网段,因此有必要进一步研究和改进。

[1]胡修林,王运鹏,郭辉.多网卡链路绑定策略的研究与实现[J].小型微型计算机系统,2005(2).

[2]Zhang Wensong,Jin Shiyao,Wu Quanyuan.Linux director:a connection router for scalable internet services[J].Journal of Computer Science&Technology,2000,15(6):560-571.

[3]石磊.多网卡bonding技术的研究与实现[D].长沙:国防科技大学,2005.

[4]路明怀,龚正虎.Linux服务器下多网卡负载均衡的研究与实现[J].计算机与信息技术,2006(6).

[5]罗拥军,李晓乐,孙如祥.负载均衡算法综述[J].科技情报开发与经济,2008(18).

[6]毛德操,胡希明.LINUX内核源代码情景分析[M].杭州:浙江大学出版社,2006.

[7]Davis T.Linux Ethernet bonding driver HOWTO[EB/OL]. [2011-12-10].http://www.kernel.org/doc/Documentation/networking/bonding.txt.

[8]刘建峰,潘军,李祥和.Linux防火墙内核中Netfilter和Iptables的分析[J].微计算机信息,2006,22(3):7-8.

XING Fu,YANG Feng,YAN Xiaoxiang,WANG Wenzhi

Department of Computer Science and Technology,School of Mechanical Electronic&Information Engineering,China University of Mining and Technology(Beijing),Beijing 100083,China

Network storage architecture requires a high reliability and high availability back-end storage server to provide network storage services,but the single Ethernet port configuration restricts the server data transfer performance.Linux kernel bonding technology has realized multiple physical network ports aggregate to a single virtual network port.But when receiving data,this technology just through the ARP consultation mechanism realizes statically distributing multiple network port,therefore performance defects exist in the practical.In view of this,after researching related technology and algorithm,this paper puts forward another improved algorithm,which is based on adaptive load balance dynamic receiving algorithm,and realizes this algorithm by netfilter technology and so on.The actual test verification is done.The new algorithm can significantly improve the multiple network port server transfer throughput rate while receiving data.

Linux bonding;load balancing;Address Resolution Protocol(ARP);netfilter

网络存储架构需要一个高可靠性和高可用性的后端存储服务器来提供网络存储服务,而单网口配置制约了服务器数据传输性能。目前Linux内核bonding技术已经实现了将多个物理网口聚合为一个单一虚拟网口的方法。但这种不对称的技术在实现接收数据负载均衡时,只是通过ARP协商机制实现静态分配多网口,因此在实际应用中存在性能上的缺陷。鉴于此,在对现有的相关技术和算法进行研究后,提出了另外一种在此基础上改进的算法,即基于适应性负载均衡的动态接收算法,利用netfilter等技术对此算法进行了实现,进行了实际测试验证。新算法能显著提高多网口服务器接收数据时网络传输吞吐率。

Linux bonding;负载均衡;地址解析协议;netfilter

A

TP316.81

10.3778/j.issn.1002-8331.1202-0265

XING Fu,YANG Feng,YAN Xiaoxiang,et al.Research of Linux server multiple Ethernet ports load balancing algorithm. Computer Engineering and Applications,2013,49(24):93-96.

国家自然基金仪器专项(No.50927805);十二五国家科技支撑计划(No.2011BAK06B01,No.2011BAD04B05)。

幸福(1986—),男,硕士研究生,研究领域为计算机信息处理和计算机网络;杨峰,男,教授;燕霄翔,男,硕士研究生;王文志,男,硕士研究生。E-mail:xingfudage1986@126.com

2012-02-15

2012-04-23

1002-8331(2013)24-0093-04

CNKI出版日期:2012-06-15http://www.cnki.net/kcms/detail/11.2127.TP.20120615.1726.033.html

猜你喜欢
网卡内核复杂度
强化『高新』内核 打造农业『硅谷』
一种低复杂度的惯性/GNSS矢量深组合方法
Server 2016网卡组合模式
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
求图上广探树的时间复杂度
微生物内核 生态型农资
某雷达导51 头中心控制软件圈复杂度分析与改进
挑战Killer网卡Realtek网游专用Dragon网卡
出口技术复杂度研究回顾与评述