linux

Centos7 双网卡绑定(bond0) 操作指南

发布时间:7年前热度: 5103 ℃评论数:

方法一: 
1、ifconfig列出两块网卡。 
[root@localhost ~]# ifconfig 
ens2f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500 
       ether a0:36:9f:f2:f8:c10  txqueuelen 1000  (Ethernet) 
       RX packets 3441699  bytes 61664287917 (57.4 GiB) 
       RX errors 0  dropped 0  overruns 0  frame 0 
       TX packets 2714394  bytes 150474878 (143.5 MiB) 
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
ens2f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500 
       ether a0:36:9f:f2:f8:c11  txqueuelen 1000  (Ethernet) 
       RX packets 0  bytes 0 (0.0 B) 
       RX errors 0  dropped 0  overruns 0  frame 0 
       TX packets 1993  bytes 141601 (138.2 KiB) 
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536 
       inet 127.0.0.1  netmask 255.0.0.0 
       inet6 ::1  prefixlen 128  scopeid 0x10<host> 
       loop  txqueuelen 0  (Local Loopback) 
       RX packets 5  bytes 505 (505.0 B) 
       RX errors 0  dropped 0  overruns 0  frame 0 
       TX packets 5  bytes 505 (505.0 B) 
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 
2、我们的目标,绑定ens2f0和ens2f0两块网卡作为公网网卡,ip设置为192.168.0.51 

3、首先备份两块网卡的配置文件 
[root@localhost ~]#mv /etc/sysconfig/network-scripts/ifcfge-ens2f0 /etc/sysconfig/bak_network-scripts/ifcfg-ens2f0_bak 
[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens2f1 /etc/sysconfig/bak_network-scripts/ifcfg-ens2f1_bak 
4、重新创建ifcfg-ens2f0网卡配置文件 
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens2f0 
DEVICE=ens2f0 
USERCTL=no 
ONBOOT=yes 
SLAVE=yes 
MASTER=bond0 
BOOTPROTO=none
 
5、重建ens2f1网卡配置文件 
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens2f1 
DEVICE=eth1 
USERCTL=no 
ONBOOT=yes 
SLAVE=yes 
MASTER=bond0 
BOOTPROTO=none
 
6、创建bond0虚拟网卡配置文件 
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0 
IPADDR=192.168.0.51 
NETMASK=255.255.255.0 
USERCTL=no 
BOOTPROTO=none 
ONBOOT=yes 
GATEWAY=192.168.0.1 
IPV6INIT=no 
TYPE=Ethernet 
DNS1=192.168.0.1
 
7、修改配置文件/etc/modprobe.d/dist.conf 
[root@localhost ~]# vi dist.conf 
最后新增如下两行: 
alias bond0 bonding 
options bond0 miimon=100 mode=6
 
mode=6表示做负载均衡(CentOS双网卡绑定的模式一共有7种(即mode=0、1、2、3、4、5、6): 


0   (balance-rr模式)网卡的负载均衡模式。特点:(1)所有链 路处于负载均衡状态,轮询方式往每条链路发送报文,基于per packet方式发送。服务上ping 一个相同地址:1.1.1.1 双网卡的两个网卡都有流量发出。负载到两条链路上,说明是基于per packet方式 ,进行轮询发送。(2)这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。 


 1   (active-backup模式)网卡的容错模式。 特点:一个端口处于主状态 ,一个处于从状态,所有流量都在主链路上处理,从不会有任何流量。当主端口down掉时,从端口接手主状态。 
 2   (balance-xor模式)需要交换机支持。特点:该模式将限定 流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有 流量是通过单个路由器(比如 “网关”型网络配置,只有一个网关时,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。),那该模式就不 是最好的选择。和balance-rr一样,交换机端口需要能配置为“port channel”。这模式是通过源和目标mac做hash因子来做xor算法来选路的。 
 3   (broadcast模式)。特点:这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,我们感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。 
 4   (IEEE 802.3ad动态链路聚合模式)需要交换机支持。特 点:802.3ad模式是IEEE标准,因此所有实现了802.3ad的对端都可以很好的互操作。802.3ad 协议包括聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某些设备才能使用802.3ad)。802.3ad标准也要求帧按顺序 (一定程度上)传递,因此通常单个连接不会看到包的乱序。802.3ad也有些缺点:标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和 除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。此外,linux bonding的802.3ad实现通过对端来分发流量(通过MAC地址的XOR值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用 同一个设备。进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端802.3ad实现里的均衡策略。在“本地”型配置下,路两将通过 bond里的设备进行分发。 
 5   自适应传输负载均衡模式。特 点:balance-tlb模式通过对端均衡外出(outgoing)流量。既然它是根据MAC地址进行均衡,在“网关”型配置(如上文所述)下,该模式 会通过单个设备来发送所有流量,然而,在“本地”型网络配置下,该模式以相对智能的方式(不是balance-xor或802.3ad模式里提及的XOR 方式)来均衡多个本地网络对端,因此那些数字不幸的MAC地址(比如XOR得到同样值)不会聚集到同一个接口上。 
不像802.3ad,该模式的接口可以有不同的速率,而且不需要特别的交换机配置。不利的一面在于,该模式下所有进入的(incoming)流量会到达同一个接口;该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。 
 6   网卡虚拟化方式。特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件 地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。所有端口都会收到对端的arp请求报文,回复arp 回时,bond驱动模块会截获所发的arp回复报文,根据算法算到相应端口,这时会把arp回复报文的源mac,send源mac都改成相应端口mac。 从抓包情况分析回复报文是第一个从端口1发,第二个从端口2发。以此类推。 

具体选择哪种要根据自己需要和交换机情况定,一般Mode=0和Mode=1比较常见;Mode=6负载均衡方式,两块网卡都工作,不需要交换机支持,也常用。)
 

8、加载bond0模块 
[root@localhost ~]# modprobe bonding  [root@localhost ~]# lsmod |grep bond 
bonding               136705  0
   
9、重启网络服务 
service network stop 
10、最好也重启下sshd服务 
service sshd restart 
12、查看bond0状态: 
[root@localhost ~]# cat /proc/net/bonding/bond0 

Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) 

Bonding Mode: adaptive load balancing 
Primary Slave: None 
Currently Active Slave: ens2f0 
MII Status: up 
MII Polling Interval (ms): 100 
Up Delay (ms): 0 
Down Delay (ms): 0 

Slave Interface: ens2f0 
MII Status: up 
Speed: 10000 Mbps 
Duplex: full 
Link Failure Count: 0 
Permanent HW addr: a0:36:9f:f2:f8:c10 
Slave queue ID: 0 

Slave Interface: ens2f1 
MII Status: up 
Speed: 10000 Mbps 
Duplex: full 
Link Failure Count: 0 
Permanent HW addr: a0:36:9f:f2:f8:c11 
Slave queue ID: 0
 

备注: 
updelay的意思就是说在一个网络接口重新up起来的延迟
 
Delay before considering link up, in milliseconds 

downdelay的意思就是说认为此网络接口down掉之前的延迟 
delay before considering link down, in millisecondsmiimon=100”,表示链路检测的时间间隔,单位是毫秒。
 

Bond默认只能做网口MII监测不能做链路监测(链路是指本机到网关的路径),也就是只能监测网口是否连接(网口是否亮);当然Bond也支持ARP协议的链路监测,但是ARP链路监测在一些场景下,太消耗资源,得不偿失。 
方法二: 
根据官方文档Red_Hat_Enterprise_Linux-7-Networking_Guide-en-US用nmcli做起来也是相当容易的;步骤如下: 
1、查看目前网卡的名称和状态。 
#nmcli device status 
DEVICE       TYPE      STATE         CONNECTION   
ens2f0  ethernet  disconnected  --         
ens2f1  ethernet  disconnected  --         
lo           loopback  unmanaged     -- 
2、配置网卡bond0和模式主备 
 nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup 

Connection 'bond0' (37a78146-9489-4686-bc62-227cb3908292) successfully added 
3、将物理网卡绑定到bond0 
# nmcli connection add type bond-slave ifname ens2f1 master bond0 

Connection 'bond-slave-ens2f1' (3f07e767-24ea-4e7e-a9f7-61efa9aa0664) successfully added. 
# nmcli connection add type bond-slave ifname ens2f0 master bond0 

Connection 'bond-slave-ens2f0' (8149c24f-4926-4531-844f-36a526e1baec) successfully added. 
4、启用绑定的物理网卡 
# nmcli connection up bond-slave-ens2f1 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4) 
# nmcli connection up bond-slave-ens2f0 

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5) 
5、启用bond网卡 
#nmcli connection up bond0 

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
 


Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) 
现在网卡已经绑好启用 

6、查看bond0状态: 
# cat /proc/net/bonding/bond0

error

手机扫码访问