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
相关推荐
YM52e35 分钟前
鸿蒙Flutter Center居中组件:Align对齐详解
android·学习·flutter·华为·harmonyos·鸿蒙
Herbert_hwt38 分钟前
建立Java程序开发
java·开发语言
愚公移码1 小时前
蓝凌EKP18产品:流程虚拟机(PVM)
java·开发语言·前端
十月的皮皮1 小时前
stm20260720-从新手 C 到量产 STM32 工程:程序设计推导指南
c语言·开发语言·stm32·stm32cubemx·hal库
Echo缘2 小时前
嵌入式系统C语言资源分类与内存分布分析
c语言·开发语言
JaneConan2 小时前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
赤水无泪3 小时前
qt中图标、名称的设置方式
开发语言·qt
金伟API10243 小时前
SQL Server基础学习笔记
笔记·学习
王莎莎-MinerU3 小时前
MCP 解决的是工具接入,科研 Agent 还缺的是科学证据接口标准化
开发语言·网络·人工智能·深度学习·pdf·c#·php
MartinYeung53 小时前
[论文学习]MiCA:比LoRA和全参数微调学到更多知识
深度学习·学习·机器学习