当前位置: 首页 > news >正文

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
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:57:ff:c5 brd ff:ff:ff:ff:ff:ffinet 192.168.92.128/24 brd 192.168.92.255 scope global noprefixroute dynamic ens33valid_lft 5444412sec preferred_lft 5444412secinet6 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 1000link/ether 00:0c:29:57:ff:cf brd ff:ff:ff:ff:ff:ffinet 192.168.92.129/24 brd 192.168.92.255 scope global noprefixroute dynamic ens36valid_lft 5444413sec preferred_lft 5444413secinet6 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
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
TYPE=Ethernet 
BOOTPROTO=none 
ONBOOT=yes 
USERCTL=no 
DEVICE=ens33
MASTER=bond0 
SLAVE=yes
[root@localhost ~]# cat  /etc/sysconfig/network-scripts/ifcfg-ens36
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

相关文章:

  • k8s-CCE创建工作负载变量引用
  • jquery.datetimepicker无法添加清除按钮的问题
  • eNSP学习——RIP的路由引入
  • 记录一下npm安装时的错误排查过程
  • 2024-06-06 问AI: 在深度学习中,什么是欧几里德长度?
  • QT串口调试助手V2.0(源码全开源)--上位机+多通道波形显示+数据保存(优化波形显示控件)
  • 【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)
  • 【C语言从入门到入土】第八章 结构体
  • 【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)
  • 软件安全技术【太原理工大学】
  • Java面向对象-方法的重写、super
  • 【C++】<知识点> C++11新特性
  • 视觉大模型(VLLM)学习笔记
  • 华为策略流控
  • 网络编程(UPD和TCP)
  • 【Linux系统编程】快速查找errno错误码信息
  • 2017-08-04 前端日报
  • Flannel解读
  • Go 语言编译器的 //go: 详解
  • javascript 总结(常用工具类的封装)
  • Laravel 实践之路: 数据库迁移与数据填充
  • Meteor的表单提交:Form
  • mysql_config not found
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Promise初体验
  • Puppeteer:浏览器控制器
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring-boot 启动时碰到的错误
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Vue组件定义
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 一个项目push到多个远程Git仓库
  • 运行时添加log4j2的appender
  • 怎样选择前端框架
  • HanLP分词命名实体提取详解
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #laravel 通过手动安装依赖PHPExcel#
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $jQuery 重写Alert样式方法
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Qt) 默认QtWidget应用包含什么?
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)视频码率,帧率和分辨率的联系与区别
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript