前言: 为了实现网卡的高可用性,需要学习一下 Bond技术
1. 概念
Bond(也被称为链路聚合、端口绑定或接口绑定)是一种网络技术,用于将多个物理网络接口(如以太网接口)组合成一个逻辑接口。这样做的目的是增加带宽、提高网络性能、实现负载均衡和冗余备份。
网卡绑定(Bonding)技术是一种在Linux网络架构中提高网络连接可靠性和带宽利用的手段,主要用于将两个或多个物理网卡(NICs)组合成一个逻辑接口,这样即使单个网卡出现故障,网络连接仍然能够保持
2. Bond技术 能解决什么问题
通过使用 Bond 技术,可以将多个网络接口绑定在一起,形成一个虚拟的逻辑接口。当数据包通过该逻辑接口传输时,它们会通过内部算法(如哈希函数)分发到每个物理接口上,实现负载均衡。这样可以充分利用每个物理接口的带宽,提高整体网络吞吐量。
另外,Bond 还提供了故障切换和冗余备份的功能。如果其中一个物理接口发生故障或不可用,数据包会自动切换到其他可用的接口上,确保网络的可靠性和连通性。
Bond 技术在服务器和网络设备中广泛应用,特别是在需要高带宽和可靠性的环境中,如数据中心、负载均衡器、集群服务器等。它可以提供更高的网络性能、冗余备份和容错能力,从而提高网络的可靠性和性能。
3. Bond模式介绍
mode=0
(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。mode=1
(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。mode=2
(balance-xor)(平衡策略) : 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)mode=3
(broadcast)(广播策略): 表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协
商方式配合。mode=4
(802.3ad)(IEEE 802.3ad 动态链接聚合):表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)。标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding
负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。mode=5
(balance-tlb)(适配器传输负载均衡): 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。mode=6
(balance-alb)(适配器适应性负载均衡):在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的
支持。接收负载均衡是通过ARP协商实现的.
4. Bond模式配置实验
已
mode 1
模式进行实验;
实验思路: 创建一个虚拟的网卡Bond0配置为Master指定mode级别并配置地址,将两张真正的物理卡配置为Slave不用配置地址
使用Centos7完成本次实验,在实验前,先禁用NetworkManager服务,并禁止selinux
systemctl disable NetworkManager --now
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
4.1. 查看物理网卡
[root@localhost ~]# 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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:57:ff:c5 brd ff:ff:ff:ff:ff:ff
inet 192.168.92.128/24 brd 192.168.92.255 scope global noprefixroute dynamic ens33
valid_lft 5444412sec preferred_lft 5444412sec
inet6 fe80::199:d74c:2c3c:1cd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:57:ff:cf brd ff:ff:ff:ff:ff:ff
inet 192.168.92.129/24 brd 192.168.92.255 scope global noprefixroute dynamic ens36
valid_lft 5444413sec preferred_lft 5444413sec
inet6 fe80::3150:9b3d:2ff5:dc9a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4.2. 创建Bond网卡,Bond模式为1
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=bond0
IPADDR=192.168.92.100
PREFIX=24
GATEWAY=192.168.92.2
DNS1=192.168.92.2
NM_CONTROLLED=no
BONDING_OPTS='mode=1 miimon=100 fail_over_mac=1'
fail_over_mac=1 : 默认fail_over_mac=0,当发生错误时,只改slave的mac不改bond;fail_over_mac=1时,只改bond不改slave
4.3. 将物理网卡配置slave模式,master为 bond0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=ens33
MASTER=bond0
SLAVE=yes
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
DEVICE=ens36
MASTER=bond0
SLAVE=yes
4.4. 重启网络
[root@localhost ~]# systemctl restart network
4.5 故障测试
长ping百度,将一块网卡down掉,查看效果
[root@localhost ~]# ip link set ens33 down