Bond 网卡绑定技术学习

前言: 为了实现网卡的高可用性,需要学习一下 Bond技术

1. 概念

Bond(也被称为链路聚合、端口绑定或接口绑定)是一种网络技术,用于将多个物理网络接口(如以太网接口)组合成一个逻辑接口。这样做的目的是增加带宽、提高网络性能、实现负载均衡和冗余备份。

网卡绑定(Bonding)技术是一种在Linux网络架构中提高网络连接可靠性和带宽利用的手段,主要用于将两个或多个物理网卡(NICs)组合成一个逻辑接口,这样即使单个网卡出现故障,网络连接仍然能够保持

2. Bond技术 能解决什么问题

通过使用 Bond 技术,可以将多个网络接口绑定在一起,形成一个虚拟的逻辑接口。当数据包通过该逻辑接口传输时,它们会通过内部算法(如哈希函数)分发到每个物理接口上,实现负载均衡。这样可以充分利用每个物理接口的带宽,提高整体网络吞吐量。

另外,Bond 还提供了故障切换和冗余备份的功能。如果其中一个物理接口发生故障或不可用,数据包会自动切换到其他可用的接口上,确保网络的可靠性和连通性。

Bond 技术在服务器和网络设备中广泛应用,特别是在需要高带宽和可靠性的环境中,如数据中心、负载均衡器、集群服务器等。它可以提供更高的网络性能、冗余备份和容错能力,从而提高网络的可靠性和性能。

3. Bond模式介绍

  • mode=0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。
  • mode=1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。
  • mode=2(balance-xor)(平衡策略) : 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
  • mode=3(broadcast)(广播策略): 表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协
    商方式配合。
  • mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合):表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)。标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding
    负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。
  • mode=5(balance-tlb)(适配器传输负载均衡): 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
  • mode=6(balance-alb)(适配器适应性负载均衡):在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的
    支持。接收负载均衡是通过ARP协商实现的.

4. Bond模式配置实验

mode 1 模式进行实验;

实验思路: 创建一个虚拟的网卡Bond0配置为Master指定mode级别并配置地址,将两张真正的物理卡配置为Slave不用配置地址

使用Centos7完成本次实验,在实验前,先禁用NetworkManager服务,并禁止selinux

复制代码
systemctl disable NetworkManager --now
setenforce  0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

4.1. 查看物理网卡

复制代码
[root@localhost ~]# ip a
powershell 复制代码
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:57:ff:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.92.128/24 brd 192.168.92.255 scope global noprefixroute dynamic ens33
       valid_lft 5444412sec preferred_lft 5444412sec
    inet6 fe80::199:d74c:2c3c:1cd/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:57:ff:cf brd ff:ff:ff:ff:ff:ff
    inet 192.168.92.129/24 brd 192.168.92.255 scope global noprefixroute dynamic ens36
       valid_lft 5444413sec preferred_lft 5444413sec
    inet6 fe80::3150:9b3d:2ff5:dc9a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

4.2. 创建Bond网卡,Bond模式为1

复制代码
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0
powershell 复制代码
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=bond0 
IPADDR=192.168.92.100 
PREFIX=24 
GATEWAY=192.168.92.2
DNS1=192.168.92.2
NM_CONTROLLED=no
BONDING_OPTS='mode=1 miimon=100 fail_over_mac=1'

fail_over_mac=1 : 默认fail_over_mac=0,当发生错误时,只改slave的mac不改bond;fail_over_mac=1时,只改bond不改slave

4.3. 将物理网卡配置slave模式,master为 bond0

复制代码
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
powershell 复制代码
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=ens33
MASTER=bond0 
SLAVE=yes
复制代码
[root@localhost ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens36
powershell 复制代码
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=ens36 
MASTER=bond0 
SLAVE=yes

4.4. 重启网络

复制代码
[root@localhost ~]# systemctl restart network

4.5 故障测试

长ping百度,将一块网卡down掉,查看效果

复制代码
[root@localhost ~]# ip link set ens33 down
相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习