快捷搜索:

Linux服务器下多网卡负载均衡的研究

1 小序

现今险些各行各业内部都建立了自己的办事器,因为办事器的特殊职位地方,它的靠得住性、可用性及其I/O速率就显得异常的紧张,维持办事器的高可用性和安然性是企业级IT情况的紧张指标,此中最紧张的一点是办事器收集连接的高可用性,为实现这些要求,现在办事器大年夜都采纳多网卡设置设置设备摆设摆设,系统大年夜都采纳现在异常盛行的Linux作为办事器事情的情况。现在带宽已经不是办事质量前进的瓶颈了,相对的收集设备和办事器的处置惩罚能力就垂垂成为新的瓶颈。为前进办事器的收集连接的可用性和靠得住性,今朝Sun公司的Trunking技巧、3Com公司的DynamicAccess技巧、Cisco公司的Etherchannel技巧等等都在钻研将办事器的多个网卡接口绑定在一路的链路凑集技巧, 链路凑集技巧将多个链路虚拟成一个逻辑链路进而供给了一种廉价、有效的措施扩展收集设备和办事器的带宽,前进收集的机动性与可用性。

本文先容Linux下的bonding 技巧,Linux 2.4.x的内核中采纳了这种技巧,使用bonding技巧可以将多块网卡接口经由过程绑定虚拟成为一块网卡,在用户看来这个聚合起来的设备似乎是一个零丁的以太网接口设备,普通点讲便是多块网卡具有相同的IP地址而并行连接聚合成一个逻辑链路事情。现在在关于Linux bonding 技巧中,有几种算法来实现负载均衡的要求,此文针对这些算法,在此进行简单阐发与钻研,评论争论其不够,并提出别的一种在此根基上改进的一种基于传输协议的负载均衡实现措施。评论争论若何实现多个收集接口的分在均衡及其故障接收。

2 负载均衡技巧和高可用技巧钻研先容

2.1 负载均衡技巧

负载均衡技巧的主要思惟便是若何根据某种算法将收集的营业流量匀称分配到不合的办事器和收集设备上去,以减轻单台办事器和收集设备的包袱,从而前进全部系统的效率。负载均衡既可以由有负载均衡功能的硬件实现,也可以经由过程一些专用的软件来实现,负载均衡是一种策略,它能让多台办事器或多条链路合营承担一些繁重的谋略或者I/O义务,从而以较低的资源打消收集瓶颈,前进收集的机动性和靠得住性。

2.2 高可用技巧

实现负载均衡首先是基于收集的高可用性提出来的,高可用技巧是容错技巧的一个分支。实现系统的高可用性最简单的一个法子便是冗余。完备的收集负载均衡和高可用性收集技巧有两个方面构成,一是多办事器的绑定和负载均衡,二是一个办事器内部的多网卡绑定的负载均衡,这里主要评论争论一个办事器内部的多网卡绑准时的负载均衡。

3 Linux的bonding技巧中负载均衡的简单实现

3.1 Linux的bonding技巧

Linux的bonding技巧是网卡驱动法度榜样之上、数据链路层之下实现的一个虚拟层,经由过程这种技巧,办事器接在互换机上的多块网卡不仅被绑定为一个IP,MAC地址也被设定为同一个,进而构成一个虚拟的网卡,事情站向办事器哀求数据,办事器上的网卡接到哀求后,网卡根据某种算法智能抉择由谁来处置惩罚数据的传输。Bonding技巧可以前进主机的收集吞吐量和可用性。

3.2 Linux的几种发送均衡算法

今朝Linux的发送算法最主要的有三种:轮转算法(Round-Robin)、备份算法(Active-Backup)、MAC地址异或算法(MAC-XOR)。下面对今朝这三种主要算法进行简单阐发。

3.2.1 轮转算法

该算法是基于公道原则进行的,它为每个将要被发送的数据包选择发送接口,算法的主要思惟是首先第一个数据包由一个接口发送,另一个数据包则由别的一个接口发送,下面依次进行轮回选择。经由过程阐发我们可以看出这种算法对照对照简单,在发送数据方面也对照公道,能包管网卡发送数据时刻的负载均衡,资本使用率很高。然则我们知道假如一个连接或者会话的数据包从不合的接口发出的话,半途再颠末不合的链路,在客户端很有可能会呈现数据包无序到达的问题,而无序到达的数据包必要从新要求被发送,这样收集的吞吐量就会下降。

3.2.2 备份算法

该算法将多个网卡接口中的一个接口设定为活动状态,其他的接口处于备用状态。当活动接口或者活动链路呈现故障时,启动备用链路,由此可见此算法的优点是可以供给高收集连接的可用性,然则它的资本使用率较低,只有一个接口处于事情状态,在有N个收集接口的环境下,资本使用率为1/N。

[NextPage]

3.2.3 MAC地址异或算法

该算法的主要思惟是:由办事器的MAC地址和客户真个MAC地址合营抉择每个数据包的发送端口号,由源MAC地址和目的MAC地址进行异或谋略,并将异或结果对接口数求余谋略。因为发送到同一个客户真个数据流颠末同一个链路,是以数据包能够有序到达客户端。此算法在只有一个客户机造访办事器或者办事器和客户机不在同一子网的环境下,由算法思惟得知这种环境下负载不会均衡,在只有一个客户机造访办事器的时刻,资本的使用率也是1/N(N为接口数)。

平日在一个大年夜的局域网内,每每存在多个子网。 其拓扑布局如下所示:

图1 局域网拓扑图

4 基于传输协议的发送算法

上面我们对Linux中的几种实现多网卡发送负载均衡算法进行了阐发,针对这些算法的不够,这里提出别的一种发送负载均衡算法。

4.1 算法描述实现

我们知道收集传输协议有TCP和UDP两种,此中UDP是一种无连接、弗成靠的传输协议。TCP是一种供给面向连接的、靠得住的字撙节办事,譬如一个客户机和一个办事器在彼此互换数据前要建立一个连接。一个TCP连接或者一个UDP会话的布局大年夜致如下:

{source,dst,saddr,daddr}

此中source为源端口号,dst为目的端口号,saddr为源ip地址,daddr为目的ip地址。

基于传输协议的发送算法的主要思惟是: 由目的主机号、目的主机所在子网的子网号及该会话的TCP或UDP的目的端口号合营抉择某个数据包的发送接口号,此算法和MAC地址的异或算法有点类似,由于它也是一种异或谋略。

下面我们约定:

(1)host为要发送数据包的目的主机号。

(2)subnet为目的主机的子网的子网号。

(3)port 为UDP或TCP连接的目的端口号。

(4)slave_cnt为绑定的接口数。

不掉一样平常性,这里先斟酌slave_cnt为4的环境,在这种环境下由上述几个前提异或并进行求余谋略来合营确定发送的接口号,即进行下面的运算:

(host ^ subnet ^ port ) & (0x03) % slave_cnt ①式

上式可能的结果可能为0、1、2、3。即该算法这种环境下最多可以绑定4个网卡接口。

该算法最大年夜程度上将不合连接的数据包从不合的接口发送,下面分几种环境评论争论:

(1)对付同一个客户机的两个TCP连接,发送的接口号只与要连接的目的端口号有关。我们假设连接1和连接2的目的端口号分手为port1,port2,当port1(二进制)和port2(二进制)的着末两位不应时,上个算法的谋略结果不相等,两个连接的数据流从不合的接口发送出去.

(2)对付同一个子网的不合客户机的两个TCP连接来说, 上述算程序子中的subnet相同,假设连接的目的端口号port相同。然则主机号不合。设目的主机号分手为host1和host2,当host1和host2(都是用二进制表示)的着末两位不相同时,算法公式的谋略结果不相等,两个连接的数据流从不合的接口发送出去。

[NextPage]

(3)对付不合子网的两个TCP连接来说,假定主机号和连接的目的号port号都相同,子网号不合。设连接1和连接2所在的子网号分手为subnet1和subnet2, 当两者的着末两位不相同时,算法公式的谋略结果不相等,此时两个连接的数据流从不合的接口发送出去。

下面斟酌有N个网卡接口的环境,在某个光阴段内从第i个接口发送的连接数为 (i=1,2,….N),第i个接口发送的第j个连接的数据流为 ,则第i个网卡接口的负载是:

②式

当②式成马上,每个接口的负载绝对均衡,因为①式能够将连接只管即便分配到不合的接口,以是一样平常环境下 = =…… ,即每个接口的连接数相等,然则每个连接的数据流量不必然相等,也便是说②式不必然成立,根据统计道理,当客户机和办事器的连接数足够大年夜并且光阴足够永劫,②式是成立的。

从上面对基于传输协议的负载均衡算法阐发来看,该算法不仅在收集层并且传输层都实现了各个接口的负载均衡,且包管了数据有序到达客户端问题,同时资本的使用率也很高。

5 测试结果进行验证阐发

测试软件情况:RedHat9.0(内核2.4.20)

测试硬件设置设置设备摆设摆设情况:一台办事器(CPU: P IV 2.8G;内存: 512M;两块支持MII状态字寄存器的百兆网卡,每个有一个接口;一台客户机(设置设置设备摆设摆设和办事器一样);两台(一台也可)24口千兆互换机。测试软件为netpipe,使用此软件可以测试TCP 协议机能,用它依次来对轮转算法、MAC地址异或算法以及基于传输协议的发送算法的收集延时和吞吐率。这里办事器用来发送数据,客户机用来接管数据。

办事器发送方履行:

NPtcp –t –s –h 172.19.11.130 –o test.ppt –p

客户机吸收方履行:

NPtcp –r –s

测试结果(测试结果为匀称值)如表一所示。

从测试结果可以得出结论:因为轮转算法简单,谋略量小,收集延迟也相对小,而基于传输协议的发送算法谋略量相对较多,收集延时也对照大年夜。因为这里是双机对测,即只有一个客户端,一个办事器端,所有MAC地址异或算法每次谋略的结果也就独一,只有一个接口被应用,吞吐率最小。相对来说,基于传输协议的发送算法吞吐率要大年夜一些。

表一测试结果

上面测试必要阐明的是:测试中办事器仅设置设置设备摆设摆设了两块网卡,并且只有一台客户机造访办事器,当网卡接口和客户机增添时,此文先容的基于传输协议的发送算法的上风将会很显着。在一个对照大年夜的局域网中多个客户机和办事器建立连接对话时,采纳轮转算法的同一个连接的数据包颠末不合的链路传送,无序到达客户真个概率就会增添,重发的次数也增添,办事器吞吐率会低落。而基于传输协议的发送算轨则不存在这样的问题,此种环境下,办事器的吞吐率相对增添。

6 停止语

Linux的bonding技巧将多个网卡接口绑定在一路,应用多个接口发送数据,算法上实现了负载均衡和故障迁移与接收。它是一种纰谬称得负载均衡技巧,今朝只是钻研了发送算法,吸收算法还有待于进一步的钻研,今朝的链路技巧都是将网卡接口绑定在一路来前进办事器的收集机能,然则各类实现算法包括基于传输协议的发送算法并没有斟酌接口的速率,这一点有需要进一步改进。

您可能还会对下面的文章感兴趣: