15 Linux网络管理
15 Linux网络管理
1.网络基本概述
1.1 为何需要网络
1.2 什么是网络
2.互联网通讯协议
2.1 物理层
2.2 数据链路层
2.3 网络层
2.4 传输层
2.5 应用层
2.6 OSI总结
3.TCP协议
3.1 三次握手
3.2 四次挥手
3.3 转换状态
3.4 UDP协议
4.网络配置
4.1 查询网络信息
4.2 修改网卡名称
4.3 配置网络地址
4.3.1 nmcli查看网络状态
4.3.2 nmcli配置IP地址
4.3.2 nmcli修改IP地址
4.3.3 nmcli管理配置文件
5.网卡绑定
5.1 配置round-robin
5.1.1 eth0网卡配置
5.1.2 eth1网卡配置
5.1.3 bond网卡配置
5.1.4 bond状态检查
5.1.5 bond网卡删除
5.2 配置active-backup
5.2.1 eth0 网卡配置
5.2.2 eth1 网卡配置
5.2.3 bond 网卡配置
5.2.4 bond 状态检查
5.2.5 bond故障模拟
1.网络基本概述
1.1 为何需要网络
假设没有网络:(也就是将所有的计算机网络都关闭)
如果我的计算机上有非常不错的电影,想要进行传
输,就比较的费劲了;
因为我们可能处在不同的城市、或者不同的国家;
但如果有了网络:(也就是将所有计算机通过网线连接在一起)
1.打破了地域上数据传输的限制;
2.提高信息之间的传输效率,以便更好的实现”资源的共享“;
1.2 什么是网络
网络是由"若干节点"和"连接这些节点"的链路构成,
表示诸多对象及其相互联系。
网络是信息传输、接收、共享的虚拟平台,通过它把各个信息联系到一起,从而实现这些资源的共享。
网络将节点连接在一起,需要实现 ”信息传输“(信息通信)有几个大前提:
1.使用物理连接的介质将所有计算机连接在一起
(网卡、网线、交换机、路由器);
2.双方在通信过程中,必须使用统一的通信标准,也就是通讯协议(互联网通讯协议);
2.互联网通讯协议
协议其实就是规定了一堆标准,用来定义计算机如何接入internet 以及接入internet 的计算机通信的标准;所以计算机都需要学习此标准、遵循此标准来进行信息传输(信息通信);
国际标准化组织:推出了OSI 七层参考模型,将互联网通讯协议分成了不同的层,每一层都有专门的标准,以及组织数据的格式;
(应、表、会、传、网、数、物)
对于写程序来说,通常会将七层归纳为五层协议;
(应、传、网、数、物)
所以我们需要学习协议的规定了哪些标准;
以太网封装与解封装动态图
2.1 物理层
物理层:定义物理设备的标准,如网卡网线,传输速率;最终实现数据转成电信号传输;
问题:如果只是单纯发送电信号是没有意义的,因为没有规定开头也没有规定结尾;要想变得有意义就必须对
电信号进行分组;比如:xx位为一组、这样的方式去传输,这就需要“数据链路层”来完成了;
2.2 数据链路层
数据链路层定义:定义了电信号的分组的标准方式,一组数据称之为一个数据帧,这个标准遵循 ethernet 以太网协议,以太网规定了如下几件事;
1.数据帧分为 head 和 data 两部分组成;其中 head 长度固定18字节;
head :发送者/源地址、接收者/目标地址(源地址6字节、目标地址6字节、数据类型6字节)
源地址:MAC 地址
目标地址:MAC 地址
data :主要存放是网络层整体的数据,最长1500字节,超过最大限制就分片发送;
2.但凡接入互联网的主机必须有一块网卡,网卡烧制
了全世界唯一的MAC 地址;
3.有了以太网协议规定以后,它能对数据分组、也可以区分数据的意义,还能找到目标主机的地址、就可以实现计算机通信;但是计算机是瞎的,所以以太网通信采用的是"广播"方式;
那什么是广播:
假设我们都在一个小黑屋里面,大家互相通信靠吼,假设 oldxu 让 laowang 买包烟;
1.数据:买烟(类型:干粮)
2.源地址:oldxu
3.目标地址:laowang
此时屋子里所有人都收到了该数据包,但只有 laowang 会接收执行,其他人收到后会丢弃;
如果我们将全世界的计算机都接入在一起,理论上是不是就可以实现全世界通信:
首先:无法将全世界计算机放在一个交换机上,因
为没有这样的设备;
其次:就算放在同一设备上,每台计算机都广播一
下,那设备也无法正常工作;
所以:我们应该将主机划区域,隔离在一个又一个的区域中,然后将多个区域通过"网关/路由"连接在一起;
2.3 网络层
网络层定义:用来划分广播域,如果广播域内主机要往广播域外的主机发送数据,一定要有一个"网关/路由"帮其将数据转发到外部计算机;网关和外界通信走的是路由协议(这个我们不做详细阐述)。其次网络层协议规定了如下几件事;
规定1:数据包分成:head 和 data 两部分组成;
head :发送者/源地址、接收者/目标地址,该
地址为IP地址;
data :主要存放是传输层整体的数据;
规定2:IP 地址来划分广播域,主要用来判断两台主机是否在同一广播域中;
一个合法 IPV4 地址组成部分= ip地址/子网掩
码 ,在线子网计算器
172.16.1.100/24、172.16.1.1/24、
172.16.1.2/24
172.16.1.200/24
网段:172.16.1.0
主机:100台
广播地址:172.16.1.255
如果计算出两台地址的广播域一样,说明两台计算机处在同一个区域中;
计算两台计算机是否在同一局域网(牵扯到如何发送
数据):
假设:现在计算机1要与计算机2通信,计算机1必须拿到计算机2的ip地址;
如果它们处于同一网络(局域网) 10.0.0.1-- >10.0.0.100 :
1.本地电脑根据数据包检查目标 IP 如果为本地
局域网;
2.直接通过交换机广播MAC寻址;将数据包转发过去;
如果它们处于不同网络(跨局域网) 10.0.0.1-- >39.104.16.126 :
1.本地根据数据包检查目标IP 如果不为本地局域网,则尝试获取网关的MAC 地址;
2.本地封装数据转发给交换机,交换机拆解发现目标MAC 是网关,则送往网关设备;
3.网关收到数据包后,拆解至二层后发现请求目
标MAC 是网关本机MAC ;
4.网关则会继续拆解数据报文到三层,发现目标
地址不为网关本机;
5.网关会重新封装数据包,将源地址替换为网关
的WAN 地址,目标地址不变;
6.出口路由器根据自身“路由表”信息将数据包发送出去,直到送到目标的网关 ;
2.4 传输层
传输层的由来:网络层帮我们区分子网,数据链路层帮我们找到主机,但一个主机有多个进程,进程之间进行不同的网络通信,那么当收到数据时,如何区分数据是那个进程的呢;其实是通过端口来区分;端口即应用程序与网卡关联的编号。
传输层的定义:提供进程之间的逻辑通信;
传输层也分成:head 和 data 两部分组成; head :源端口、目标端口、协议(TCP、
UDP);
data :主要存放是应用层整体的数据;
80:http
443:https
mysql:3306
tomcat:8080
mongodb:
redis:6379
dns:53
dhcp:67 68
…
2.5 应用层
应用层定义:为终端应用提供的服务,如我们的浏览器交互时候需要用到的 HTTP 协议,邮件发送的SMTP,文件传输的 FTP 等。
浏览器:
请求百度的内容: 请求包; 请求的协议;
http 源断口: 1234 目标端口:80
2.6 OSI总结
3.TCP协议
tcp可靠数据传输协议;为了实现可靠传输,在通信之前需要先建立连接,也叫"双向通路",就是说客户端与服务端要建立连接,服务端与客户端也需要建立连接,当然建立的这个双向通路它只是一个虚拟的链路,不是用网线将两个设备真实的捆绑在一起;
虚拟链路的作用:由于每次通信都需要拿到IP和Port,那就意味着每次都需要查找,建立好虚拟通路,下次两台主机之间就可以直接传递数据;
3.1 三次握手
第一次:客户端要与服务端建立连接,需要发送请求
连接消息;
第二次:服务端接收到数据后,返回一个确认操作
(至此客户端到服务端链路建立成功);
第三次:服务端还需要发送要与客户端建立连接的请求;
第四次:客户端接收到数据后,返回一个确认的操作(至此服务端到客户端的链路建立成功);
由于建立连接时没有数据传输,所以第二次确认和第三次请求可以合并为一次发送;
TCP协议为了实现可靠传输,通信双方需要判断自已经发送的数据包是否都被接收方收到,如果没收到,就需要重发。为了实现这个需求,就引出序号
(seq)和确认号(ack)的使用。
举例:发送方在发送数据包时,序列号(假设为
123),那么接收方收到这个数据包以后, 就可以回复一个确认号(124=123+1)告诉发送方 “我已经收到了你的数据包,你可以发送下一个数据包,序号从
124 开始”,这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到,需要重发。
3.2 四次挥手
第一次挥手:客户端(服务端也可以主动断开)向服
务端说明想要关闭连接;
第二次挥手:服务端会回复确认。但不是立马关闭,
因为此时服务端可能还有数据在传输中;
第三次挥手:待到服务端数据传输都结束后,服务端向客户端发出消息,我要断开连接了;
第四次挥手:客户端收到服务端的断开信息后,给予确认。服务端收到确认后正式关闭。
3.3 转换状态
三次握手状态转换:
1.客户端发送syn包向服务端请求建立TCP 连接,客户
端进入SYN_SEND状态;
2.服务端收到请求之后,向客户端发送SYN+ACK 的合
成包,同时自身进入SYN_RECV 状态;
3.客户端收到回复之后,发送ACK 信息,自身进入
ESTABLISHED状态;
4.服务端收到ACK数据之后,进入ESTABLISHED 状态。
四次挥手过状态转换:
1.客户端发送完数据之后,向服务器请求断开连接,自身进入FIN_WAIT_1状态;
2服务端收到FIN 包之后,回复ACK 包表示已经收到,但此时服务端可能还有数据没发送完成,自身进入 CLOSE_WAIT 状态,表示对方已发送完成且请求关闭连接,自身发送完成之后可以关闭连接;
3.服务端数据发送完成后,发送FIN 包给客户端,自身进入LAST_ACK 状态,等待客户端ACK 确认;
4.客户端收到FIN 包之后,回复一个ACK 包,并进入TIME_WAIT状态;
注意:TIME_WAIT 状态比较特殊,当客户端收到服务端的FIN 包时,理想状态下,是可以直接关闭连接了;但是有几个问题:
问题1:网络是不稳定的,可能服务端发送的一些
数据包,比服务端发送的FIN 包还晚到;
问题2:.如果客户端回复的ACK包丢失了,服务端就会一直处于LAST_ACK 状态,如果客户端没有关闭,那么服务端还会重传FIN 包,然后客户端继续确认;
所以客户端如果ACK 后立即关闭连接,会导致数据不完整、也可能造成服务端无法释放连接。所以此时客户端需要等待2个报文生存最大时长,确保网络中没有任何遗留报文了,再关闭连接;
如果机器TIME_WAIT 过多,会造成端口会耗尽,可以修改内核参数 tcp_tw_reuse=1 端口重用;
为什么必须要等待2MSL?而不是4MSL?8MSL?
一个MSL就是报文在网络中的最长生存时间,大白话的话,就是如果存在丢包的话,在MSL时间内也会触发重传了,这里2MSL,就相当于两次丢包,一次丢包概率是百分之一,连续两次丢包的概率是万分之一,这个概率实在是太小了,所以2MSL是足够的。
3.4 UDP协议
udp 是不可靠传输协议;不可靠指的是传输数据时不可靠;
udp 协议不需要先建立连接,只需要获取服务端的 ip+port ,发送完毕也无需服务器返回ack ;
udp 协议如果在发送在数据的过程中丢了,那就丢了;
场景:直播;弹幕; DNS 采用; QQ早起UDP;
4.网络配置
4.1 查询网络信息
1.使用 ifconfig 当前处于活动状态的网络接口
[root@oldxu ~]# yum install net-tools -y [root@oldxu ~]# ifconfig
#仅查看eth0网卡状态信息
[root@oldxu ~]# ifconfig eth0
#查看所有网卡状态信息, 包括禁用和启用
[root@oldxu ~]# ifconfig -a
#UP: 网卡处于活动状态 BROADCAST: 支持广播
RUNNING: 网线已接入
#MULTICAST: 支持组播 #MTU: 最大传输单元(字节),接
口一次所能传输的最大包
eth0:
flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
#inet: 显示IPv4地址行 inet 10.0.0.100 netmask
255.255.255.0 broadcast 10.0.0.255 #inet6: 显示IPv6地址行
inet6 fe80::a879:62cf:396c:e7d9 prefixlen 64 scopeid 0x20
inet6 fe80::22a2:cb:8a69:bf63 prefixlen 64 scopeid 0x20
#enther: 硬件(MAC)地址 txqueuelen: 传输缓存区长度大小
ether 00:0c:29:5f:6b:8a txqueuelen 1000 (Ethernet)
#RX packets: 接收的数据包 RX packets 3312643 bytes
4698753634 (4.3 GiB)
RX errors 0 dropped 0 overruns 0
frame 0
#TX packets: 发送的数据包
TX packets 235041 bytes 20504297 (19.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#errors: 总的收包的错误数量
#dropped: 拷贝中发生错误被丢弃
#collisions: 网络信号冲突情况, 值不为0则可能存在网络故障
2.使用 ip 命令查看当前地址
[root@oldxu ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,①UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
②link/ether 00:0c:29:5f:6b:8a ff:ff:ff:ff:ff:ff
③inet 10.0.0.100/24 brd④ 192.168.69.255 scope global ens32
valid_lft forever preferred_lft
forever
⑤inet6 fe80::bd23:46cf:a12e:c0a1/64 scope link
valid_lft forever preferred_lft
forever
#①: 活动接口为UP
#②: Link行指定设备的MAC地址
#③: inet行显示IPv4地址和前缀
#④: 广播地址、作用域和设备名称在此行
#⑤: inet6行显示IPv6信息
3.使用 ip -s link show eth0 命令查看网络性能的统
计信息, 比如: 发送和传送的数据包、错误、丢弃
[root@oldxu ~]# ip -s link show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
link/ether 14:18:77:35:0d:f5 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
518292951 4716385 0 0 0
709280
TX: bytes packets errors dropped
carrier collsns
23029861512 15391427 0 0 0
0
4.2 修改网卡名称
Centos6 网卡名称是 eth0、eth1…
Centos7 网卡名称是 ens32、ens33…
由于这种无规则的命名方式给后期维护带来了困难,所以需要将网卡名称修改为 eth0、eth1…
场景示例1:已经安装完操作系统,修改网卡命名规则为eth0 eth1
1.修改网卡配置文件
[root@oldxu ~]# cd /etc/sysconfig/network-scripts/
[root@oldxu network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@oldxu network-scripts]# vim ifcfg-eth0
NAME=eth0
DEVICE=eth0
2.修改内核启动参数,禁用预测命名规则方案,将 net.ifnames=0 biosdevname=0 参数关闭
[root@oldxu~]# vim /etc/sysconfig/grub GRUB_CMDLINE_LINUX="…net.ifnames=0 biosdevname=0 quiet"
[root@oldxu~]# grub2-mkconfig -o /boot/grub2/grub.cfg
3.重启系统,然后检查网卡名称是否修改成功
[root@oldxu~]# reboot
[root@oldxu~]# ifconfig
场景示例2:在新安装系统时,修改网卡名称规则
1.在安装系统选择Install Centos7 按下Tab 设定 kernel 内核参数;
2.增加内核参数: net.ifnames=0 biosdevname=0 ;
3.检查是否修改成功,成功后可继续安装系统;
nmcli、nmtui
4.3 配置网络地址
CentOS7 系统默认采用 NetworkManager 来提供网
络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。NetworkManager 提供的命令行和图形配置工具对网络进行设定,设定保存
的配置文件在 /etc/sysconfig/network-scripts
目录下,工具有
NetworkManager 有如下两个概念需要了解:
device 物理设备,例如:enp2s0,virbr0,team0
connection 连接设置,具体网络配置方案
一个物理设备device 可以有多套逻辑连接配置,但同一时刻只能使用一个 connection 连接配置;
4.3.1 nmcli查看网络状态
1.使用 nmcli device 命令查看设备情况
查看所有设备
[root@oldxu ~]# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
lo loopback unmanaged –
指定查看某个设备的详细状态
[root@oldxu ~]# nmcli dev show eth0
2.使用 nmcli connection 命令查看连接状态
#查看连接状态
[root@oldxu ~]# nmcli connection
NAME UUID
TYPE DEVICE
eth0 a4319b27-80dc-4d63-a693-2927ea1018e7 802-3-ethernet eth0
查看所有活动连接的状态
[root@oldxu ~]# nmcli con show --active
查看指定连接状态
[root@oldxu ~]# nmcli con show “eth0”
4.3.2 nmcli配置IP地址
使用 nmcli 创建一个 static 的连接,配置IP、掩码、网关等
1、添加一个连接配置,并指定连接配置名称
2、将连接配置绑定物理网卡设备
3、配置网卡的类型,网卡是否开机启动
4、网卡使用什么模式配置IP地址(静态、dhcp)
5、配置网卡的IP地址、掩码、网关、DNS等等
[root@node ~]# nmcli connection add \ con-name eth0-static \ ifname eth0 \
type ethernet \
autoconnect yes \
ipv4.addresses 10.0.0.222/24 \ ipv4.gateway 10.0.0.2 \ ipv4.dns 223.5.5.5 \ ipv4.method manual
[root@oldxu ~]# nmcli connection add con-name eht0-static ifname eth0 \
type ethernet autoconnect yes \ ipv4.method manual \ ipv4.addresses 10.0.0.222/24 \ ipv4.gateway 10.0.0.254 \ ipv4.dns 233.5.5.5.5 \ +ipv4.dns 8.8.8.8
#激活eht1-static的连接
[root@oldxu ~]# nmcli connection up eht0-static
[root@oldxu ~]# nmcli connection show
NAME UUID
TYPE DEVICE eht0-static 6fdebe6e-5ef0-4a05-8235-57e317fdada0 802-3-ethernet eth0
4.3.2 nmcli修改IP地址
1.取消 eht1-static 连接开机自动激活网络
[root@oldxu ~]# nmcli connection modify eht0-static \
autoconnect no
2.修改 eht1-static 连接的 dns 配置
[root@oldxu ~]# nmcli connection modify eht0-static \
ipv4.dns 8.8.8.8
3.给连接再增加dns 有些设定值通过+/- 可以增加或则移除设定
[root@oldxu ~]# nmcli connection modify eht0-static \
+ipv4.dns 8.8.8.8
4.替换连接的静态IP和默认网关
[root@oldxu ~]# nmcli connection modify eht0-static \
ipv4.addresses 10.0.0.111/24 ipv4.gateway 10.0.0.254
- nmlci 仅仅修改并保存了配置,要激活更改,需要重激活连接
[root@oldxu ~]# nmcli connection down eht1-static && \
nmcli connection up eht1-static
6.删除自建的 connection
[root@oldxu ~]# nmcli connection delete eht1-static
4.3.3 nmcli管理配置文件
使用 nmcli 管理 /etc/sysconfig/network-
scripts/ 配置文件,其实就是自定义一个网卡的配置文件,然后加入至 NetworkManager 服务进行管理;
1、新增物理网卡
2、拷贝配置文件(可以和设备名称一致)
3、修改配置,UUID、连接名称、设备名称、IP地址
4、重新加载网络配置
5、启用连接,并检查
1.添加一个物理设备,进入 /etc/sysconfig/network-script/ 目录拷贝一份网卡配置文件;
[root@oldxu network-scripts]# cp ifcfg-eth0-static ifcfg-eth1-static
2.修改网卡配置文件如下;
[root@oldxu network-scripts]# cat ifcfg-eth1-static
TYPE=Ethernet
BOOTPROTO=none # 网卡类型 none;static;dhcp; 硬件服务器都选择static、云主机、docker容器实例一般都是dhcp
IPADDR=10.0.0.222 PREFIX=24 DEFROUTE=yes
IP地址
子网掩码
默认路由(明天讲
路由)
NAME=eth1-static DEVICE=eth2 ONBOOT=yes
链接的配置名称
设备名称
开机是否启动
3.重载 connetction 连接,让 NetworkManager 服务
能够识别添加自定义网卡配置;
[root@oldxu network-scripts]# nmcli
connection reload
NAME UUID
TYPE DEVICE
eth0 5fb06bd0-0bb0-7ffb-45f1-
d6edd65f3e03 ethernet eth0
eth1-static 8f105ed6-1361-8e14-51fd-
dedb8ef3510a ethernet eth1
- eth1-static 连接配置已经关联了 eth1 物理设备,
如果希望修改 IP 地址,可以用如下两种方式;
方式一、nmcli modify方式修改然后重载配置
[root@oldxu ~]# nmcli modify eth1-static ipv4.address 10.0.0.233/24 [root@oldxu ~]# nmcli down eth1-static && nmcli up eth1-static
方式二、vim修改,先reload,然后重载
[root@oldxu network-scripts]# cat ifcfg-eth1-static
…
IPADDR=10.0.0.234
…
[root@oldxu ~]# nmcli connection reload [root@oldxu ~]# nmcli connection down eth1-static && nmcli connection up eth1-static
5.网卡绑定
网卡绑定Bonding
1、可以实现网络冗余,避免单点故障;
2、可以实现负载均衡,以提升网络的传输能力;
网卡绑定实现模式:
模式0 balance-rr 负载轮询:两网卡单独是
100MB ,聚合为1个网络传输,则可提升为200MB 模式1 active-backup 高可用:两块网卡,其中一
条若断线,另外的线路将会自动顶替
–> eth0 ----
app --发送数据–> bond0 <-
–> switch
–> eth1 ----/
5.1 配置round-robin
5.1.1 eth0网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
NAME=eth0
ONBOOT=yes
MASTER=bond0
SLAVE=yes
5.1.2 eth1网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
DEVICE=eth1
NAME=eth1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
5.1.3 bond网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Bond
BOOTPROTO=none
ONBOOT=yes
DEVICE=bond0
NAME=bond0
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DEFROUTE=yes
BONDING_MASTER=yes
BONDING_OPTS=“miimon=200 mode=0” # 检查间
隔时间ms
5.1.4 bond状态检查
查看bond 绑定状态
[root@oldxu ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
模式
MII Status: up
MII Polling Interval (ms): 200
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:aa:8d:2e
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:aa:8d:42
Slave queue ID: 0
使用ethtool 检查网卡传输速率
[root@oldxu ~]# ethtool bond0
Settings for bond0:
Speed: 2000Mb/s # 每秒传输速度
Duplex: Full
5.1.5 bond网卡删除
删除bond 可以使用nmcli 命令
[root@oldxu ~]# nmcli connection delete bond0
5.2 配置active-backup
5.2.1 eth0 网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
DEVICE=eth0
NAME=eth0
ONBOOT=yes
MASTER=bond1
SLAVE=yes
5.2.2 eth1 网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth1
NAME=eth1
ONBOOT=yes
MASTER=bond1
SLAVE=yes
5.2.3 bond 网卡配置
[root@oldxu ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
TYPE=Bond
BOOTPROTO=none
ONBOOT=yes
DEVICE=bond1
NAME=bond1
IPADDR=10.0.0.200
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
BONDING_MASTER=yes
BONDING_OPTS=“miimon=200 mode=1 fail_over_mac=1”
bond1获取mac地址有两种方式
#1、从第一个活跃网卡中获取mac地址,然后其余的SLAVE网卡的mac地址都使用该mac地址;
#2、使用fail_over_mac参数,是bond0使用当前
活跃网卡的mac地址,mac地址随着活跃网卡的转换而变。
fail_over_mac参数在VMWare上是必须配置,物理机可不用配置;
5.2.4 bond 状态检查
[root@oldxu ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-
backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 200
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:38:85:72
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:25:33:ee
Slave queue ID: 0
5.2.5 bond故障模拟
关闭活跃网卡eth0
[root@oldxu ~]# ifdown eth0 成功断开设备 ‘eth0’。
再次检查状态,会发现备用网卡eth1 切换为活跃网卡;
[root@oldxu ~]# cat /proc/net/bonding/bond1 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-
backup) (fail_over_mac active)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 200
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:25:33:ee
Slave queue ID: 0
尝试ping 该主机,一切正常
64 bytes from 10.0.0.220: icmp_seq=173 ttl=64 time=0.512 ms
64 bytes from 10.0.0.220: icmp_seq=174 ttl=64 time=0.512 ms
64 bytes from 10.0.0.220: icmp_seq=175 ttl=64 time=2.11 ms