Centos下实现多网卡绑定

实现多网卡绑定在Centos6和Centos7可采用bonding方式,Centos7上team网络组也可实现,并且功能更强大。

  • Linux bonding 模块提供一种将多个网卡聚合成一块逻辑捆绑网卡的实现方法。 捆绑的网卡拥有多种模式,根据模式的特性,可实现网络负载均衡,网络冗余切换,提高网络吞吐量等功能。

大多流行Linux发行版都已装载bonding模块,及其用户控制工具ifenslave。查询语句:

modinfo bonding


  • “频道绑定”、“以太网绑定”、“端口聚合”、“频道成组”、“NIC 成组”、“链接合并” 等等。这个最初在 Linux 内核中应用的概念泛指“绑定”。Centos7上以网络组代表这个概念的最新应用。网络组依靠teamd模块驱动实现。

检查teamd模块语句:

rpm -q teamd

一、bonding方式

bonding参数介绍

设定bonding 驱动参数值,以配置成需要的所需工作方式。以下并未列出全部参数,更多详见文档

/usr/share/doc/kernel-doc-2.6.32/Documentation/networking/bonding.txt

此文档需要安装kernel-doc rpm包。

1、mode模式设定

指定一种网卡绑定策略。常用模式为0,1,4,6。

balance-rr or 0 

    round-robin,平衡轮循策略。依次在活动的slave上传输数据包。

    次模式提供负载均衡,网络冗余。

active-backup or 1

    主备策略。只有一个slave处于激活工作状态,当且仅当活动的slave失败时,去激活下一个slave工作。为避免交换机产生混乱,绑定网口的MAC地址对外只有一个接口上可见。

    此模式提供网络冗余。

balance-xor or 2

     XOR策略。基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址)% slave数量。其他的传输策略可以通过xmit_hash_policy选项指定。

    此模式提供负载平衡和网络冗余。

broadcast or 3

    广播策略。在所有slave上传输所有数据包。

    此模式提供网络冗余。

802.3ad or 4

    IEEE 802.3ad 链接聚合策略。创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。

      条件1:ethtool支持获取每个slave的速率和双工设定

      条件2:switch(交换机)支持IEEE802.3ad Dynamic link aggregation。多数交换机需要配置启用802.3ad模式。

    此模式可提高网络吞吐量。

balance-tlb or 5

    适应传输负载均衡策略。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

    条件:ethtool支持获取每个slave的速率和双工设定

    此模式提供负载平衡和网络冗余。

balance-alb or 6

    适应负载均衡模式。该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb)。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的目标硬件地址来和本机通信。

    条件1ethtool支持获取每个slave的速率;

      条件2:底层驱动支持设置某个设备的硬件地址。

      此模式支持负载均衡和网络冗余。

需要说明的是:active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。

2、fail_over_mac

指定active-backup模式下bond及slave的MAC地址设定

none or 0

    默认值。激活某一slave时,将所有slave及bond设置为该设备的MAC地址。

active or 1

    bond的MAC地址跟随当前活动slave的MAC地址。在slave失败切换时,bond的MAC地址进行改变,而不是slave。这种模式适合slave设备不能自己更改MAC地址的情况。

follow or 2

    bond的MAC地址进行通常性选择。通常,bond的MAC地址被设定为第一个激活的slave,但其他处于备用状态下的slave不会被设定该MAC地址。

3、miimon

MII 链路检测频率设定,单位为毫秒,默认值为0。

4、primary

设定值为网卡设备名(eth0,eth1)。指定active-backup模式下,只要该slave可用时,总是指定其为活动slave。


配置实例

在目录/etc/sysconfig/network-scripts/,使用配置文件ifcfg-bondN创建bonding组,N为接口序号。

bond配置文件

DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=10.1.252.234
PREFIX=16
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="miimon=100 mode=1 primary=eth1 fail_over_mac=1"

这里指定mode模式为1,即active-backup,监听间隔为100毫秒,主设备为eth1。如果指定primary选项,fail_over_mac值要指定为1。

slave配置文件

DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes

DEVICE=eth2
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes

配置完成后,重启网络服务,注意在Centos6上关掉NetworkManager服务。

service network restart

查看接口状态,slave的MAC地址设为不同地址,bond0跟随活动slave的MAC地址,因为fail_over_mac=1。状态都为up。

bond0可以使用命令ifup bond0/ifdown bond0启用或禁用

blob.png

查看bonding状态

cat /proc/net/bonding/bond0

可以看到模式,主设备信息,当前活动slave,及各slave状态。

blob.png

冗余测试试验

从另外一个主机ping bond0 IP:10.1.252.234。网络连通。

blob.png

刚才查看bond状态,可知活动slave为eth1,现在在虚拟机控制台断掉eth1

bond状态信息中,活动slave已切换为eth2,而且eth1状态为down

blob.png

查看接口MAC,bond0跟随eth2的MAC地址blob.png

网络ping没有问题,此处体现了active-backup模式的冗余功能。

blob.png

现在恢复eth1,

blob.png

网络连通没问题

blob.png

二、网络组方式

网络组的守护进程,teamd,使用libteam控制一个网络组驱动的一个实例,此实例添加硬件设备驱动多个实例来组成网络连接的成组。网络组驱动对内核其他部分呈现一个接口来调用,这个接口一般命名为team0,team1之类。用户可以以JASON格式配置一个网络组实例,配置当中用runner来指定teamd运行的特性,相当于bonding方式中的mode。

主接口和从属接口的默认行为:

  1. 启动主接口不会自动启动端口接口。

  2. 启动端口接口总是会启动主接口。

  3. 停止主接口总是会停止端口接口。

  4. 没有端口的主机可启动静态 IP 连接。

  5. 没有端口的主机在启动 DHCP 连接时会等待端口。

  6. 添加附带载波的端口后,使用 DHCP 连接的主机会等待端口完成连接。

  7. 添加不附带载波的端口后,使用 DHCP 连接的主机会让端口继续等待。

runner可配置成:  

  • broadcast(可将数据传送到所有端口)

  • round-robin(可按顺序将数据传送到所有端口)

  • active-backup(使用一个端口或链接时其他则处于备用状态)

  • loadbalance(使用主动 Tx 负载平衡及基于 BPF 的 Tx 端口选择程序)

  • lacp(采用 802.3ad 链接合并控制协议)

配置实例

使用ifcfg文件配置一个网络组,路径为/etc/sysconfig/network-scripts/ifcfg-team0

配置主接口文件

DEVICE=team0
DEVICETYPE=Team
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.1.252.235
PREFIX=16
TEAM_CONFIG='{"runner": {"name": "activebackup","hwaddr_policy": "by_active"}}'

这里指定运行方式为activebackup,hwaddr_policy相当于bonding中的fail_over_mac参数,指定硬件地址策略为by_active。

配置从属接口文件

ifcfg-tp1

DEVICE=eno33554984
NAME=tp1
DEVICETYPE=TeamPort
ONBOOT=yes
TEAM_MASTER=team0
TEAM_PORT_CONFIG='{"prio": 100}'

ifcfg-tp2

DEVICE=eno50332208
NAME=tp2
DEVICETYPE=TeamPort
ONBOOT=yes
TEAM_MASTER=team0
TEAM_PORT_CONFIG='{"prio": 50}'

这里指定了端口优先权。

~]$ ifup team0    #启动team0主接口,创建守护进程teamd
~]$ teamdctl team0 state    #查看teamd状态

blob.png

blob.png

可以看到主接口已创建,但是从属接口没有加进来。ip命令查看,team0处于down状态。

~]$ ifup tp1
~]$ ifup tp2           #启动从属接口

blob.pngblob.png

可以看到team0 网络组已正常运行。


更多信息查询请参考:rhel7联网指南–网络组






原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/45043