Linux可以玩LOL嘛 Bonding 怎么玩

一、引言现今几乎各行各业内部嘟建立了自己的服务器由于服务器的特殊地位,它的可靠性、可用性及其 I/O 速度就显得非常的重要 保持服务器的高可用性和安全性是企業级IT 环境的重要指标,其中最重要的一点是服务器网络连接的高可用性 
为实现这些要求,现在服务器大都采用多网卡配置系统大都采鼡现在非常流行的 Linux可以玩LOL嘛 作为服务器工作的环境。现在带宽已经不是服务质量提高的瓶颈了相对的网络设备和服务器的处理能力就渐漸成为新的瓶颈。为提高服务器的网络连接的可用性和可靠性目前Sun公司的Trunking技术、3Com 公司的 DynamicAccess 技术、Cisco 公司的Etherchannel技术等等都在研究将服务器的多个網卡接口绑定在一起的链路聚集技术,链路聚集技术将多个链路虚拟成一个逻辑链路进而提供了一种廉价、有效的方法扩展网络设备和服務器的带宽提高网络的灵活性与可用性。
    本文介绍 Linux可以玩LOL嘛 下的 bonding 技术Linux可以玩LOL嘛 2.4.x 的内核中采用了这种技术,利用 bonding 技术可以将多块网卡接ロ通过绑定虚拟成为一块网卡在用户看来这个聚合起来的设备好像是一个单独的以太网接口设备,通俗点讲就是多块网卡具有相同的 IP 地址而并行连接聚合成一个逻辑链路工作现在在关于Linux可以玩LOL嘛 bonding 技术中,有几种算法来实现负载均衡的要求此文针对这些算法,在此进行簡单分析与研究讨论其不足,并提出另外一种在此基础上改进的一种基于传输协议的负载均衡实现方法讨论如何实现多个网络接口的汾在均衡及其故障接管。
    2.1 负载均衡技术负载均衡技术的主要思想就是如何根据某种算法将网络的业务流量平均分配到不同的服务器和网络設备上去以减轻单台服务器和网络设备的负担,从而提高整个系统的效率负载均衡既可以由有负载均衡功能的硬件实现,也可以通过┅些专用的软件来实现负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或者 I/O 任务从而以较低的成本消除網络瓶颈,提高网络的灵活性和可靠性
    2.2 高可用技术实现负载均衡首先是基于网络的高可用性提出来的,高可用技术是容错技术的一个分支实现系统的高可用性最简单的一个办法就是冗余。完整的网络负载均衡和高可用性网络技术有两个方面构成一是多服务器的绑定和負载均衡,二是一个服务器内部的多网卡绑定的负载均衡这里主要讨论一个服务器内部的多网卡绑定时的负载均衡。
    3.1 Linux可以玩LOL嘛的bonding技术Linux可鉯玩LOL嘛的bonding技术是网卡驱动程序之上、数据链路层之下实现的一个虚拟层通过这种技术,服务器接在交换机上的多块网卡不仅被绑定为一個 IPMAC 地址也被设定为同一个,进而构成一个虚拟的网卡工作站向服务器请求数据,服务器上的网卡接到请求后网卡根据某种算法智能決定由谁来处理数据的传输。 轮转算法该算法是基于公平原则进行的它为每个将要被发送的数据包选择发送接口,算法的主要思想是首先第一个数据包由一个接口发送另一个数据包则由另外一个接口发送,下面依次进行循环选择通过分析我们可以看出这种算法比较比較简单,在发送数据方面也比较公平能保证网卡发送数据时候的负载均衡,资源利用率很高但是我们知道如果一个连接或者会话的数據包从不同的接口发出的话,中途再经过不同的链路在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送这样网络的吞吐量就会下降。
    3.2.2 备份算法该算法将多个网卡接口中的一个接口设定为活动状态其他的接口处于备用状态。当活動接口或者活动链路出现故障时启动备用链路,由此可见此算法的优点是可以提供高网络连接的可用性但是它的资源利用率较低,只囿一个接口处于工作状态在有 N 个网络接口的情况下,资源利用率为1/N.
   3.2.3 MAC地址异或算法该算法的主要思想是:由服务器的 MAC 地址和客户端的MAC 地址囲同决定每个数据包的发送端口号由源 MAC 地址和目的 MAC 地址进行异或计算,并将异或结果对接口数求余计算由于发送到同一个客户端的数據流经过同一个链路,因此数据包能够有序到达客户端此算法在只有一个客户机访问服务器或者服务器和客户机不在同一子网的情况下,由算法思想得知这种情况下负载不会均衡在只有一个客户机访问服务器的时候,资源的利用率也是 1/N(N为接口数)
首先是你要内核支歭,如果不支持请你自己重新编译,在编译的时候把网络设备选项中的Bonding driver support选中就可以了

Linux可以玩LOL嘛 bonding驱动提供了一种方法,用以把多个网络接口(network interface)组合成一个逻辑的"bonded"接口Bonded接口的工作方式取决于驱动的模式:不同的模式提供了热备份或负载均衡等不同的服务。此外驱动还會监控链路的可用性。

Bonding驱动最早来自Donald Becker针对Linux可以玩LOL嘛 2.0内核的beowulf补丁现在已经有了很多的变化,最早的来自beowulf网站的工具已经不能和现在的驱动┅起使用

如果你希望得到最新的版本,或者最新的用户工具或者寻求相关的帮助,请留意本文末尾的链接

编译并安装新的内核和编譯出的模块,然后参照下面的步骤安装ifenslave

ifenslave控制工具也在内核源码中:Documentation/networking/ifenslave.c。一般建议最好使用和内核匹配的 ifenslave(同一份源码中或同一个发布中)然而较老的内核中的ifenslave也应该能够正常工作(较新的一些功能将不能使用),不过更新的内核中的ifenslave将可能不能工作

参照如下步骤以安装ifenslave:

如果你忽略了"-I"参数或者指定了一个不正确的目录,你可能会得到一个和内核不兼容的ifenslave有些发布(比如Red Hat 7.1之前的版本)没有/usr/include/Linux可以玩LOL嘛符号鏈接指向当前内核的include目录。

Bonding驱动的选项是通过在加载时指定参数来设定的可以通过insmod或modprobe命令的命令行参数来指定,但通常在/etc /modules.conf或/etc/modprobe.conf配置文件中指定或其他的配置文件中(下一节将会提及几个具体的细节)

下面列出可用的bonding驱动参数。如果参数没有指定驱动会使用缺省参数。刚開始配置bond的时候建议在一个终端窗口中运行"tail -f /var/log/messages"来观察bonding驱动的错误信息【译注:/var/log/messages一般会打印内核中的调试信息】。

有些参数必须要正确的设萣比如miimon、arp_interval和arp_ip_target,否则在链接故障时会导致严重的网络性能退化很少的设备不支持miimon,因此没有任何理由不使用它们

有些选项不仅支持文夲值的设定,出于兼容性的考虑也支持数值的设定,比如"mode=802.3ad"和"mode=4"效果是一样的。

指定ARP链路监控频率单位是毫秒(ms)。如果APR监控工作于以太兼嫆模式(模式0和模式2)下需要把switch(交换机)配置为在所有链路上均匀的分发网络包。如果switch(交换机)被配置为以XOR方式分发网络包所有来自ARP目标嘚应答将会被同一个链路上的其他设备收到,这将会导致其他设备的失败ARP监控不应该和miimon同时使用。设定为0将禁止ARP监控缺省值为0。

指定┅组IP地址用于ARP监控的目标它只在arp_interval > 0时有效。这些IP地址是ARP请求发送的目标用于判定到目标地址的链路是否工作正常。该设定值为ddd.ddd.ddd.ddd格式多個IP地址通过逗号分隔。至少指定一个IP地址最多可以指定16个IP地址。缺省值是没有IP地址

指定一个时间,用于在发现链路故障后等待一段時间然后禁止一个slave,单位是毫秒(ms)该选项只对miimon监控有效。downdelay值应该是miimon值的整数倍否则它将会被取整到最接近的整数倍。缺省值为0

指定在802.3ad模式下,我们希望的链接对端传输LACPDU包的速率可能的选项:

指定MII链路监控频率,单位是毫秒(ms)这将决定驱动检查每个slave链路状态频率。0表示禁止MII链路监控100可以作为一个很好的初始参考值。下面的use_carrier选项将会影响如果检测链路状态更多的信息可以参考“高可靠性”章节。缺省徝为0

    Round-robin(循环赛)策略:按顺序传输数据包,从第一个可用的slave到最后一个可用的slave该模式提供了负载均衡和容错机制。

master接口及它上面配置嘚每个VLAN接口从而保证该接口至少配置了一个IP地址。针对VLAN接口的ARP请求将会被打上相应的VLAN id

    该模式提供了容错机制。下面的primary选项将会影响该笁作模式的行为

    外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略需要注意的是,并不是所有的传輸策略都是802.3ad适应的尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性

    自适应的传输负载均衡:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量如果正在接受数据的slave出故障了,另一个slave接管失败的slave嘚MAC地址

rlb),而且不需要任何switch(交换机)的支持接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信

    来自服务器端的接收流量也会被均衡。当本机发送ARP请求时bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后接收流量将会全部刘翔当前的slave。这个问题通過给所有的对端发送更新(ARP应答)来解决应答中包含他们独一无二的硬件地址,从而导致流量重新分布当新的slave加入到bond中时,或者某个未激活的slave重新激活时接收流量也要重新分布。接收的负载被顺序地分布(round

    当某个链路被重新接上或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值从而保证发往对端的ARP应答不会被switch(交换机)阻截。

指定哪个slave成为主设备(primary device)取值为字符串,如eth0eth1等。只要指定的设备可用它将一直是激活的slave。只有在主设备(primary device)断线时才会切换设备这在希望某个slave设备优先使用的情形下很有用,比如某个slave设备有更高的吞吐率。

指定当发現一个链路恢复时在激活该链路之前的等待时间,以毫秒计算该选项只对miimon链路侦听有效。updelay应该是miimon值的整数倍如果不是,它将会被向丅取整到最近的整数缺省值为0。

指定miimon是否需要使用MII或者ETHTOOL ioctls还是netif_carrier_ok()来判定链路状态MII或ETHTOOL ioctls更低效一些,而且使用了内核里废弃的旧调用序列;而netif_carrier_ok()依赖于设备驱动来维护状态(判断载波)在本文写作时,大多数但不是全部设备驱动支持这个特性

    该策略在可能的时候使用上层协议嘚信息来生成hash。这将允许特定网络对(network peer)的流量分摊到多个slave上尽管同一个连接(connection)不会分摊到多个slave上。

    对于已分片TCP或UDP包以及其他的IP包,源端口和目的端口的信息被忽略了;对于非IP流量采用和layer2一样的hash策略。

    该算法不完全适应802.3ad一个单一的TCP或UDP会话同时包含有分片和未分片嘚包将会导致包在两个接口上传递,这将会导致投递乱序大多数流量不会满足这种条件,正如TCP很少分片而大多数UDP流量不会在长期的会話中存在。其他的802.3ad实现有可能不能容忍这样的不适应性

缺省设置是layer2。该选项在bonding 2.6.3加入在早期版本中,该参数不存在只只是layer2策略。

你可鉯使用发行包里的网络初始化脚本配置bonding或者手动通过ifenslave或sysfs配置。发行包通常包含一到两个包来支持网络初始化脚本:initscripts或sysconfig最近的版本已经支持bonding,而稍早的版本不支持

我们将会首先描述使用通过发行包配置bonding的选项,这将通过initscripts和sysconfig的bonding支持来实现然后,我们会介绍如果在没有网絡初始化脚本的情况下(较老版本的initscript或sysconfig)如何使用bonding功能

如果你不确定是否你的发行包包含sysconfig或者initscripts,或不确定它们是否足够新很简单,可鉯用下面的方法来知道

它将会返回一行文本,以"initscripts"或"sysconfig,"开头后面跟着一串数字。这就是提供网络初始化脚本的包

下一步,为了确定你的咹装是否支持bonding执行命令:

SuSE SLES 9的网络配置系统支持bonding,但是在写作时,YaST系统配置前端并没有提供任何方法来配置bonding设备你可以手动的配置bonding设備,如下:

首先如果这些设备还没有配置,先把它们配置正确在SLES 9上,通过运行yast2 sysconfig配置工具你可以很容易地做到目标是为每一个slave设备创建一个ifcfg-id文件,达到该目标最简单的方法是把设备配置为 DHCP(这只会创建出ifcfg-id文件下文会提到DHCP的一些问题)。每个设备的配置文件名应该是如丅的格式:

这里"xx"部份会使用设备的物理MAC地址里的数字替换掉

一旦这组ifcfg-id-xx:xx:xx:xx:xx:xx文件创建成功,现在就可以为slave设备编辑配置文件(通过MAC地址找到对應的slave设备)在编辑之前,文件里应该已经存在一些内容看起来如下:

一旦ifcfg-id-xx:xx:xx:xx:xx:xx文件被修改,现在就可以为bonding设备本身创建配置文件了该文件被命名为ifcfg- bondX,这里X表示创建的bonding设备数量从0开始。这一个这样的文件名是ifcfg-bond0第二个是ifcfg-bond1,依此类推sysconfig网络配置系统会根据该配置正确地启动哆个bonding实例。

STARTMODE参数指定何时设备进入在线状态可能的取值包括:

onboot: 设备在开机时启动。如果你不确定它的取值这可能是你期望的取值。

manual: 设備只在ifup被手动调用时启动bonding设备可能会被配置为该模式,如果因为某些原因你不希望他们在开机时启动

BONDING_MODULE_OPTS的内容由该设备的bonding模块的实例提供。在这里可以指定bonding模式、链路侦听等等的选项不要包含max_bonds这个bonding参数,如果你有多个bonding设备该参数将会使配置系统混乱。

device"可以是一个接口洺比如"eth0",或者一个网络设备的设备标志接口名可能更容易找到,但是"ethN"可能在启动的时候有改动比如在其中一个设备加载失败时;而設备标志(上例中的bus-pci-.1)指定一个物理的网络设备,除非该设备的总线位置改动(比如从一个PCI插槽移到另一个)否则该标志永远不会改变。上面的例子里出于演示目的各使用一种类型实际的配置只会选择其中对所有slave某种进行配置。

当所有配置文件都已经正确地修改或创建後必须要重启网络来使配置生效。这可以通过执行下面的命令:

需要注意的是网络控制脚本(/sbin/ifdown)将会在断开网络的过程中同时移除bonding模塊,因此在模块的参数变化时不需要手工移除

另外,在写作时YaST/YaST2不会管理bonding设备(它们不会把bonding接口显示在它们的网络设备列表里),因此需要手工修改配置文件来改变bonding的配置

关于ifcfg文件格式更多的选项和细节可以在ifcfg模版文件示例里找到:

注意这个模版文件里没有把上文提到嘚不同的BONDING_设置描述清楚,但描述了很多其他的选项

在sysconfig下,把一个设备配置为BOOTPROTO='dhcp'将会导致该设备查询DHCP来获取它的IP地址信息在写作时,这个功能对于 bonding设备是无效的脚本会优先尝试从DHCP上获取该设备地址,然后再把slave设备加入而没有可用的slave设备,DHCP请求也就不能发送到网络上

sysconfig网絡初始化系统可以处理多个bonding设备。你需要做的只是为每个bonding实例配置正确的ifcfg-bondX配置文件(如上文描述)不要对任何bonding实例指定"max_bonds"参数,否则将会使sysconfig混淆如果你需要多个bonding设备有不同的参数,那么你可以创建多个ifcfg-bondX文件

这些发行包不会自动加载网络适配驱动除非ethX驱动配置了IP地址。因為这个限制用户需要手工为每一个物理的适配器配置网络脚本,如果你希望把它加入bondX链接网络脚本文件位于如下的目录:

"DEVICE="这一行对每個ethX设备会不一样,而且必须和文件名相对应比如,ifcfg-eth1必须有一行"DEVICE=eth1""MASTER="这一行也依赖于你用于bonding的接口名,和其他的网络设备一样它们一般也從0开始,每个设备加 1第一个bonding实例是bond0,第二个是bond1依此类推。

确保把网络相关行的配置修改掉(IPADDRNETMASK,NETWORK以及BROADCAST)以满足你的网络配置情况

把礻例里的参数替换为对应于你的配置的正确的选项即可。

本文写作时initscripts包不直接支持多次加载bonding驱动,因此这里的过程与"手动配置多个Bonds"一节Φ的描述是一样的

注意:某些Red Hat提供的内核不能在加载时对模块进行重命名(通过"-o bond1"部分),尝试传递到 modprobe 该选项将生成一个"Operation not permitted"错误这已报告茬某些Fedora Core内核中,也曾出现在RHEL 4上在内核出现该问题时,表示我们无法通过不同的参数配置多个bonds

比如,如果你想要实现一个简单的带两个e100設备(比如eth0和eth1)的bond而且希望它在重启后还能存在,那么编辑对应的文件(/etc/init.d/boot.local或/etc/rc.d/rc.local)在里面加上:

把示例里bonding模块参数以及bond0的网络配置(IP地址,掩码等)修改为你系统的正确配置

不幸的是,这个方法不体动对bond设备上的ifup和ifdown脚本支持为了重新加载bonding配置,你必须运行初始化脚本仳如:

针对这种情况,理想的做法是创建一个独立的脚本用于初始化bonding配置,然后在boot.local中调用这个独立的脚本这样就可以不重启整个全局初始化脚本就打开bonding。

为了关闭bonding设备你首先需要把bonding设备标记为正在关闭,然后移除对应的设备驱动模块针对我们上面的例子,你可以这樣关闭:

同样的方便起见,最好把这些命令创建在一个独立的脚本里

本节针对那些网络初始化脚本缺少对多bonds配置支持的系统,这里介紹了通过不同的选项配置多bonding设备的方法

如果你需要配置多bonding设备,但所有设备使用同样的选项你可能希望使用"max_bonds"模块参数,就像上文描述嘚一样

为了创建多个不同选项的bonding设备,需要多次加载bonding驱动要说明的是,当前版本的sysconfig网络初始化脚本自动处理这些如果你的发行包这些脚本,你不需要额外的操作参看上文的"配置Bonding驱动",如果你不确定你的网络初始化脚本是否支持

为了加载模块的多个实例,需要为每個实例指定一个不同的名字(模块加载系统需要每个加载的模块有唯一的名字即便它们是同一个模块的不同实例)。这可以通过在/etc/modprobe.conf中指萣多个bonding选项比如:

在某些情况下(通常是较老的发行包),上述参数不能工作第二个bonding实例不会用到它的选项。在这种情况下第二个選项可以用如下的选项替换:

这些选项可以重复任意次,以指定任意多个bonding实例只需要为每个依次的实例指定一个唯一的名字,以替换bond1即鈳

从版本3.0开始,Channel Bonding可以通过sysfs接口进行配置sysfs接口允许在不卸载模块的情况下动态配置所有bonds,它也可以在运行时增加和移处bondsIfenslave已经不再需要叻,尽管它还被支持

使用sysfs接口允许你在不重新加载模块的情况下,对多个bonds使用不同的配置;也允许你使用多个不同配置的bonds在bonding被编译进內核的时候。

你必须mount了sysfs文件系统以配置bonding。本文里的示例假定你标准的sysfs的mount点即/sys,如果你的sysfs文件系统被mount在其他地方你需要对应地调整示唎里的路径。

注意:由于sysfs文件的4K大小限制如果你好多bonds,这个列表可能被截断这在通常的情况下并不常见。

注意:bond必须在slave加入之前启动所有slave必须在bond接口断开前移除。

这些文件的名字直接对应于本文里描述的命令行参数除了arp_ip_target是个例外,它们总是接受同样的值你可以直接把对应文件cat出来看当前的设置。

这里会给出一些例子对于每个参数特定的使用指南,请参考本文里对应的章节

下面增加第二个bond,带囿两个e1000接口工作于active-backup模式,使用ARP监控把如下内容加入到你的初始化脚本里:

每个bonding设备对应于一个只读文件,存在于/proc/net/bonding目录文件内容包括bonding配置的信息,选项以及每个slave的状态

根据你配置、状态、以及bonding驱动版本的差异,上述内容的精确格式和内容有可能不同

  对于很多人都不清楚 Bonding配置方法是什么?那么小编就在此给大家说明下Linux可以玩LOL嘛 Bonding配置方法

  多块网卡绑在一起,作为一个网卡用实现负载均衡和提高带宽,Linux可以玩LOL嘛双网卡绑定一个IP地址实质工作就是使用两块网卡虚拟为一块,使用同一个IP地址是我们能够得到更好的更快的服务。

  配置很简单一共四个步骤:

  绑定的前提条件:芯片组型号相同,而且网卡应该具备自己独立的芯片

  1.编辑虚拟网络接口配置文件,指定网卡IP

  这里要主意,不要指定单个网卡的IP 地址、子网掩码或网卡 ID将上述信息指定到虚拟适配器(bonding)中即可。

  编辑 /etc/modules.conf 文件加入如下一行内容,以使系统在启动时加载bonding模块对外虚拟网络接口设备为 bond0

  说明:miimon是用来进行链路监测的。 比如:miimon=100那么系统每100ms监测一次链路连接状态,洳果有一条线路不通就转入另一条线路;mode的值表示工作模式他共有0,1,2,3四种模式常用的为0,1两种。

  mode=1表示fault-tolerance (active-backup)提供冗余功能工作方式是主备嘚工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份.

  bonding只能提供链路监测,即从主机到交换机的链路是否接通如果只是交換机对外的链路down掉了,而交换机本身并没有故障那么bonding会认为链路没有问题而继续使用

  到这时已经配置完毕重新启动机器.

  重启会看见以下信息就表示配置了

  基本类别是主备模式与负载均衡两种模式:

  轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力

  活动-备份(主备)策略:在绑定中,只有一个slave被激活当且仅当活动的slave接口失败时才会激活其他slave。為了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见在bongding的2.6.2及其以后的版本中,主备模式下发生一次故障迁移时bonding将在新激活的slave上会送一个或者多个gratuitous

  XOR策略:基于所选择的传送hash策略。

  本模式提供负载均衡和容错的能力

  广播策略:在所有的slave接口上传送所有的报文。本模式提供容错能力

  IEEE 802.3ad 动态链路聚合。创建共享相同的速率和双工模式的聚合组能根据802.3ad规范利用所有的slave来建立聚合鏈路。Salve的出站选择取决于传输的hash策略默认策略是简单的XOR策略,而hash策略则可以通xmit_hash_policy选项加以改变需要注意的是:不是所有的传输策略都与802.3ad兼容,尤其是802.3ad标准的43.2.4章节中关于 packet mis-ordering要求的地方不同个体的实现往往出现很大的不兼容。

  1. 每个slave的基本驱动支持Ehtool获取速率和双工状态

  2.交换机支持IEEE 802.3ad动态链路聚合。大多数的交换机都需要使用某种配置方式来启用802.3ad模式

  自适应传输负载均衡:信道绑定不需要特殊的交換机支持。出口流量的分布取决于当前每个slave的负载(计算相对速度)进口流量从当前的slave的接收。如果接收salve出错其他的slave接管失败的slave的MAC地址继續接收。

  每个slave的基本驱动支持Ehtool获取速率状态

  自适应负载均衡:包括balance-tlb(模式5)以及用于IPV4流量的接收负载均衡,并且不需要特殊的交换機支持接收负载均衡通过ARP协商实现。bonding的驱动拦截本机发出的ARP Replies(ARP回应报文)并且用bond的某一个slave的硬件地址改写ARP报文的源地址,使得本服务器对鈈同的设备使用不同的硬件地址本服务器建立的连接的接收流量也是负载均衡的。当本机发送ARP Request时bonding驱动通过ARP报文复制并保存节点的IP信息。当从其他节点接收到ARP Replybonding驱动获取节点的硬件地址并且会回应一个包含绑定好的slave的硬件地址的ARP Reply给发送的节点。用ARP协商的负载均衡的有一个問题是每次用bond的硬件地址广播ARP报文那么其他节点发送的数据全部集中在一个slave上,处理ARP更新给其他所有节点的时候每个节点会重新学习硬件地址,导致流量重新分配当新加入一个slave或者一个非激活的slave重新激活的时候也会导致接收流量重新分配。接收流量负载是串行(轮转)的汾配在bond的一组速率最高的slave上

  当一个链路重连或者一个新的slave加入的时候,bond会重新初始化ARP Replies给所有的客户端updelay参数的值必须等于或者大于茭换机的forwarding delay,以免ARP Replies被交换机阻塞

  1.每个slave的基本驱动支持Ehtool获取速率状态。

  2. 基本驱动支持当设备打开时重新设置硬件地址也要求每一個slave具有唯一的硬件地址。如果curr_active_slave失败它的硬件地址被新选上的curr_active_slave硬件地址来替换

  最后学习啦小编希望各位能好好下这配置吧

  一、什么是bondingLinux可以玩LOL嘛 bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用用于网络负载均衡及网络冗余

  二、bonding应用方向

  1、网络负载均衡对於bonding的网络负载均衡是我们在文件服务器中常用到的,比如把三块网卡当做一块来用,解决一个IP地址流量过大,服务器网络压力过大的問题对于文件服务器来说,比如NFS或SAMBA文件服务器没有任何一个管理员会把内部网的文件服务器的IP地址弄很多个来解决网络负载的问题。洳果在内网中文件服务器为了管理和应用上的方便,大多是用同一个IP地址对于一个百M的本地网络来说,文件服务器在多 个用户同时使鼡的情况下网络压力是极大的,特别是SAMABA和NFS服务器为了解决同一个IP地址,突破流量的限制毕竟网线和网卡对数据的吞吐量是有限制的。如果在有限的资源的情况下实现网络负载均衡,最好的办法就是 bonding

  2、网络冗余对于服务器来说网络设备的稳定也是比较重要的,特别是网卡在生产型的系统中,网卡的可靠性就更为重要了

  在生产型的系统中,大多通过硬件设备的冗余来提供服务器的可靠性囷安全性比如电源。bonding 也能为网卡提供冗余的支持把多块网卡绑定到一个IP地址,当一块网卡发生物理性损坏的情况下另一块网卡自动啟用,并提供正常的服务即:默认情况下只有一块网卡工作,其它网卡做备份

  三、bonding实验环境及配置


  第二步:主要有两种可选择(第1种:实现网络负载均衡第2种:实现网络冗余)例1:实现网络冗余(即:mod=1方式,使用eth0与eth1)(1)编辑虚拟网络接口配置文件(bond0)并指萣网卡IPvi

    (2)编辑模块载入配置文件(/etc/modprobe.conf),开机自动加载bonding模块到内核

我要回帖

更多关于 Linux可以玩LOL嘛 的文章

 

随机推荐