网卡聚合 Bonding
网卡 Bond 是将两个或者更多的物理网卡绑定成一个虚拟网卡,使其共用一个 IP 地址,实现本地网卡的 负载均衡 、冗余、增加网络带宽,保证当一个网卡坏掉时,不会影响业务。更多情况下,使用的是网卡 Bond 的冗余模式,此时需要注意绑定的网卡需要和不同的交换机连接,提高可靠性。
Kernels 2.4.12 及以后的版本都自带 bonding 模块,可以通过以下命令确定系统内核是否支持 bonding ,这里我以 Vmware 环境中搭建的 CentOS 7.6 为例:
|
|
网卡 bond 的 7 种模式
目前网卡绑定共有七种模式(0~6):bond 0、bond 1、bond 2、bond 3、bond 4、bond 5、bond 7。
- mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)
- 特点:传输数据包顺序是依次传输,即第 1 个包走 eth0,下一个包就走 eth1 直到最后一个传输完毕;此模式提供负载平衡和容错能力。
- 缺点:因为数据包从不同的接口发出,客户端很有可能会出现数据包无序到达的问题导致重新发送,降低网络的吞吐量。
- mod=1,即: (active-backup) Active-backup policy(主-备份策略)
- 特点:同一时间只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。提供了容错能力;bond 的 MAC 地址是唯一的,以避免 switch(交换机)发生混乱;
- 缺点:资源利用率较低,在有 N 个网络接口的情况下,资源利用率为 1/N。
- mod=2,即:(balance-xor) XOR policy(平衡策略)
- 特点:基于指定的传输 HASH 策略传输数据包,提供负载平衡和容错能力
- 策略:(源 MAC 地址 XOR 目标 MAC 地址) % slave 数量,可通过 xmit_hash_policy 选项指定传输策略。
- mod=3,即:broadcast(广播策略)
- 特点:在所有的网络接口上传输每个数据包,提供了容错能力。
- 注意:此模式适用于金融等其他对网络可靠性要求较高的场景。
- mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)
- 特点:创建一个聚合组,它们共享同样的速率和双工设定。外出流量的 slave 选举是基于传输 hash 策略,该策略可以通过 xmit_hash_policy 选项从缺省的 XOR 策略改变到其他策略。
- 条件:
- ethtool 支持获取每个 slave 的速率和双工设定
- switch(交换机)支持 IEEE 802.3ad Dynamic link aggregation 协议
- 需要对端 switch 做端口聚合配置
- mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)
- 特点:不需要任何特别的 switch(交换机)支持的通道 bonding,动态的根据当前负载分配外出流量,如果正在接受数据的 slave 出故障了,另一个 slave 接管失败的 slave 的 MAC 地址。并行发送,无法并行接收。
- 条件:ethtool 支持获取每个 slave 的速率
- mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)
- 特点:mod 5 的基础上增加了对 IPV4 流量的接收负载均衡(receive load balance, 简称 rlb),而且不需要任何 switch(交换机)的支持。可并行发送,并行接收数据包。
- 条件:
- ethtool 支持获取每个 slave 的速率;
- 底层驱动支持设置设备的硬件地址,保证每个 bond 中的 slave 都有一个唯一的硬件地址。
配置 bond
如下所示,我电脑目前有三张网卡,现需要将网卡 ens37、ens38 绑定为虚拟网卡 bond 0
|
|
关闭 NetworkManager 服务
生产环境下 我们一般都是手动配置网络,以静态地址为主不需要系统的网络管理工具,因此我们就会将它禁用掉,命令如下:
- network 服务主要管理网卡的配置
- NetworkManager 用于管理系统网络连接、允许用户管理网络连接的客户端程序
|
|
载入 bond 模块
|
|
修改网卡配置文件
为需要制作 bond 的网卡添加 MASTER、SLAVE 配置项,删除其他多余配置信息。 注:操作前不要忘记为虚拟机打快照或备份原有网卡文件
|
|
新建 bond 配置文件
在 /etc/sysconfig/network-scripts/ 目录下新建 bond 配置文件,设置 bond 网卡的 IP 地址
|
|
修改 modprobe.d 下的 bonding 文件
若在 /etc/modprobe.d/ 目录下没有 bonding.conf 文件,需要手动新建,输入以下内容:
|
|
重启网络使配置生效
此时可以看到网卡 ens37、ens38 上 master 为 bond 0,表示配置成功。注意做了 bonding 的这两块网卡是使用同一个 MAC 地址,避免对端交换机发生混乱。
|
|
测试 bond
因为上述配置 mode=1 主备模式,可以在 ping 百度过程中然后断开一个网卡,此时 ping 不会中断。
|
|
参考资料
Linked Mentions
-
No backlinks found.