日常工作和生产环境中的x86服务器均采用双网卡接入方式。 无论是出于减少网络带宽、冗余、还是高可用性的考虑,双网卡绑定都能带来很多好处。 网卡是将两张网卡虚拟成一张具有相同IP地址的网卡,可以看成是一个独立的以太网设备。
正常情况下,网卡只接收目的MAC地址是自己MAC的以太网帧。 然而,模式下的两个网卡运行在混杂模式下,会接受所有以太网帧,并在驱动程序中将两个网卡的MAC地址更改为相同,以便它们可以接收和处理特定的MAC数据帧。
日常工作中使用的双网卡绑定模式主要有A/S主备模式、AA静态聚合模式、AA802.3ad动态聚合模式。 下面将详细分析它们的特点和适用场景。
1、三种绑定模式讨论
(1). A/S主备模式
顾名思义,主备模式下只有一台网络设备处于活动状态。 当主网卡宕机时,备用网卡将切换为主设备。 这种模式容错能力比较高,而且mac地址对交换机等设备可见且唯一,资源利用率不高,也不能满足高带宽要求。
主备模式的实现原理是将两个绑定的从网口的MAC地址改为虚拟网卡的MAC地址,虚拟网卡的MAC地址为主网口的MAC地址债券创建并启动后。 示意图如下。
当主网卡出现故障时,Bond会切换到备用网口。 切换过程中,下层应用不会受到影响,也不会受到影响。 因为bond驱动会接管下层应用的数据包,缓存起来,等待备份网卡上去才通过。 备用网卡已发出。 而且缓冲区容量有限,如果切换时间过长,会导致缓冲区溢出和丢包。
主备模式的容错能力决定了这些网卡绑定方式适用于对网络链路带宽不是很敏感、冗余度要求较高的场景,比如部署应用的机器。
(2)。 AA静态聚合绑定方式
AA静态聚合绑定模式,即协程模式,待绑定的两个网卡的数据传输是按顺序进行的,第一个包去网卡一,第二个包去网卡二,第三个包进入网卡三,依此类推。 在这种模式下,因为所有绑定的网卡的IP都变成了同一个MAC地址。 这时,当交换机收到发送到该MAC地址的数据包时,它不会知道从相应的端口转发数据。 为了解决交换机的这个问题,交换机应该进行端口绑定,将数据发送到逻辑聚合端口,然后通过一个聚合端口转发来自多个端口的数据。 这种绑定方式在网络压力比较大的情况下,性能不会有明显的提升,因为一个连接或者会话的数据包如果从不同的发出,途中会经过不同的链路,这对客户端来说是非常困难的边。 可能存在数据包乱序到达的问题,乱序到达的数据包需要重新发送物理网卡mac怎么修改,这样网络的吞吐量就会增加。 而且交换机侧需要设置为(LAG)组,由于是静态设置,所以所有链路都不能出现故障。 一旦出现故障,就会导致网络故障。 因此静态聚合模式似乎也会减少带宽并且不提供容错功能。
因此,这种绑定方式适合网络压力不是很大的场景。 日常工作中,通常应用较少,主要用在ESXI主机上。 主要原因是ESXI主机流量要求较高,且不支持LACP合约。
(3)。 AA动态聚合绑定方式
动态聚合绑定方式,即802.3ad动态容错,与802.3ad中的SLB绑定方式基本相同,并且要求交换机支持802.3ad中的链路聚合控制契约(LACP)。 动态聚合方式可以增加网络带宽。 并提供容错能力。 与之前的静态AA模式不同,动态聚合模式会通过查询的方式检查LAG组是否加入。 如果加入物理网卡mac怎么修改,则开启LACP合约,如果不加入,则跳过该合约。 如果某个连接断开,它将手动脱离 LACP 控制,不会影响其他链路。 因此,动态聚合模式具有较高的容错能力。 同时,动态聚合模式下所有流量的分配都是基于哈希算法的。 理论上来说,两台不同PC的网络链路会通过不同的网络连接来传输通信帧,因此总带宽增加了一倍,而实际情况并不会有这么大的提升,而这种模式还是可以带来可观的带宽提升和更好的容错能力。 这种绑定关系适合高容错、高带宽的场景,比如部署数据库。
二。 网卡绑定的实现(一). Linux下网卡绑定 1、在/etc//-/下创建网卡绑定配置文件ifcfg-bond1
参数值可以是dhcp,也可以是none。 对应DHCP手动获取IP地址并分配静态IP地址,行业标准通常设置为none来分配静态IP。
该参数值表示将手动启动并初始化虚拟设备和绑定的化学设备
TYPE参数值代表网络类型,不仅是默认的以太网,还可以是网桥等类型
绑定参数之间的主要区别在于绑定模式。 业界常用的三种模式是:
mode=0对应前面介绍的静态AA模式
Mode=1对应前面介绍的寻址AS模式
mode=4对应前面介绍的动态LACP模式
Miion参数表示监控网络链路的频率,单位为微秒,行业标准为100纳秒
该参数定义了传输帧的分配策略。 +4的值可以产生端口到端口的流量,负载变得更加均衡。 只需要在LACP模式下配置即可
2、更改/etc//-/下对应网卡的配置文件
修改虚拟绑定组对应的网卡参数如下
3.更改/etc/.d/
添加别名bond0
声明bond0设备使用驱动配置
4.重启网络服务生效
(2)。 绑定下一张网卡
Linux下的网卡绑定方法与Linux下的长治略有不同。 Intel网卡和日常工作中主要使用的网卡都提供了双网卡绑定配置的图形化工具。
1.创建网卡组
2. 选择绑定方式
适配器容错是AS主备绑定模式,通过主备适配器的切换提供冗余
静态链路聚合为AA静态聚合模式
.3ad是LACP动态聚合模式
3、配置网卡组IP等参数
三.手动网卡绑定搜索
日常工作中使用绑定脚本进行Linux网卡绑定,根据不同的生产用途手动写入参数,需要自动选择绑定为网卡组的网卡号,并根据网卡号型号上网卡型号、插口、操作系统版本以及内核识别顺序不同。 例如,模型 A 可以将 eth0 和 eth2 绑定为 bond0,而模型 B 可以将 eth1 和 eth3 绑定为 bond0。 本来我们的想法是记录常用网卡型号的绑定对应关系,在Linux操作系统安装时读取记录的配置文件,找到对应型号的绑定关系。 并且在实际操作过程中发现,两台不同的主机,即使是同一型号、同一位置的网卡,也会因为识别顺序的问题而出现编号不同的情况。 给网卡绑定带来麻烦。
如果由于网卡故障而更换了另一台主机的网卡,则操作系统中该网卡的标识号往往会与原来的不同,这会给网络配置和日常运维带来麻烦。 因此,为了解决以上两个问题,引用udev的相关函数。
四。 udev绑定及其在手动网卡绑定中的应用
(1). UDEV简介
udev是.6内核中的一个函数,它取代了原来的devfs,成为当前Linux默认的设备管理工具。 udev作为守护进程运行,通过监听内核发送的消息来管理/dev目录下的设备文件。
udev可以通过自定义的规则文件灵活地构成具有很强指示性的设备文件名,如/dev/、/dev/等,并根据一定的条件设置设备文件权限和设备文件所有者/组。
(2).UDEV简单规则
生产环境默认形成网卡设备文件的规则如下:
=="net",=="添加",=="?",ATTR{}=="e8:39:35:0e:dd:ee",ATTR{type}=="1",=="以太”,
这条规则中,,,, ATTR{}, ATTR{type},都是匹配键,即创建这条规则的条件,NAME是形参键,即匹配规则后形成的结果为创建的。
该规则的意思是:如果现有设备的子系统为net,但MAC地址为“e8:39:35:0e:dd:ee”,则为该设备生成一个名为eth0的设备文件。
上面提到,这些规则有一个问题,就是当网卡出现故障需要更换时,网卡可能会因为网卡的MAC地址发生变化而难以识别,但如果/etc/udev /rules.d /70--net.rules的匹配信息由网卡的MAC地址改为网卡的PCI对应的busid,主机的PCI的busid由主机的型号,不会因为硬件更换故障而改变,所以没有网卡或者更换PCI显卡,则无法匹配规则。
首先需要通过lspci –m –D|grep –找到PCI的busid,它代表网卡设备。
查询结果第一列是主机PCI的busid。
之后,更改70--net.rules的内容。 为了让大家清楚地看到使用新规则后的变化,本文将网卡名称改为test0和test1。 规则变更如下:
前面的规则中使用了一个参数,该参数表示网卡的单个父设备的名称,udev会在/sys空间中沿着网卡的绝对路径搜索父设备的名称,直到匹配为止设置的设备名称。 Host PCI的busid是网卡上层父设备的名称,相当于以Host PCI的busid作为匹配条件。
更改规则后需要重启主机,然后使用-a命令查看新策略下的网卡名称,在/sys/class/net/目录下会生成两个新的设备文件。 下面是使用新政前后-a和/sys/class/net/目录的结果对比:
使用前:
使用后:
(3)。 实际应用
首先收集常见型号的busid和eth网卡号的对应关系,然后编译对应型号的70--net.rules规则,然后在系统初始配置阶段写入到系统的规则文件中操作系统。 这样就将网卡的序列号与卡槽的位置绑定起来,解决了更换机器网卡后网卡序列号发生变化的问题。 另外,由于卡槽的位置与网卡的序列号绑定,因此可以确定同一型号的bond0和bond1网卡组的网卡序列号。 绑定过程不需要人工识别,可以根据之前的记录进行手动绑定,提高操作系统部署的速度,减少错误。
来自社区“平台生活”专栏: