Linux 网卡bond模式 (多块网卡虚拟成一块网卡)
Linux 网卡bond模式
Bond 的原理是网卡在混杂 (promisc) 模式下运行;在这种模式下,网卡不像在通常情况下,只接收目的硬件地址是自身 Mac 的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担;而是接收网络上所有的数据帧,而且修改了驱动程序中的 mac 地址,将两块网卡的 Mac 地址改成相同,可以接收特定 mac 的数据帧,然后把相应的数据帧传送给 bond 驱动程序处理。
为了实现多块网卡的协同工作,Bond 模式将自己的 MAC 地址复制到各个物理网卡上,让所有的网卡共享同一个 MAC 地址。这个方式就要求所有的网卡都要支持 BIOS,这样才能够让操作系统将 MAC 地址写到网卡上;对于不支持 BIOS 读写的网卡而言,重起以后就恢复到网卡上 MAC 地址,服务器可能无法根据记录的 MAC 地址找到相对应的网卡。
对于单物理网卡的 Bond 网卡而言,Bond 网卡的 MAC 地址和物理网卡的物理地址是一致的;对于多物理网卡的 Bond 网卡而言,其中一块物理网卡会被设置为 Master,其他的网卡都是 Slave,Bond 网卡的 MAC 地址取自标志为 Master 的物理网卡,然后将这个 MAC 地址复制到其他物理网卡上。所以在指定用于安装 Linux 的网卡时,我们需要指定 Bond 网卡,以及 Bond 网卡所对应的标志为 Master 的物理网卡。(如果没有人为干预,一般情况下 Linux 所识别到的第一块网卡会被标志为 Master,也即使 eth0;对于有特殊配置的 Bond 网卡,需要根据具体的 Bond 配置情况来进行指定。)
网卡 bond 后的工作模式有两种:主备的工作方式和负载均衡方式。
在主备模式下 , 只有主网卡 eth0 工作,eth1 作为备份网卡是不工作的,只有当一个网络接口失效时 ( 例如主交换机掉电等 ),为了不会出现网络中断,系统会按照配置指定的网卡顺序启动工作,保证机器仍能对外服务,起到了失效保护的功能。
在负载均衡工作模式下,由于两块网卡都正常工作,它能提供两倍的带宽,在这种情况下出现一块网卡失效,仅仅会是服务器出口带宽下降,也不会影响网络使用。
Linux下通过网卡邦定技术既增加了服务器的可靠性,又增加了可用网络带宽,为用户提供不间断的网络服务。
Bond配置
1. 创建配置文件:
vi /etc/sysconfig/network-scripts/ifcfg-bond0
如下参考配置:
DEVICE=bond0 --物理设备名字 IPADDR=192.168.1.20 --IP地址 NETWORK=192.168.1.0 --所属子网 NETMASK=255.255.255.0 --子网掩码 USERCTL=no --是否允许非root用户控制该设备 BOOTPROTO=none --一般是在做网卡绑定的时候用到,通常情况下就dhcp或者static ONBOOT=yes --开机自动激活网卡
将如上的IP替换为实际的IP地址.
2. 修改 eth0 和 eth1 配置文件:
[root@nixway.net etc]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
如下为参考配置
DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
修改eth1配置文件
[root@nixway.net etc]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
如下为参考配置
DEVICE=eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
保存退出.
3. 装载 bond 模块驱动
在使bond0网口能够工作之前,需要首先装载内核bond模块的驱动, 修改/etc/modprobe.conf:
[root@nixway.net etc]# vi /etc/modprobe.conf
将如下两行附加到文件末尾:
alias bond0 bonding options bond0 mode=balance-alb miimon=100
mode=balance-alb ---f负载均衡
miimon=100 ---用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次链路 连接状态,如果有一条线路不通就转入另一条线路
保存退出vi编辑。更多关于bond内核模块的文档,请参考Linux Ethernet Bonding Driver Howto
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端