Linux中网卡绑定的基础知识

1. 简介

    Linux网卡绑定程序提供了一种将多个网络接口聚合为单个逻辑接口的方法。逻辑接口的行为取决于模式,一般来说,不同模式分别提供热备或负载均衡的服务。

2. 配置bond绑定
2.1 概述

    您可以使用发行版的网络初始化脚本配置网络绑定,也可以使用iproute2或sysfs接口手动配置网络绑定。发行版通常使用三个包中的一个初始化网络:initscripts、sysconfig或interfaces。iproute2多用于SuSE 8;安装sysfs文件系统才能使用sysfs接口进行bond配置;sysconfig多用于SuSE 9;initscripts多用于Red Hat;interfaces多用于Debian。如果实在不知道操作系统可以使用哪种方式做bond,可以尝试以下方法:
    首先,在/etc/network目录中查找名为interfaces的文件。如果系统中存在此文件,则系统将使用interfaces。
    否则,测试以下命令:

$ rpm -qf /sbin/ifup

    它的响应为一行以“initscripts”或“sysconfig”开头的文本,后跟一些数字。这是提供网络初始化脚本的软件包。

2.2 常用bond配置

    本节适用于支持网卡绑定的具有initscripts软件包的发行版,例如Red Hat Enterprise Linux 3或更高版本、Fedora等。在这些系统上,网络初始化脚本可以配置为绑定控制设备。
    在企业版Linux中,除非ethX设备配置了IP地址,否则系统不会自动加载网卡驱动程序。由于此限制,用户必须为bondX成员的所有物理网卡手动配置网络脚本文件。网络脚本文件位于目录中:

/etc/sysconfig/network-scripts

    文件名必须以“ifcfg-eth”作为前缀,并以网卡的物理网卡号作为后缀。例如,eth0的脚本名为 /etc/sysconfig/network-scripts/ifcfg-eth0。将以下文本放入文件中:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none

    每个ethX设备的 “DEVICE=” 行将不同,并且必须与文件名相对应,即ifcfg-eth1的相应行必须为“DEVICE=eth1”。“MASTER=” 行的设置取决于绑定接口名称。与其他网络设备一样,它们通常从0开始,每个设备向上一个,即第一个绑定实例是bond0,第二个是bond1,依此类推。
    接下来,创建一个绑定网络脚本。此脚本的文件名为 /etc/sysconfig/network-scripts/ifcfg-bondX,其中X是绑定的编号。对于bond0,文件名为“ifcfg-bond0”,对于bond1,文件名为“ifcfg-bond1”,依此类推。在该文件中,写入以下文本:

# vi /etc/sysconfig/network-scripts/ifcfg-bondX
DEVICE=bond0
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

    更改特定行(IPADDR,NETMASK,NETWORK 和 BROADCAST)以匹配您的网络配置。
最后,编辑/etc/modules.conf(或 modprobe.conf),以便在使用bond0接口时加载绑定模块:

# vi /etc/modprobe.conf
alias bond0 bonding
options bond0 mode=balance-alb miimon=100

    对于CentOS/RHEL 5,在文件 /etc/sysconfig/network-scripts/ifcfg-bond0 中设置绑定模式,而不是在文件/etc/modprobe.conf中设置,例如:

BONDING_OPTS="mode=active-backup arp_interval=60 arp_ip_target=192.168.1.254"

    对于CentOS/RHEL 6,在目录 /etc/modprobe.d/ 中创建一个名为 /etc/modprobe.d/bonding.conf 的新文件,内容为“alias bond0 bonding”。还可以在文件 /etc/sysconfig/networkscripts/ifcfg-bond0 中设置绑定模式,而不是在 /etc/modprobe.d/bonding.conf 中。
    通过 BONDING_OPTS 设置选项时,无需编辑/etc/modprobe.d/*.conf
    对于/etc/sysconfig/network scripts/ifcfg-bond0文件,将示例参数替换为适合的配置。最后以root用户身份运行“/etc/rc.d/init.d/network restart”或“service network restart”,重新启动网络,bond连接现在应该已启动了。

2.3 BONDING_OPTS选项说明

    miimon:
    以毫秒为单位指定MII链路监视频率。该参数决定了从节点链路状态的检查频率,检查从节点是否存在链路故障。值为零将禁用MII链路监控。将该值设为100是一个很好的选择。

    mode:
    指定一个绑定策略。默认值为balance-rr(循环),即bond0。active-backup(bond1)、balance-tlb(bond5) 和 balance-alb(bond6) 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。例如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式 4 中需要 LACP 和 EtherChannel。

  • balance-rr 或者 0 — 为容错及负载平衡设定轮询机制。从第一个可用的绑定从属接口开始按顺序接收和发送传输数据。
  • active-backup 或者 1 — 为容错设定 active-backup 策略。 通过第一个可用的绑定从属接口接收和发送传输文件。只有在活动的绑定从属接口失败时才使用其他绑定从属接口。
  • balance-xor 或者 2 — 只根据所选哈希策略传输数据。默认为使用源的 XOR 和目标 MAC 地址与从属接口数的余数相乘生成哈希。在这个模式中,指向具体对等接口的模式流量总是使用同一接口发送。因为目标是由 MAC 地址决定,因此这个方法最适合相同链接或本地网络的对等接口流量。如果流量必须通过单一路由器,那么这个流量平衡模式将是次选模式。
  • broadcast 或者 3 — 为容错设定广播策略。可在所有从属接口中传输所有数据。
  • 802.3ad 或者 4 — 设定 IEEE 802.3ad 动态链接聚合策略。创建一个共享同一速度和双工设置的聚合组。在所有活跃聚合器中传输和接受数据。需要兼容 802.3ad 的交换机。
  • balance-tlb 或者 5 — 为容错及负载平衡设定传输负载平衡(TLB)策略。传出流量会根据每个从属接口的当前负载分布。传入流量由当前从属接口接收。如果接收数据从属接口失败,另一个从属接口会接管失败从属接口的 MAC 地址。这个模式只适用于内核绑定模式了解的本地地址,因此无法在桥接后的虚拟机中使用。
  • balance-alb 或者 6 — 为容错及负载平衡设定自适应负载平衡(ALB)策略,包括用于 IPv4 流量的传输及接收负载平衡。使用 ARP 协商获得接收负载平衡。这个模式只适用于内核 binding 模块了解的本地地址,因此无法在桥接后的虚拟机中使用。
3. 修改bond配置

    可以通过操作位于/sys/class/net/<bond name>/bonding中的文件来单独配置每个bond。
    示例:
    为bond0配置balance-alb模式:

# ifconfig bond0 down
# echo 6 > /sys/class/net/bond0/bonding/mode
 - 或 -
# echo balance-alb > /sys/class/net/bond0/bonding/mode
注意:必须先关闭bond接口,然后才能更改模式。

 
    以1秒的间隔在bond0上启用MII监控:

# echo 1000 > /sys/class/net/bond0/bonding/miimon
注意:如果启用ARP监控,则在启用MII监控时将禁用ARP监控,反之亦然。
4. 查询bond配置
4.1 查询bond情况

    每个绑定设备在 /proc/net/bonding 目录中都有一个只读文件。文件内容包括绑定配置、选项和每个从属设备的状态信息。
    例如,加载参数为mode=0和miimon=1000的驱动程序后,/proc/net/bonding/bond0 的内容一般如下:

# cat /proc/net/bonding
Ethernet Channel Bonding Driver: 2.6.1 (October 29, 2004)
Bonding Mode: load balancing (round-robin)
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Link Failure Count: 1

Slave Interface: eth0
MII Status: up
Link Failure Count: 1

    具体的格式和内容将根据绑定配置、状态和绑定驱动的版本而变化。

4.2 查询网络情况

    可以使用ifconfig命令检查网络配置。bond设备有 MASTER 标志,从设备有 SLAVE 标志。ifconfig的输出不包含主从设备的具体关联信息。
    在下面的示例中,bond0接口是主(master),而eth0和eth1是从(SLAVE)。请注意,除TLB和ALB模式需要每个从机具有唯一MAC地址外,其他模式下,bond0的所有从机都具有与bond0相同的MAC地址。

# /sbin/ifconfig
bond0     Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          inet addr:XXX.XXX.XXX.YYY  Bcast:XXX.XXX.XXX.255  Mask:255.255.252.0
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:7224794 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3286647 errors:1 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:0

eth0      Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:10 Base address:0x1080

eth1      Link encap:Ethernet  HWaddr 00:C0:F0:1F:37:B4
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:9 Base address:0x1400
5. 交换机配置要求

    active-backup,balance-tlb 和 balance-alb模式(即bond1,bond5,bond6模式)不需要交换机的任何特定配置。
    balance-rr,balance-xor 和 broadcast模式(即bond0,bond2,bond3模式)通常要求交换机将适当的端口分组聚合在一起。

参考文档

[1]Thomas Davis. Linux Ethernet Bonding Driver HOWTO[EB/OL]. [2006-04-24]. https://www.kernel.org/doc/Documentation/networking/bonding.txt.
[2]The Geek Diary. Basics of Ethernet Bonding in Linux[EB/OL]. [2021-01-01]. https://www.thegeekdiary.com/basics-of-ethernet-bonding-in-linux/.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值