热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux网卡绑定的七种工作模式详解

本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。

Linux 网卡绑定的七种工作模式详解

什么是网卡绑定(Bonding)?

网卡绑定是通过将多张物理网卡组合成一个逻辑网卡,以实现网络冗余、带宽扩展和负载均衡的技术。该技术在生产环境中广泛应用,特别是在需要高可靠性和高性能的网络环境中。

自Linux内核版本2.4.12起,bonding模块成为标准组件。对于更早的内核版本,可以通过补丁来实现相同功能。可以使用以下命令检查当前内核是否支持bonding:

# cat /boot/config-2.6.32-573.el6.x86_64 | grep -i bonding
CONFIG_BOnDING=m

七种工作模式介绍

1. mode=0 (balance-rr):循环平衡模式

此模式通过轮询方式分配数据包,增加带宽并提供容错能力。交换机需配置端口聚合(如Cisco的port channel)。每个数据包依次从不同的网卡发送,直到所有网卡轮流发送完毕。

  • 特点:提供负载均衡和故障切换;但可能导致客户端接收无序数据包,影响吞吐量。
  • 优点:带宽翻倍。
  • 缺点:需要交换机支持端口聚合。

2. mode=1 (active-backup):主备模式

在此模式下,仅有一块网卡处于活动状态,另一块作为备用。当主网卡失效时,备用网卡立即接管流量。此模式不支持交换机端口聚合。

  • 特点:仅有一个网卡工作,提供高冗余性;MAC地址唯一,避免交换机混乱。
  • 优点:高可靠性。
  • 缺点:资源利用率低,只有单个网卡工作。

3. mode=2 (balance-xor):XOR哈希模式

基于指定的传输哈希策略(默认为源MAC地址 XOR 目标MAC地址 % 网卡数量)选择网卡发送数据包。需要交换机支持端口聚合。

  • 特点:提供负载均衡和容错能力。

4. mode=3 (broadcast):广播模式

所有数据包从所有网卡发送,提供高冗余性但浪费资源。适用于金融等对网络可靠性要求极高的行业。

  • 特点:每个网卡发送相同的数据包,提供容错能力。
  • 必要条件:ethtool支持获取速率和双工设定;交换机支持IEEE 802.3ad动态链路聚合。

5. mode=4 (802.3ad):IEEE 802.3ad 动态链路聚合

遵循802.3ad标准,通过LACP协议与交换机配合,创建聚合组共享相同的速率和双工设置。外出流量根据传输哈希策略选择网卡。

  • 特点:创建聚合组,提供负载均衡和容错能力;需要注意包乱序问题。
  • 必要条件:ethtool支持获取速率和双工设定;交换机支持IEEE 802.3ad。

6. mode=5 (balance-tlb):适配器传输负载均衡

根据每个网卡的负载情况动态分配外出流量,接收流量使用当前轮到的网卡。无需交换机特殊支持。

  • 特点:不需要交换机支持;根据网卡负载分配流量;故障切换时接管MAC地址。
  • 必要条件:ethtool支持获取速率。

7. mode=6 (balance-alb):适配器自适应负载均衡

在mode=5基础上增加了接收负载均衡(RLB),无需交换机支持。通过ARP协商实现接收流量的负载均衡。

  • 特点:包含balance-tlb模式,同时实现接收负载均衡;通过ARP协商管理流量分布。
  • 必要条件:ethtool支持获取速率;驱动支持设置硬件地址。

小结

mode=5和mode=6无需交换机端配置,网卡能自动聚合。mode=4需要支持802.3ad。mode=0、mode=2和mode=3理论上需要静态聚合方式。

二、配置实例

首先确认Linux是否支持bonding:

# modinfo bonding | more
filename: /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/bonding/bonding.ko
author: Thomas Davis, tadavis@lbl.gov and many others
description: Ethernet Channel Bonding Driver, v3.6.0
version: 3.6.0
license: GPL
srcversion: 353B1DC123506708446C57B
depends: 8021q,ipv6
vermagic: 2.6.32-431.el6.x86_64 SMP mod_unload modversions

如显示上述信息,则说明支持bonding。

配置文件示例:

[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=EC:F4:BB:DC:4C:0C
TYPE=Ethernet
UUID=669f0694-9c52-4792-bd67-22c9d2c17acb
OnBOOT=yes
NM_COnTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=EC:F4:BB:DC:4C:0D
TYPE=Ethernet
UUID=1d2f30f4-b3f0-41a6-8c37-54f03115f7bd
OnBOOT=yes
NM_COnTROLLED=no
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@jacken ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME='System bond0'
TYPE=Ethernet
NM_COnTROLLED=no
USERCTL=no
OnBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
BONDING_OPTS='mode=1 miimon=100'
IPV6INIT=no

开机自动加载模块:

# echo 'options bonding mode=0 miimon=200' >> /etc/modprobe.d/dist.conf
# echo 'ifenslave bond0 eth0 eth1' >> /etc/rc.local
miimon=100

每100毫秒监测一次连接状态,若线路不通则切换至另一条线路。

查看bond0状态:

# cat /proc/net/bonding/bond0
[root@compute05 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0c
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ec:f4:bb:dc:4c:0d
Slave queue ID: 0

三、扩展配置

如果要配置多个bond接口(如eth0和eth1组成bond0,eth2和eth3组成bond1),可以通过以下两种方法:

1. 第一种方法:

alias bond0 bonding
alias bond1 bonding
options bonding max_bOnds=2 miimon=200 mode=1

2. 第二种方法:

alias bond0 bonding
options bond0 miimon=100 mode=1
install bond1 /sbin/modprobe bonding -o bond1 miimon=100 mode=0
install bond2 /sbin/modprobe bonding -o bond2 miimon=100 mode=1
install bond3 /sbin/modprobe bonding -o bond3 miimon=100 mode=0

不同bond接口可以设定不同模式,注意启动脚本的配置:

ifenslave bond0 eth0 eth1
ifenslave bond1 eth2 eth3
ifenslave bond2 eth4 eth5
ifenslave bond3 eth6 eth7

推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 深入剖析 DEX 赛道:从 60 大头部项目看五大趋势
    本文通过分析 60 大头部去中心化交易平台(DEX),揭示了当前 DEX 赛道的五大发展趋势,包括市场集中度、跨链协议、AMM+NFT 结合、新公链崛起以及稳定币和衍生品交易的增长潜力。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入浅出:Google工程师的算法学习指南
    通过Google工程师的专业视角,带你系统掌握算法的核心概念与实践技巧。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
author-avatar
娅丶0k_732
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有