ITPub博客

首页 > 数据库 > 数据库开发技术 > 运维基础之必会的网卡绑定方法

运维基础之必会的网卡绑定方法

原创 数据库开发技术 作者:步步运维步步坑 时间:2024-03-25 11:33:00 0 删除 编辑

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

常用的有三种:

  1. Mode 0:平衡负载模式,具备自动备援功能,但需要交换机的支持和配置。

  2. Mode 1:主备模式,一条线路出现故障时,其他线路会自动接管。

  3. Mode 6:平衡负载模式,具备自动备援功能,无需交换机的支持和配置。

说明:

对于 Mode 0 的负载均衡,配置 optionsbond0 miimon=100 mode=0 是必要的,但要实现真正的负载均衡,需要对连接到网卡的交换机进行特殊配置。这是因为在 Mode 0 下,所有绑定在 bond0 上的网卡都会被修改为相同的 MAC 地址。如果这些网卡都连接到同一个交换机,那么交换机的 ARP 表中将会出现同一 MAC 地址对应多个端口的情况。交换机将不知道将数据包转发到哪个端口,从而导致问题。解决这个问题的方法是,在连接到交换机的端口上进行聚合配置,使得多个端口共享同一个 MAC 地址,以此解决交换机对 MAC 地址的混淆。另外,可以将两个网卡连接到不同的交换机来避免这个问题。

对于 Mode 6,由于在此模式下,绑定的两个网卡使用不同的 MAC 地址,因此无需对交换机进行特殊配置。


七种bond模式说明:

mod=0: (balance-rr)Round-robin policy(平衡抡循环策略)

特点: 数据包按顺序依次通过各接口传输(例如:第一个数据包通过eth0,下一个通过eth1,以此类推,直到最后一个数据包),此模式提供负载平衡和容错能力。然而,由于同一连接或会话的数据包可能经过不同的接口传输,因此在客户端端可能会出现数据包到达的无序性问题。当数据包无序到达时,客户端可能需要重新请求发送数据包,导致网络吞吐量下降


mod=1 :(active-backup)Active-backup policy(主-备份策略)

特点:这种模式下只有一个设备是活动的,当活动设备宕掉时,另一个备用设备会立即转换为主设备。外部视角下,这个绑定的MAC地址是唯一的,以避免交换机混乱。该模式仅提供容错能力。这种算法的优点在于它可以提供高网络连接的可用性,但是它的资源利用率较低,因为只有一个接口处于活动状态。对于具有 N 个网络接口的情况,资源利用率为1/N。


mod=2: (balance-xor)XOR policy(平衡策略)

特点:在这种模式下,数据包的传输路径是基于指定的传输HASH策略确定的。默认策略是根据(源MAC地址 XOR 目标MAC地址)取模 slave 数量。除了默认策略外,还可以通过 xmit_hash_policy 选项指定其他传输策略。这种模式不仅提供了负载平衡,还具备容错能力。


mod=3:broadcast(广播策略)

特点:在每个slave接口上传输每个数据包,此模式具备容错能力


mod=4:(802.3ad) IEEE 802.3ad Dynamic link aggregation(动态链接聚合)

特点:创建一个聚合组,这些组成员共享相同的速率和双工设置。根据802.3ad规范,多个从属设备在同一个激活的聚合体下工作。外发流量的从属设备的选择是基于传输哈希策略,可以通过 xmit_hash_policy 选项从默认的XOR策略更改为其他策略。需要注意的是,并非所有的传输策略都适用于802.3ad,特别是考虑到802.3ad标准第43.2.4章节提到的数据包乱序问题。不同的实现可能对这种适用性有不同的理解。

必要条件:

  1. 确保 ethtool 支持获取每个从属设备的速率和双工设置。

  2. 确保交换机支持 IEEE 802.3ad 动态链路聚合。

  3. 请注意,大多数交换机在支持 802.3ad 模式之前需要进行特定的配置



mod=5:(balance-tlb)Adaptive transmit load balancing(适配器传输负载均衡)

特点:不需要任何特别的交换机支持通道绑定。在每个从属设备上,根据当前的负载(基于速度计算)分配外发流量。如果正在接收数据的从属设备发生故障,另一个从属设备将接管失败的从属设备的MAC地址。

该模式的必要条件:ethtool支持获取每个slave的速率


mod=6,即:(balance-alb)Adaptive load balancing(适配器适应性负载均衡)

特点:这种模式包含了 balance-tlb 模式,并且加上了针对 IPv4 流量的接收负载均衡(RLB),而且不需要任何交换机的支持。接收负载均衡是通过 ARP 协商实现的。Bonding 驱动截获本机发送的 ARP 应答,并将源硬件地址改写为 Bond 中某个从属设备的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

来自服务器端的接收流量也会被均衡。当本机发送 ARP 请求时,Bonding 驱动将对端的 IP 信息从 ARP 包中复制并保存下来。当 ARP 应答从对端到达时,Bonding 驱动将其硬件地址提取出来,并发起一个 ARP 应答给 Bond 中的某个从属设备。使用 ARP 协商进行负载均衡的一个问题是:每次广播 ARP 请求时都会使用 Bond 的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的从属设备。这个问题可以通过给所有的对端发送更新(ARP 应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的从属设备加入到 Bond 中时,或者某个未激活的从属设备重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(Round-robin)在 Bond 中最高速的从属设备上。当某个链路被重新接上,或者一个新的从属设备加入到 Bond 中时,接收流量在所有当前激活的从属设备中全部重新分配,通过使用指定的 MAC 地址给每个客户端发起 ARP 应答。updelay 参数必须设置为某个大于等于交换机转发延时的值,从而保证发往对端的 ARP 应答不会被交换机阻截

必要条件:

  1. 确保 ethtool 能够获取每个从属设备的速率。

  2. 底层驱动支持设置某个设备的硬件地址,以确保始终有一个从属设备(curr_active_slave)使用 Bond 的硬件地址,并确保每个 Bond 中的从属设备都有一个唯一的硬件地址。如果 curr_active_slave 出现故障,新选出的 curr_active_slave 将接管其硬件地址。



比较模式 6 和模式 0 的区别

在模式 6 中,首先会将 eth0 的流量占满,然后才会开始占用 eth1,以此类推直到 ethX;而在模式 0 中,会发现两个接口的流量都相对稳定,基本上拥有相同的带宽。在模式 6 中,第一个接口的流量往往很高,而第二个接口只占用了一小部分流量


Linux网口绑定:

通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的。前提约定:

2个物理网口分别是:eth0,eth1
绑定后的虚拟口是:bond0
服务器IP是:172.16.0.1

第一步,配置设定文件:

[root@yfq ~]# vi  /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.16.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
[root@yfq ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@yfq ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes

第二步,修改modprobe相关设定文件,并加载bonding**模块:**

1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf

[root@yfq ~]# vi /etc/modprobe.d/bonding.conf
alias bond0 bonding
options bonding mode=0 miimon=200

2.加载模块(重启系统后就不用手动再加载了)

[root@yfq ~]# modprobe bonding

3.确认模块是否加载成功:

[root@yfq ~]# lsmod | grep bonding
bonding 100065 0

第三步,重启一下网络,然后确认一下状况:

[root@db01 ~]# service network restart
Shutting down interface bond0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface bond0: [ OK ]
[root@db01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
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: 40:f2:e9:db:c9:c2
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 40:f2:e9:db:c9:c3
[root@db01 ~]# ifconfig | grep HWaddr
bond0     Link encap:Ethernet HWaddr 32:F1:E2:DC:C2:C3
eth0     Link encap:Ethernet HWaddr 32:F1:E2:DC:C2:C3
eth1     Link encap:Ethernet HWaddr 32:F1:E2:DC:C2:C3

从上面的确认信息中,我们可以看到3个重要信息:

1.现在的bonding模式是active-backup

2.现在Active状态的网口是eth0

3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

第四步,系统启动自动绑定、增加默认网关:

[root@yfq ~]# vi /etc/rc.d/rc.local
#追加
ifenslave bond0 eth0 eth1
route add default gw 172.16.0.1

#如可上网就不用增加路由,0.1地址按环境修改.

注意:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,

多网口绑定:

那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

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

正确的设置方法有2种:

第一种,你可以看到,这种方式的话,多个bond**口的模式就只能设成相同的了:**

<span style=”color:#000000;”>alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1
</span>

第二种,这种方式,不同的bond口的mode可以设成不一样:

<span style=”color:#000000;”>alias bond0 bonding
options bond0 miimon=100 mode=1
install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0
</span>

仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,可以参照同样的办法


添加博主

微信号|yfq940-

原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51706