在企业及电信 Linux 服务器环境上,网络配置都会使用 Bonding 技术做网口硬件层面的冗余,防止单个网口应用的单点故障。
- bond :
网卡 bond 是通过把多个物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,具体的功能取决于采用的哪种模式。 bond 有的七种模式(mode 0~6,最常用的是 mode 0,1,6)
- mode = 0 ( balance-rr ) 平衡抡循环策略
链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降。- mode = 1 ( active-backup ) 主-备份策略
主备模式,只有一块网卡是 active,另一块是备用的 standby,所有流量都在 active 链路上处理。
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N。- mode = 6 ( balance-alb ) 适配器适应性负载均衡
在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。
下面来介绍 bond 的建立过程(以 mode 1 为例)
(注:
在虚拟中进行建立)
1.为主机添加网卡,保证机器有两块可用的闲置网卡
2.添加 bond
通过执行以下指令:
[root@localhost ~]# nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 172.25.151.50/24
# 添加 bond 并指定 IP
add :为NetworkManager添加一个连接
con-name :连接名称
ifname :连接到的接口
type :连接类型
mode :bonding 模式(默认为: balance-rr )
ip4 :IPv4 类的地址
# 注:这时的 bond 是不可用的,需要为其添加真实的网卡设备
为 bond0 添加两张可用网卡:
[root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type bond-slave master bond0
# eht0 为添加的网卡名称,bond-slave 表示为 bond 的从属设备,master bond0 表示为 bond0 服务
[root@localhost ~]# nmcli connection add con-name eth1 ifname eth1 type bond-slave master bond0
[root@localhost ~]# watch -n 1 cat /proc/net/bonding/bond0
# 可以通过此监控命令
建立完后就可以使用 bond0 了
3.若要删除建立的 bond0 可执行:
先删除 bond0 的两个从属设备
[root@localhost ~]# nmcli connection delete eth0
[root@localhost ~]# nmcli connection delete eth1
删除 bond0
[root@localhost ~]# nmcli connection delete bond0
执行如下:
1.为主机添加网卡,保证机器有两块可用的闲置网卡
以虚拟机为例进行操作,在真机中执行: virt-manager,执行对主机(这里指虚拟机)进行网卡添加
选定主机
添加硬件
选择类型
2. 添加网卡后,进行对 bond 的建立
建立 bond0
为 bond0 添加设备
3. 通过及监测命令:watch -n 1 cat /proc/net/bonding/bond0 可看到 bond0 的状态(eth0 作为 bond0 活跃的从属设备,而eth1 则在随时备用)
4. 可通过执行 ifconfig eth0 down 来模拟 eth0 网卡出现问题,从而观察 bond0 从属设备的运行状态,如下图所示,可发现 eth0 down 后,eth1 在第一时间接替了 eth0 继续工作
可以通过ping 命令来观测在 eth0 down 后,eth1 顶替 eth0 工作,网络是没有间断
5. 删除 bond0
Team和bond0功能类似(企业七之前是没有 team 的)
在redhat7.0以上版本中网络方面的相关服务被NetworkManager所接管,所以在配置多网卡绑定时,redhat专门提供了team工具来实现多网卡的绑定。
- Team 不需要手动加载相应内核模块;Team有更强的拓展性;支持8块网卡
- Team 的种类:
broadcast 广播容错
roundrobin 平衡轮叫
activebackup 主备
loadbalance 负载均衡
下面以 activebackup 主备模式进行 team 建立的示例
1.为主机添加网卡,保证机器有两块可用的闲置网卡(以两块网卡为例)
2.添加 team
[root@localhost ~]# nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}' ipv4 172.25.151.50/24
# 添加 team 并指定 IP
add :为NetworkManager添加一个连接
con-name :连接名称
ifname :连接到的接口
type :连接类型
connfig :为team 设定模式
ip4 :IPv4 类的地址
# 注:这时的 team 是不可用的,需要为其添加真实的网卡设备
[root@localhost ~]# watch -n 1 teamdctl team0 stat
# 观测命令,用来查看 team0 状态
为 team0 添加两张可用网卡:
[root@localhost ~]# nmcli connection add con-name eth0 ifname eth0 type team-slave master team0
# eht0 为添加的网卡名称,team-slave 表示为 team 的从属设备,master team0 表示为 team0 服务
[root@localhost ~]# nmcli connection add con-name eth1 ifname eth1 type team-slave master team0
3.若要删除建立的 team0 可执行:
先删除 team0 的两个从属设备
[root@localhost ~]# nmcli connection delete eth0
[root@localhost ~]# nmcli connection delete eth1
删除 team0
[root@localhost ~]# nmcli connection delete team0
执行如下:
1.为主机添加网卡,保证机器有两块可用的闲置网卡(以两块网卡为例,与 bond 的操作一致)
2.添加 team
3.为 team0 添加两张可用网卡:
4.用监控命令查查看 team0:
5.同样的 team 也与 bond 相同,可以通过 ifconfig down eth1 来使 team0 的一个从属设备停止工作,另一个顶替上去
- 桥接与网桥
桥接工作在OSI网络参考模型的第二层数据链路层,是一种以MAC地址来作为判断依据来将网络划分成两个不同物理段的技术,其被广泛应用于早期的计算机网络当中。
以太网是一种共享网络传输介质的技术,在这种技术下,如果一台计算机发送数据的时候,在同一物理网络介质上的计算机都需要接收,在接收后分析目的MAC地址,如果是属于目的MAC地址和自己的MAC地址相同便进行封装提供给网络层,如果目的MAC地址不是自己的MAC地址,那么就丢弃数据包。
桥接的工作机制是将物理网络段(也就是常说的冲突域)进行分隔,根据MAC地址来判断连接两个物理网段的计算机的数据包发送。- 网桥实际上是一种控制冲突域流量的设备。
首先,bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;其次,bridge是一个虚拟交换机,和物理交换机有类似的功能。
对于普通的网络设备来说,只有两端,从一端进来的数据会从另一端出去,如物理网卡从外面网络中收到的数据会转发给内核协议栈,而从协议栈过来的数据会转发到外面的物理网络中。
而bridge不同,bridge有多个端口,数据可以从任何端口进来,进来之后从哪个口出去和物理交换机的原理差不多,要看mac地址。
1.下面介绍创建用命令创建网桥(临时添加网桥)
1.建立网桥
[root@client ~]# brctl show #查看是否有网桥
[root@client ~]# brctl addbr br0 #添加名为br0的网桥
[root@client ~]# ifconfig br0 172.25.151.50/24 #为网桥临时设置IP
[root@client ~]# ping 172.25.151.250 #尝试用此 ip ping 外界,看是否可以 ping 通
[root@client ~]# brctl addif br0 eth0 #为网桥 br0 添加接口 eth0
#addif 添加 interface ;eth0 物理网卡
[root@client ~]# ping 172.25.151.250 #再尝试用此 ip ping 外界,看是否可以 ping 通
2.删除网桥
[root@client ~]# brctl delif br0 eth0 #删除网桥上的物理网卡(删除网桥上添加的接口)
[root@client ~]# ifconfig br0 down #将网桥停止(将网桥从系统链接中去除)
[root@client ~]# brctl delbr br0 #删除网桥
注:这样建立网桥在重启机器后以消失
具体执行如下:
(1)brctl show 可发现没有网桥
(2)建立网桥
(3)为网桥添加 IP
)
(4)通过此 IP ping 别的主机 IP,无法 ping 通
(5)为网桥 br0 添加接口 eth0,此时再 ping 别的主机,可 ping 通
(6)brctl show 可发现网桥有了接口
2.下面介绍建立永久网桥(编辑配置文件)
[root@client ~]# vim/etc/syscofig/network-scripts/ifcfg-网卡名
内容如下:
1 DEVICE=eth0
2 ONBOOT=yes
3 BOOTPROTO=none
4 BRIDGE=br0 #桥接对象为br0
~
[root@client ~]# vim /etc/syscofig/network-scripts/ifcfg-br0
内容如下:
1 DEVICE=br0
2 ONBOOT=yes
3 BOOTPROTO=none
4 IPADDR=172.25.151.50
5 PREFIX=24
6 TYPE=Bridge #类型为桥接
~
建立完成后,可能无法成功重启网络,可以关闭 NetworkManager.service 后再重启网络,则网桥建立成功
systemctl stop NetworkManager.service
systemctl restart network
systemctl start NetworkManager.service