Linux中网卡绑定的基础知识

x33g5p2x  于2021-09-19 转载在 Linux  
字(4.6k)|赞(0)|评价(0)|浏览(372)
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。关于这7种bond类型,网络上的资料已经非常丰富了,不予赘述。

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/.

相关文章