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

(0)
cutemsyucutemsyu
上一篇 2016-09-13 15:10
下一篇 2016-09-13 15:19

相关推荐

  • bash基础特性(一)之命令历史,命令补存,路劲补存,命令行展开,命令执行状态结果和引用

    bash是Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。 Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同…

    2017-09-20
  • Mozart的剑(文本处理工具)——叁剑(grep、正则表达式)

    之前的句子 烟锁池塘柳 炮镇海城楼 因荷而得藕 有杏不需梅 认识于小林寒风的一篇小说《凤山遗梦》 grep grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。模式:由正则表达式字符及文本字符所编写的过滤条件 用法: grep [OPTIO…

    2017-08-03
  • Hadoop hdfs 分布式文件系统

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2015-08-05
  • N28 第三周【2】:用户和组管理

    用户和组管理 前言 Linux用户管理非常关键且重要,Linux的所有进程都是以不同的身份拥有不同的权限来运行和调度资源的。但是我们不用费劲心思去管理,因为系统将用户划分成为了两部分:无所不能的root用户和普通用户。同时呢,又将普通用户分为系统用户和登录用户。对于Linux,他会用UID去快速识别用户身份,对于我们,可以用用户名去识别。 接下来介绍一下用户…

    Linux干货 2017-12-19
  • Python基础篇之过程型程序设计

    一、Python过程型程序设计 面向过程 以指令为中心,由指令处理数据 如何组织代码解码问题 面向对象 以数据为中心,所有的处理代码都围绕数据展开 如何设计数据结构组织数据,并提供对此类数据所允许处理操作 简单方法: 1)、编译安装新版本至某特定路径 # yum install readline-devel # tar xf Python-2.7.6.tar…

    2018-01-11
  • linux一周学习总结

          对于linux,之前也完全没有接触过,完全零基础小白。来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总结。 一、关于SHELL Shell     查询当前系统使用了哪个shell   &n…

    2017-07-15