网络 绑定Bonding(成组Teaming) 是 Linux 的一项内核特性,它让我们可以将多个网络接口(例如ens192
、ens224
)聚合为一个专有的虚拟网络接口,被称为通道绑定(bond0
)。这样做能够提升吞吐量并增加冗余备份。
网络绑定一共支持 7 种模式,你可以根据实际需求进行设置。链接聚合控制协议Link Aggregation Control Protocol(LACP), 即模式 4(802.3ad)因其支持链接聚合与冗余而被广泛应用。
在本篇文章中,我们将引导你学习如何在 RHEL 系统中配置网卡(网络)绑定。
LACP 绑定的前置条件
- 网络团队需要在网络交换机的端口上开启 LACP(802.3ad)来实现链接的聚合。
- 一个 Linux 系统应该配备至少两个网络接口。
- 对于物理服务器,我们推荐在板载接口与 PCI 接口间进行绑定配置,以避免在主机端的网络卡出现单点故障。
Bonding 模块
你可以使用 lsmod
命令来确认你的 Linux 系统是否已经加载了bonding
模块。
lsmod | grep -i bondingbonding 12451 0lsmod | grep -i bonding bonding 12451 0lsmod | grep -i bonding bonding 12451 0
系统应该默认已加载。如果未看到,可以运用 modprobe
命令进行加载。
modprobe bondingmodprobe bondingmodprobe bonding
创建绑定接口
在
路径下,创建一个名为
/etc/sysconfig/network-scripts/ifcfg-bond0
的绑定接口文件。依据你的网络情况,你可能需要修改诸如IP
、MASK
以及GATEWAY
等值。
vi /etc/sysconfig/network-scripts/ifcfg-bond0vi /etc/sysconfig/network-scripts/ifcfg-bond0vi /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=BondDEVICE=bond0NAME=bond0BONDING_MASTER=yesBOOTPROTO=noneONBOOT=yesIPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"TYPE=Bond DEVICE=bond0 NAME=bond0 BONDING_MASTER=yes BOOTPROTO=none ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"TYPE=Bond DEVICE=bond0 NAME=bond0 BONDING_MASTER=yes BOOTPROTO=none ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
参数 | 描述 |
---|---|
BONDING_MASTER=yes | 表示设备是一个绑定主设备。 |
mode=4 | 绑定模式是 IEEE 802.3ad 动态链接聚合(LACP)。 |
miimon=100 | 定义以毫秒单位的 MII 链路监测频率,这决定了多久检查每个从属链路的状态一次以寻找失败的链路。0 值将禁用 MII 链路监测。100 是个不错的初始值。 |
lacp_rate=1 | 一个设置项,规定我们将以何种频率要求我们的链路伙伴每秒钟发送 LACPDU。默认为慢,即 0 。 |
配置第一个子接口
修改你希望添加到绑定中的第一个子接口。请根据你的实际环境使用合适的接口名。
vi /etc/sysconfig/network-scripts/ifcfg-ens192vi /etc/sysconfig/network-scripts/ifcfg-ens192vi /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=EthernetBOOTPROTO=noneDEVICE=ens192ONBOOT=yesMASTER=bond0SLAVE=yesTYPE=Ethernet BOOTPROTO=none DEVICE=ens192 ONBOOT=yes MASTER=bond0 SLAVE=yesTYPE=Ethernet BOOTPROTO=none DEVICE=ens192 ONBOOT=yes MASTER=bond0 SLAVE=yes
配置第二个子接口
修改你希望添加到绑定中的第二个子接口。请根据你的实际环境使用合适的接口名。
vi /etc/sysconfig/network-scripts/ifcfg-ens224vi /etc/sysconfig/network-scripts/ifcfg-ens224vi /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=EthernetBOOTPROTO=noneDEVICE=ens224ONBOOT=yesMASTER=bond0SLAVE=yesTYPE=Ethernet BOOTPROTO=none DEVICE=ens224 ONBOOT=yes MASTER=bond0 SLAVE=yesTYPE=Ethernet BOOTPROTO=none DEVICE=ens224 ONBOOT=yes MASTER=bond0 SLAVE=yes
重启网络服务
重启网络服务以激活绑定接口。
systemctl restart networksystemctl restart networksystemctl restart network
验证绑定配置
你可以借助 ip 命令来查看绑定接口以及其子接口的情况。可以看到,bond0
现在已启动并在运行。
![如何在RHEL上配置网络绑定(成组) 图片[1]-如何在RHEL上配置网络绑定(成组)-不念博客](https://www.bunian.cn/wp-content/uploads/2023/08/image-63.jpeg)
查阅绑定接口状态
检查以下文件,你可以看到绑定接口及其子接口的详细信息。输出结果应该看起来很不错,我们能看到诸如绑定模式,MII 状态,MII 轮询间隔,LACP 速率,端口数量等信息。
cat /proc/net/bonding/bond0cat /proc/net/bonding/bond0cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)Bonding Mode: IEEE 802.3ad Dynamic link aggregationTransmit Hash Policy: layer (0)MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0802.3ad infoLACP rate: fastMin links: 0Aggregator selection policy (ad_select): stableSystem priority: 65535System MAC address: c8:5b:76:4d:d4:5cActive Aggregator Info:Aggregator ID: 1Number of ports: 2Actor Key: 15Partner Key: 32773Partner Mac Address: e4:a7:a0:32:fc:e9Slave Interface: ens192MII Status: upSpeed: 10000 MbpsDuplex: fullLink Failure Count: 0Permanent HW addr: c8:5b:76:4d:d4:5cSlave queue ID: 0Aggregator ID: 1Actor Churn State: nonePartner Churn State: noneActor Churned State: 0Partner Churned State: 0details actor lacp pdu:system priority: 65535system mac address: c8:5b:76:4d:d4:5cport key: 15port priority: 255port number: 1port state: 63details Partner lacp pdu:system priority: 32667system mac address: e4:a7:a0:32:fc:e9oper key: 32773port priority: 32768port number: 290port state: 61Slave Interface: ens224MII Status: upSpeed: 10000 MbpsDuplex: fullLink Failure Count: 0Permanent HW addr: e4:a7:a0:32:fc:e9Slave queue ID: 0Aggregator ID: 1Actor Churn State: nonePartner Churn State: noneActor Churned State: 0Partner Churned State: 0details actor lacp pdu:system priority: 65535system mac address: e4:a7:a0:32:fc:e9port key: 15port priority: 255port number: 2port state: 63details Partner lacp pdu:system priority: 32667system mac address: c8:5b:76:4d:d4:5coper key: 32773port priority: 32768port number: 16674port state: 61Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: fast Min links: 0 Aggregator selection policy (ad_select): stable System priority: 65535 System MAC address: c8:5b:76:4d:d4:5c Active Aggregator Info: Aggregator ID: 1 Number of ports: 2 Actor Key: 15 Partner Key: 32773 Partner Mac Address: e4:a7:a0:32:fc:e9 Slave Interface: ens192 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: c8:5b:76:4d:d4:5c Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned State: 0 Partner Churned State: 0 details actor lacp pdu: system priority: 65535 system mac address: c8:5b:76:4d:d4:5c port key: 15 port priority: 255 port number: 1 port state: 63 details Partner lacp pdu: system priority: 32667 system mac address: e4:a7:a0:32:fc:e9 oper key: 32773 port priority: 32768 port number: 290 port state: 61 Slave Interface: ens224 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: e4:a7:a0:32:fc:e9 Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned State: 0 Partner Churned State: 0 details actor lacp pdu: system priority: 65535 system mac address: e4:a7:a0:32:fc:e9 port key: 15 port priority: 255 port number: 2 port state: 63 details Partner lacp pdu: system priority: 32667 system mac address: c8:5b:76:4d:d4:5c oper key: 32773 port priority: 32768 port number: 16674 port state: 61Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: IEEE 802.3ad Dynamic link aggregation Transmit Hash Policy: layer (0) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: fast Min links: 0 Aggregator selection policy (ad_select): stable System priority: 65535 System MAC address: c8:5b:76:4d:d4:5c Active Aggregator Info: Aggregator ID: 1 Number of ports: 2 Actor Key: 15 Partner Key: 32773 Partner Mac Address: e4:a7:a0:32:fc:e9 Slave Interface: ens192 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: c8:5b:76:4d:d4:5c Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned State: 0 Partner Churned State: 0 details actor lacp pdu: system priority: 65535 system mac address: c8:5b:76:4d:d4:5c port key: 15 port priority: 255 port number: 1 port state: 63 details Partner lacp pdu: system priority: 32667 system mac address: e4:a7:a0:32:fc:e9 oper key: 32773 port priority: 32768 port number: 290 port state: 61 Slave Interface: ens224 MII Status: up Speed: 10000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: e4:a7:a0:32:fc:e9 Slave queue ID: 0 Aggregator ID: 1 Actor Churn State: none Partner Churn State: none Actor Churned State: 0 Partner Churned State: 0 details actor lacp pdu: system priority: 65535 system mac address: e4:a7:a0:32:fc:e9 port key: 15 port priority: 255 port number: 2 port state: 63 details Partner lacp pdu: system priority: 32667 system mac address: c8:5b:76:4d:d4:5c oper key: 32773 port priority: 32768 port number: 16674 port state: 61
容错/冗余测试
为了验证容错性和连接速度,你可以逐个断开接口,然后检查服务器是否仍旧可达。
- 测试用例-1:当两个子接口都启动并运行时,使用 ethtool 命令检查链路速度。
- 测试用例-2:断开第一个子接口,然后尝试访问系统。
- 测试用例-3:断开第二个子接口,然后尝试访问系统。
测试用例-1:
如果你想检测下连接速度:没错,我在 bond0
上看到了20 Gbps
的速度,因为每个子接口支持 10 Gbps。
ethtool bond0ethtool bond0ethtool bond0
Settings for bond0:Supported ports:Supported link modes: Not reportedSupported pause frame use: NoSupports auto-negotiation: NoSupported FEC modes: Not reportedAdvertised link modes: Not reportedAdvertised pause frame use: NoAdvertised auto-negotiation: NoAdvertised FEC modes: Not reportedSpeed: 20000Mb/sDuplex: FullPort: OtherPHYAD: 0Transceiver: internalAuto-negotiation: offLink detected: yesSettings for bond0: Supported ports: Supported link modes: Not reported Supported pause frame use: No Supports auto-negotiation: No Supported FEC modes: Not reported Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 20000Mb/s Duplex: Full Port: Other PHYAD: 0 Transceiver: internal Auto-negotiation: off Link detected: yesSettings for bond0: Supported ports: Supported link modes: Not reported Supported pause frame use: No Supports auto-negotiation: No Supported FEC modes: Not reported Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 20000Mb/s Duplex: Full Port: Other PHYAD: 0 Transceiver: internal Auto-negotiation: off Link detected: yes
测试用例-2:
现在我们将关闭第一个子接口。
ifdown ens192ifdown ens192ifdown ens192
Device 'ens192' successfully disconnected.Device 'ens192' successfully disconnected.Device 'ens192' successfully disconnected.
通过 ssh
尝试访问系统。没问题,系统现在是可以访问的。
ssh [email protected]ssh [email protected]ssh [email protected]
由于已经有一个子接口关闭,你现在在 bond0
上只能看到 10 Gbps 的速度。
ethtool bond0 | grep -i speedethtool bond0 | grep -i speedethtool bond0 | grep -i speed
Speed: 10000Mb/sSpeed: 10000Mb/sSpeed: 10000Mb/s
现在,我们再次查看绑定接口的状态。可以看出,只有一个子接口处于活跃状态。
cat /proc/net/bonding/bond0cat /proc/net/bonding/bond0cat /proc/net/bonding/bond0
测试用例-3:
我们来关闭第二个子接口,并进行类似测试用例-2 的测试:
ifdown ens224ifdown ens224ifdown ens224
Device 'ens224' successfully disconnected.Device 'ens224' successfully disconnected.Device 'ens224' successfully disconnected.
结语
我希望你已经掌握了在 RHEL 上配置 LACP 绑定的方法。
在本教程中,我们为你展示了在 RHEL 系统配置网络绑定或网卡聚合的最简单方式。