Linux使用bonding实现双网冗余

1、简介

linux bonding 是一种将多个物理网卡绑定为一个逻辑网卡的技术,它可以实现网络的冗余、负载均衡和带宽扩展等功能。linux bonding 是 linux 内核中提供的一个模块,它支持七种工作模式,不同的模式有不同的特点和适用场景。linux bonding 的配置和管理可以通过一些命令或工具来进行,例如 ifenslave、nmcli、ethtool 等。linux bonding 的状态和参数可以通过 /proc/net/bonding 或 ethtool 命令来查看和修改。

2、bonding模式

bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点:

mode=0:平衡负载模式,有自动备援,但需要"Switch"支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必"Switch"支援及设定。

需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):

mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

3、实现双冗余模式步骤

  • 首先,你需要确认你的板子上的两个网卡是否支持 bonding 模块,以及你的 linux 系统是否已经安装了 bonding 模块。你可以使用 lsmod | grep bonding 命令来查看是否已经加载了 bonding 模块,如果没有,你可以使用 modprobe bonding 命令来加载它。
  • 其次,你需要选择一个合适的 bonding 模式来实现双网冗余。根据你的需求,我建议你使用 mode=1 (active-backup) 模式,这个模式只有一个网卡是活动的,另一个是备份的,当活动网卡出现故障时,备份网卡会自动接管流量。这个模式不需要交换机的特殊配置,也不会影响网络性能。
  • 然后,你需要修改你的板子上的两个网卡的配置文件,以及创建一个 bond 的配置文件。假设你的两个网卡分别是 eth0 和 eth1 ,那么你需要修改 /etc/sysconfig/network-scripts/ifcfg-eth0 和 /etc/sysconfig/network-scripts/ifcfg-eth1 文件,将它们设置为 bond 的从属网卡。具体的修改内容如下:

DEVICE=eth0 # ifcfg-eth1 文件对应的位置修改为 eth1

USERCTL=no

ONBOOT=yes

MASTER=bond0

SLAVE=yes

BOOTPROTO=none

然后,在 /etc/sysconfig/network-scripts/ 目录下创建一个文件 ifcfg-bond0 ,将它设置为 bond 的主网卡,并指定 IP 地址、子网掩码、网关等信息。具体的内容如下:

DEVICE=bond0

TYPE=Bond

BOOTPROTO=none

USERCTL=no

IPADDR=192.168.1.100 # 根据你的实际情况修改

NETMASK=255.255.255.0 # 根据你的实际情况修改

GATEWAY=192.168.1.1 # 根据你的实际情况修改

BONDING_OPTS="mode=1 miimon=100" # 指定 bonding 模式为 1 ,监测间隔为 100 毫秒

ONBOOT=yes

BONDING_MASTER=yes

  • 最后,你需要重启网络服务或者重新启动板子,让配置生效。你可以使用 systemctl restart network 命令来重启网络服务,或者使用 reboot 命令来重新启动板子。重启后,你可以使用 cat /proc/net/bonding/bond0 命令来查看 bond 的状态和参数,确认是否成功实现了双网冗余。
相关推荐
watl04 分钟前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
网络安全(king)33 分钟前
网络安全攻防学习平台 - 基础关
网络·学习·web安全
赵大仁39 分钟前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础
vvw&44 分钟前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
李白你好1 小时前
家用无线路由器的 2.4GHz 和 5GHz
运维·网络
嵌入(师)1 小时前
嵌入式驱动开发详解21(网络驱动开发)
网络·驱动开发
冷曦_sole1 小时前
linux-21 目录管理(一)mkdir命令,创建空目录
linux·运维·服务器
最后一个bug1 小时前
STM32MP1linux根文件系统目录作用
linux·c语言·arm开发·单片机·嵌入式硬件
dessler1 小时前
Docker-Dockerfile讲解(二)
linux·运维·docker
卫生纸不够用2 小时前
子Shell及Shell嵌套模式
linux·bash