实现多网卡绑定在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的唯一硬件地址,从而使得不同的对端使用不同的目标硬件地址来和本机通信。
条件1:ethtool支持获取每个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启用或禁用
查看bonding状态
cat /proc/net/bonding/bond0
可以看到模式,主设备信息,当前活动slave,及各slave状态。
冗余测试试验
从另外一个主机ping bond0 IP:10.1.252.234。网络连通。
刚才查看bond状态,可知活动slave为eth1,现在在虚拟机控制台断掉eth1
bond状态信息中,活动slave已切换为eth2,而且eth1状态为down
查看接口MAC,bond0跟随eth2的MAC地址
网络ping没有问题,此处体现了active-backup模式的冗余功能。
现在恢复eth1,
网络连通没问题
二、网络组方式
网络组的守护进程,teamd,使用libteam控制一个网络组驱动的一个实例,此实例添加硬件设备驱动多个实例来组成网络连接的成组。网络组驱动对内核其他部分呈现一个接口来调用,这个接口一般命名为team0,team1之类。用户可以以JASON格式配置一个网络组实例,配置当中用runner来指定teamd运行的特性,相当于bonding方式中的mode。
主接口和从属接口的默认行为:
-
启动主接口不会自动启动端口接口。
-
启动端口接口总是会启动主接口。
-
停止主接口总是会停止端口接口。
-
没有端口的主机可启动静态
IP
连接。 -
没有端口的主机在启动
DHCP
连接时会等待端口。 -
添加附带载波的端口后,使用
DHCP
连接的主机会等待端口完成连接。 -
添加不附带载波的端口后,使用
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状态
可以看到主接口已创建,但是从属接口没有加进来。ip命令查看,team0处于down状态。
~]$ ifup tp1 ~]$ ifup tp2 #启动从属接口
可以看到team0 网络组已正常运行。
更多信息查询请参考:rhel7联网指南–网络组
原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/45043