对服务器来说,将多个网卡绑定(链路聚合)是一个很常见的需求,Linux在比较早期的版本kernel里就支持bonding这个功能,通过bonding可以将多个以太网口的网络连接聚合起来,一方面可以提供更大的网络带宽,另一方面还可以提供更好的可靠性和端口冗余保障。
Bonding的配置有7种模式(从bond0到bond6),分别提供不同的收发包方式和端口冗余机制,对上联交换机配置和网卡也有不同的要求,需要根据不同的应用场景来选择使用。
常用的有三种:
mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。
mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。
mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。
Bonding接口的故障切换机制有两种,一种称为MII monitor,也就是只监控端口的状态,另一种是ARP monitor,也就是通过发送arp的方式来测试网络连接状态。MII monitor方式比较简单,但是存在状态检测不准确的问题,比如对于光口网卡来说,如果收发的两条光纤出现其中一条中断的情况,对于收光正常,发光断掉的网卡来说,就不能检测到链路状态的变化了。ARP monitor的方式则采用发送arp query看有没有收到arp reply的方式来测试IP连通性,还可以配置多个Target来进行测试,相比MII monitor来说检测结果更准确。
在rhel6/CentOS6中使用的是bonding技术双网卡绑定技术,而在rhel7.3中使用了teaming技术,其实在rhel7.3中双网卡绑定既能使用teaming也可以使用bonding,这里推荐使用teaming技术,方便与查看和监控。
Teaming功能主要由kernel里的team driver、用来作为通讯接口的libteam lib和userspace的teamd 三部分组成,teaming也支持不同的工作模式,相比bonding 来说少了balance-xor和balance-alb这两种模式的支持,其中的balance-xor完全可以通过lacp代替,另外一种balance-alb功能据说以后teaming也会支持。
broadcast (data is transmitted over all ports)
roundrobin (data is transmitted over all ports in turn)
activebackup (one port or link is used while others are kept as a backup)
loadbalance (with active Tx load balancing and BPF-based Tx port selectors)
lacp (implements the 802.3ad Link Aggregation Control Protocol)
实质上teaming的目的就是要把网卡绑定的功能从kernel里搬出来,把这些功能放到userspace来解决,保持kernel的简洁,让它只做kernel应该做的事情。
在本文中介绍rhel7.3两种最常见的双网卡绑定模式:
(1) activebackup - 主备模式
一个网卡处于活动状态,另一个处于备份状态,所有流量都在主链路上处理,当活动网卡down掉时,启用备份网卡。
(2) roundrobin - 轮询模式
所有链路处于负载均衡状态,这种模式的特点增加了带宽,同时支持容错能力。
下面以activebackup - 主备模式为例来做下示例配置:
1、进入系统,查看服务器网卡配置情况。
如上图所示,共有ens3及ens8两块网卡共4个端口。决定为两个网段分别配置双网卡绑定,业务网绑定ens3f0和ens8f0两个端口,私网绑定ens3f1和ens8f1两个端口。
2、我们可以使用nmcli命令进行网卡绑定,具体命令如下:
配置业务网主接口team0,设置模式为activebackup
nmcli con add type team con-name team0 ifname team0 config‘{“runner”: {“name”: ”activebackup”}}’
设置IP地址,子网掩码,网关
nmcli con mod team0 ipv4.addresses 11.11.205.145/28ipv4.gateway 11.11.205.158 ipv4.method manual connectio.autoconnect yes
添加绑定到team0的端口ens3f0
nmcli con add type team-slave con-name team0-port1 ifname ens3f0 master team0
添加绑定到team0的端口ens8f0
nmcli con add type team-slave con-name team0-port2 ifname ens8f0 master team0
重新载入连接配置
nmcli con reload
启动team0
nmcli con up team0
3、查看状态,使用teamdctl命令进行验证
4、检测发现状态都正常。
5、如果需要尝试换成roundrobin模式,则可以进入team0和team1的配置文件,修改模式为roundrobin,其他配置不变。
提示:在做网卡绑定的时候,如果发现物理网卡总是无法绑定到team0,请检查该物理网卡是否处于up状态。