Linux 双网卡绑定
一般来讲,生产环境必须提供7×24小时的网络传输服务。借助于网卡绑定技术,不仅可以提高网络传输速度,更重要的是,还可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。假设我们对两块网卡实施了绑定技术,这样在正常工作中它们会共同传输数据,使得网络传输的速度变得更快;而且即使有一块网卡突然出现了故障,另外一块网卡便会立即自动顶替上去,保证数据传输不会中断。
下面我会使用两种方案来完成网双卡绑定 一种是传统的配置文件修改方案。
主要常用的三种模式
- mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。
- mode1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。
- mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅助支持。(推荐)
其他模式介绍
- balance-rr (mode=0) 默认, 有高可用 (容错) 和负载均衡的功能, 需要交换机的配置,每块网卡轮询发包 (流量分发比较均衡).
- active-backup (mode=1) 只有高可用 (容错) 功能, 不需要交换机配置, 这种模式只有一块网卡工作, 对外只有一个mac地址。缺点是端口利用率比较低
- balance-xor (mode=2) 不常用
- broadcast (mode=3) 不常用
- 802.3ad (mode=4) IEEE 802.3ad 动态链路聚合,需要交换机配置,没用过
- balance-tlb (mode=5) 不常用
- balance-alb (mode=6) 有高可用 ( 容错 )和负载均衡的功能,不需要交换机配置 (流量分发到每个接口不是特别均衡)
bond 模式修改配置文件实现双网卡绑定
注意:
- 必须保证服务器有两块同网段网卡设备
环境:
- 已添加网卡1 eno16777728
- 已添加网卡2 eno33554968
1、新建Slave1配置文件
配置网卡设备的绑定参数。网卡绑定的理论知识类似于RAID硬盘组,我们需要对参与绑定的网卡设备逐个进行“初始设置”。需要注意的是,这些原本独立的网卡设备此时需要被配置成为一块“从属”网卡,服务于“主”网卡,不应该再有自己的IP地址等信息。在进行了初始设置之后,它们就可以支持网卡绑定。
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777728 TYPE=Ethernet BOOTPROTO=none # 手动获取 ONBOOT=yes USERCTL=no # 是否允许普通用户管理此端口 DEVICE=eno16777728 # 设备名 MASTER=bond0 # master 设备名 SLAVE=yes # 开启 SLAVE [root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554968 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes USERCTL=no DEVICE=eno33554968 MASTER=bond0 SLAVE=yes
2、新建Master配置文件
还需要将绑定后的设备命名为bond0并把IP地址等信息填写进去,这样当用户访问相应服务的时候,实际上就是由这两块网卡设备在共同提供服务。
[root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 TYPE=Ethernet BOOTPROTO=none # 手动配置地址 ONBOOT=yes USERCTL=no
# 是否允许普通用户管理此端口
DEVICE=bond0 # 设备名
IPADDR=192.168.10.10 # IP地址
PREFIX=24 # 子网掩码
DNS=192.168.10.1
NM_CONTROLLED=no
# GATEWAY=192.168.1.1 # 网关地址
# DNS1=114.114.114.114 # DNS1地址
# DNS2=8.8.8.8 # DNS2地址
3、让Linux内核支持网卡绑定驱动
在生产环境中,网络的可靠性是极为重要的,而且网络的传输速度也必须得以保证。针对这样的情况,比较好的选择就是mode6网卡绑定驱动模式了。因为mode6能够让两块网卡同时一起工作,当其中一块网卡出现故障后能自动备援,且无需交换机设备支援,从而提供了可靠的网络传输保障。
下面创建一个用于网卡绑定的驱动文件,使得绑定后的bond0网卡设备能够支持绑定技术(bonding);同时定义网卡以mode6模式进行绑定,且出现故障时自动切换的时间为100毫秒。
[root@linuxprobe ~]# vim /etc/modprobe.d/bond.conf alias bond0 bonding options bond0 miimon=100 mode=6
重启网络服务后网卡绑定操作即可成功。正常情况下只有bond0网卡设备才会有IP地址等信息:
[root@linuxprobe ~]# systemctl restart network [root@linuxprobe ~]# ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::20c:29ff:fe9c:637d prefixlen 64 scopeid 0x20<link> ether 00:0c:29:9c:63:7d txqueuelen 0 (Ethernet) RX packets 700 bytes 82899 (80.9 KiB) RX errors 0 dropped 6 overruns 0 frame 0 TX packets 588 bytes 40260 (39.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno16777728: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:0c:29:9c:63:73 txqueuelen 1000 (Ethernet) RX packets 347 bytes 40112 (39.1 KiB) RX errors 0 dropped 6 overruns 0 frame 0 TX packets 263 bytes 20682 (20.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno33554968: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500 ether 00:0c:29:9c:63:7d txqueuelen 1000 (Ethernet) RX packets 353 bytes 42787 (41.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 325 bytes 19578 (19.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4、检查网络的连通性
为了检验网卡绑定技术的自动备援功能,我们突然在虚拟机硬件配置中随机移除一块网卡设备,可以非常清晰地看到网卡切换的过程(一般只有1个数据丢包)。然后另外一块网卡会继续为用户提供服务。
[root@linuxprobe ~]# ping 192.168.10.10 PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.109 ms 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.102 ms 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.066 ms ping: sendmsg: Network is unreachable 64 bytes from 192.168.10.10: icmp_seq=5 ttl=64 time=0.065 ms 64 bytes from 192.168.10.10: icmp_seq=6 ttl=64 time=0.048 ms 64 bytes from 192.168.10.10: icmp_seq=7 ttl=64 time=0.042 ms 64 bytes from 192.168.10.10: icmp_seq=8 ttl=64 time=0.079 ms ^C --- 192.168.10.10 ping statistics --- 8 packets transmitted, 7 received, 12% packet loss, time 7006ms rtt min/avg/max/mdev = 0.042/0.073/0.109/0.023 ms
5、查看详情信息
cat /proc/net/bonding/bond6
bond 模式 nmcli命令行实现双网卡绑定
注意:
- 必须保证服务器有两块同网段网卡设备
环境:
- 已添加网卡1 eno16777728
- 已添加网卡2 eno33554968
1、创建Master配置文件
# nmcli connection add type bond con-name 设备名称 ifname 设备名称 mode 模式号 miimon 毫秒 nmcli connection add type bond con-name bond6 ifname bond6 mode 1 miimon 100 注:miimon:指定当发现一个链路恢复时,在激活该链路之前的等待时间,以毫秒计算
2、新建Slave1配置文件
# nmcli connection add type bond-slave ifname 设备名称 master master设备名称 nmcli connection add type bond-slave ifname eno16777728 master bond6
3、新建Slave2配置文件
# nmcli connection add type bond-slave ifname 设备名称 master master设备名称 nmcli connection add type bond-slave ifname eno33554968 master bond6
4、激活网路设备
# 激活bond6网络设备 nmcli connection up "bond6" # 激活ens33网络设备 nmcli connection up "bond-slave-eno16777728" # 激活ens34网络设备 nmcli connection up "bond-slave-eno33554968"
5、查看详情信息
cat /proc/net/bonding/bond6