查看原文
其他

Linux 网卡绑定的相关知识和技巧 | 周末送资料

twt 社区 twt企业IT社区 2024-02-18
本文来自talkwithtrend公众号和社区相关内容的整理

原理知识


Linux 多网卡的7种bond模式原理


Linux 多网卡绑定

网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6

常用的有三种

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地址。

七种bond模式说明:

第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)

特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。→【点击此处全文阅读】


网卡绑定模式与自动网卡绑定解析


日常工作生产环境的x86服务器都使用了双网卡接入模式,无论是出于增加网络带宽的考虑,还是冗余,高可用的考虑,双网卡绑定都能带来非常多的裨益,双网卡即把两块网卡虚拟成为一块网卡,具有相同的IP地址,可看做一个单独的以太网接口设备。

正常情况下,网卡只接收目的MAC地址是自身MAC的以太网帧。但处于绑定模式下的两个网卡运行在混杂模式下,会接受所有的以太网帧,并且将驱动程序中两块网卡的 MAC地址改成相同,可以接收特定MAC的数据帧并处理。

日常工作中使用的双网卡绑定模式主要有A/S主备模式,AA静态聚合模式,AA 802.3ad动态聚合模式三种,下面详细分析一下他们的特点和适用场景。


一. 三种绑定模式浅析

(1). A/S主备模式

顾名思义,主备模式下只有一个网络设备处于活动状态,当主网卡down掉以后,备网卡会切换为主设备。此模式提供比较高的容错能力,并且mac地址在交换机等设备看来是可见并唯一的,但是资源利用率不高,也不能满足高带宽的需求。

主备模式的实现原理是将做绑定的两个slave网口的MAC地址都改为虚拟网卡的MAC地址,而虚拟网卡的MAC地址是Bond创建启动后,主网口的MAC地址。如下示意图。

而当主网卡故障时,Bond会切换到备用网口,切换过程中,上层的应用是无感知不受影响的,因为bond驱动程序会接管上层应用的数据包,缓存起来等备用网卡起来后再通过备用网卡发送出去。但是缓冲区容量有限,如果切换时间过长会造成缓冲区溢出并丢包。

主备模式的容错能力决定这种网卡绑定模式适用于对网络链路带宽不是很敏感,但是要求高冗余性的场景下,比如部署应用的机器。→【点击此处全文阅读】


 实 战 


RHEL6 下 bond 双网卡绑定服务 & RedHat 5/6 下网卡绑定脚本


操作步骤和注意事项如下:

1、注意事项:

首先确认要绑定的是哪2个网口,避免绑定时绑错网口。

2、说明:

这里以绑定eth0和eth1的2个网口为例。

配置文件都在/etc/sysconfig/network-scripts/目录下。

操作步骤

绑定前需要彻底关闭NetworlManger服务,否则会和bond网卡冲突

→【点击此处全文阅读】


REDHAT linux7.2 系统下做网卡绑定实战录


配置过程:

最小化安装后,系统没有ifconfig命令,从光盘介质中安装net-tools*x86.64.rpm 软件包,,在系统光盘Package下面,rpm –ivh 安装即可!

Linux网卡绑定有几种模式:

bond模式:

1. Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合。

2. Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的。

3. Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)

4. Mode=3(broadcast) 表示所有包从所有interface发出,这个不均衡,只有冗余机制...和交换机的聚合强制不协商方式配合。

5. Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)

6. Mode=5(balance-tlb) 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave

7. Mode=6(balance-alb) 在5的tlb基础上增加了rlb。

修改配置文件,linux7 配置绑定,只需修改如下几个文件就可以了。Linux 7系统下识别网设备名字为em1、em2这样命名的,这里可以要求em1 、em2做绑定,模式是主备模式也就是mode=1

→【点击此处全文阅读】


RedHat6.3进行双网卡绑定


一、前期准备:

1.1、查看系统版本:

cat /etc/issue

1.2、检查系统配置上是否支持bonding:

cat /boot/config-xxxxxxx |grep –i bonding(回车)

CONFIG_BONDING=m

(返回CONFIG_BONDING=m表示支持,否则需要编译内核使他支持bonding,需要编译时请查阅相关文档,此处不做详细说明)

1.3、切换到网卡配置目录,进行备份,防止出错恢复:

cd /etc/sysconfig/network-scripts/ //切换目录

cp ifcfg-eth0 /home/bak/ifcfg-eth0.bak //备份eth0到指定目录

cp ifcfg-eth1 /home/bak/ifcfg-eth1.bak //备份eth1到指定目录

二、配置步骤:

2.1、进行bond0网卡的配置:

切换到目录/etc/sysconfig/network-scripts,创建一个ifcfg-bondX

vi /etc/sysconfig/network-scripts/ifcfg-bond0

//新建一个bond0配置文件,在文件中添加以下信息后,保存退出:

2.2、修改ifcfg-eth0和ifcfg-eth1的配置信息:(此处为网卡eth0和eth1绑定)

vi /etc/sysconfig/network-scripts/ifcfg-ethX

修改后配置信息如下:

cat ifcfg-eth0

cat ifcfg-eth1

2.3、修改/etc/modprobe.d/dist.conf文件,配置绑定模型,在末尾添加以下内容:(低版本系统直接配置/etc/modprobe.conf文件)

alias bond0 bonding

options bond0 miimon=100 mode=1

//使系统启动时加载bonding模块

注:选项miimon 是指定隔多长时间进行链路检查,单位为ms

选项mode是表示绑定口的工作模式,有0-6种模式,常用的为0、1:

mode=0表示load balancing(round-robin)负载均衡模式,两块网卡都在工作,当一张网卡停止工作时只会降低网络的吞吐量,不影响正常通信,需要交换机支持;

mode=1表示fault-tolerance(active-backup)主备工作模式,提供冗余功能。即默认情况下只有一块网卡工作,另一块为备份;

mode=6表示负载均衡模式,两块网卡都工作,不需要交换机支持。

其他模式不做介绍。

2.4、配置/etc/rc.d/rc/local,设置需绑定的网卡及顺序

至此,配置已基本完成。

2.5、关闭NetworkManager服务:

由于将接口下的NM_CONTROLLED设置成了no(如果设置成yes,在机器启动时networkmanager会调用networkmanager的配置文件,直接回调用接口的MAC地址,这样会导致物理接口mac与bond的mac不一致,这样在通讯时出现丢包现象)。同时我们需要关闭系统的networkmanager服务:

service NetworkManager stop

或 # chconfig NetworkManager off //永久关闭NetworkManager服务

然后重启机器:reboot

三、进行验证:

3.1、查看接口配置:查看物理网卡的MAC地址是否与bond 的一致

3.2、查看bond的运行状态:

3.3、进行测试:

通过同网段的其他电脑进行ping该主机,然后拔掉eth1接口网线测试。看通信是否正常。(作者:aixkevin)


RHEL7 配置双网卡双IP双网关


1. 从 vCenter添加新的网卡设备, 指定 好响应的VLAN

2. 进入 虚拟机 查看网卡信息 :

I fconfig –a

nmcli device show | grep -i device

启用 新网卡 并 创建配置文件

nmcli connection add type ethernet con-name eth1 ifname eth1 autoconnect yes

查看 UUID 并记录 下来

nmcli connection show

修改 网卡配置信息 如下:

cd /etc/sysconfig/network-script

vi ifcfg-eth1

HWADDR=00:50:56:A6:13:9C # 正确的MAC地址

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=eth1

UUID=9181c6c4-be5f-4565-9710-38313fc1329f #正确的UUID

DEVICE=eth1

ONBOOT=yes

IPV6_PRIVACY=no

IPADDR=10.76.124.11

NETMASK=255.255.254.0

GATEWAY=0.0.0.0 # 不可以设置网关

DNS1=10.14.20.1

DNS2=10.14.20.2

为新网卡配置静态路由

vi route-eth1

10.76. 100. 0/ 24 via 10.76.124.200 dev eth1

重启服务器并查看路由信息

R eboot

Ip route list

default via 10.76.128.200 dev eth0 proto static metric 100

10.76.0.0/16 via 10.76.124.200 dev eth1 proto static metric 100

10.76.124.0/23 dev eth1 proto kernel scope link src 10.76.124.11 metric 100

10.76.128.0/23 dev eth0 proto kernel scope link src 10.76.128.11 metric 100

特别注意:

service restart network 在 RHEL7 上 执行后 可能 会导致 eth1无法 起来, 解决 方法如下:

nmcli connection show

nmcli connection show –active

nmcli connection delete eth1

reboot

nmcli connection add type ethernet con-name eth1 ifname eth1 autoconnect yes

然后 完成后续IP以及路由的配置。

(作者:henry_chen)


Centos7 改网卡名称的两种方法


自动化运维需要所有的服务器网卡名称统一,因此需要修改网卡名称。

修改网卡名称有两种方法:

1.在第一次安装系统时就修改;

2.系统已经安装完成后在修改;

先来看第一种:(第一次安装系统)

在选择安装centos系统时 用方向键锁定 install CentOS 7 然后按下Tab键。

就会在同页面的下方显示一行代码,我们就是在这行代码最后添加参数,达到永久修改网卡名称的效果:

先空格,再输入 net.ifnames=0 biosdevname=0 然后回车。

修改完成

第二种:(系统已经安装好了,怎么修改网卡名称)

首先进入网卡配置文件,先把文件里的名字改过来

vim /etc/sysconfig/network-scripts/ifcfg-eno32

保存退出,再把这个网卡配置文件的名称改掉

cd /etc/sysconfig/network-scripts/

mv ifcfg-eno32 ifcfg-eth0

修改grub配置文件/etc/grub2.cfg,把net.ifnames=0 biosdevname=0参数 加入指定位置

要加的位置 menuentry 下 linux 16 rhgb quiet 之前

vim /etc/default/grub

运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。

reboot 重启

完成

(michael1983 分享)


欢迎关注社区 "Linux"技术主题 ,将会不断更新优质资料、文章。地址:

http://www.talkwithtrend.com/Topic/83


下载 twt 社区客户端 APP


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

*本公众号所发布内容仅代表作者观点,不代表社区立场

继续滑动看下一个

Linux 网卡绑定的相关知识和技巧 | 周末送资料

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存