作用:主备网卡
所谓的多网卡绑定就是将多张物理网卡逻辑上组成一个网卡,这样就可以防止一块网卡坏了网络瘫痪,也能起到提升网络带宽的作用。
把多块网卡绑定在一起,一般有两种工作模式可以选择,轮询模式和主备模式
- 轮询模式:例如把两块网卡绑定在一起,此时两块网卡都处于工作状态,它们轮流处理数据包,从而提升带宽和容错性。
- 主备模式:例如把两块网卡绑定在一起,同一时间只有一块网卡处于工作状态,只有发生故障,备用网卡才会切换到工作模式;
bond技术实现网卡绑定
前提:
1、bond技术依赖内核的bonding模块,所以需要先加载bonding模块才行
2、要使得bond能正常工作,必须安装ifenslave 工具,它将两个或更多的网络接口绑定到一个单一的通道,如果没装这个工具,具体表现为bond无法启动,一直是down的状态
# 查看是否已加载bonding模块
lsmod | grep bonding
# 加载bonding模块
sudo modprobe bonding
# 编辑配置文件,不然通过命令加载模块,重启会失效
sudo vim /etc/modules
bonding # 在配置文件中加入需要开启加载的模块
# 检查是否安装ifenslave
which ifenslave
#说明: 如果想移除某个模块,使用rmmod命令就行了。
例如移动 bonding 模块就是 rmmod bonding;
修改配置文件实现bond技术
centos7实现bond技术
1、创建bonding的配置文件
sudo vim /etc/sysconfig/network-scripts/ifcfg-bond0
#添加相关参数
------------------------------------------------------------------------------------------
DEVICE=bond0 ## 可以根据自己的命名规则来命名,一般叫作bondX
BONDING_MASTER=yes ## 表示bond0为绑定的主设备
IPADDR=192.168.1.22 #需要做漂移的ip
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes # 开启自启动
BOOTPROTO=none # 静态地址分配
BONDING_OPTS="mode=active-backup miimon=100 primary=ens160"
#DNS1=
#DNS2=
# BONDING_OPTS决定了 bonding 的模式 model=1(active-backup)表示是主备模式,mode=0表示为轮询模式
# miimon=100表示系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
# primary=ens160 指定ens160为正常时为主节点、当ens160 down掉后才由ens256继承、ens160起来后还是由ens160来工作
#DNS需要就添加到最后
----------------------------------------------------------------------------------------------
2、修改网卡的配置文件
#例如我这里将ens160和een256两个网卡加入到bond0里面去,就需要修改ens160和ens256的配置文件
ens160设置:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens160
----------------------------------------------------
DEVICE="ens160"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
----------------------------------------------------
ens256设置:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens256
----------------------------------------------------
DEVICE="ens256"
ONBOOT="yes"
BOOTPROTO="none"
MASTER="bond0"
SLAVE="yes"
-----------------------------------------------------
3、重启网络管理服务
systemctl restart network
4、查看地址:ip a
- 发现ens160和ens256网卡ip都没了(这样才是正常的)
- 多出了一个 bond0
-------------------------------------------------------------------------------------------------------------------
[root@k8s-loadbalancer2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:09:66:8f brd ff:ff:ff:ff:ff:ff
3: ens256: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:09:66:8f brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:09:66:8f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
----------------------------------------------------------------------------------------------------------------------------------
5、查看bond0的详细信息:
- cat /proc/net/bonding/bond0
- Primary Slave 指网卡正常时由ens160来当主
- MII Status: up 说明网卡正常
--------------------------------------------------------------------------
[root@k8s-loadbalancer2 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: ens160 (primary_reselect always)
Currently Active Slave: ens160
MII Status: up
MII Polling Interval (ms): 50
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens256
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:09:66:99
Slave queue ID: 0
Slave Interface: ens160
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:09:66:8f
Slave queue ID: 0
----------------------------------------------------------------
6、测试
- 此时当执行:ifdown ens160 时,ens256会接管ip(192.168.1.22)
- 查看:/proc/net/bonding/bond0
- 此时是ens256来接管工作的
- 再执行 ifup ens160 再查看,发现此时是ens160来接管ip工作了
---------------------------------------------------------------
[root@k8s-loadbalancer2 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens256
MII Status: up
MII Polling Interval (ms): 50
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens256
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:09:66:99
Slave queue ID: 0
-------------------------------------------------------------------
注意:如果本机安装了keepalive等一些虚拟ip的话、可能会产生某个被keepalive绑定的网卡被指定一个ip(vip)、此时服务器上会产生 ARP 缓存、此时要手动清理:
centos系统:sudo ip neigh flush all
ubuntu系统:sudo arp -d -i ens160 192.168.1.250
ubuntu系统:参考:
AB网漂移