链路聚合(英语:Link Aggregation)是一个计算机网络术语,指将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定网络封包从哪个成员端口发送到对端的交换机。当交换机检测到其中一个成员端口的链路发生故障时,就停止在此端口上发送封包,并根据负荷分担策略在剩下的链路中重新计算报文的发送端口,故障端口恢复后再次担任收发端口。链路聚合在增加链路带宽、实现链路传输弹性和工程冗余等方面是一项很重要的技术。
模拟情形:假设有一个链路聚合,并且有2个成员端口A,B.根据生成树协议(意一交换机中如果到达根网桥有两条或者两条以上的链路.生成树协议都根据算法把其中一条切断,仅保留一条.).同一时刻只允许一个成员端口进行工作.若此时A正在工作,则B处于等待被使用状态,当A出现故障停止工作时,根据负荷分担策略策略选择B端口.则B开始工作,A进行故障修复,直到B出现故障再切换到A.
使用链路聚合的好处:网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同时也可以提高网络访问速度。比使用单网卡更加稳定,在高负载的服务器中使用链路聚合可以避免因网卡故障而造成服务器无响应.
要强调的:A,B两个网卡是不需要配ip的,只需要为聚合网卡配置ip.也就是说可以将A.B两张网卡看成一张网卡(将聚合网卡看成一个对外的接口),只是他们在内部交替来进行工作,工作内容还是一样的.
二、Linux配置链路聚合的两种方式
网卡的链路聚合一般常用的有"bond"和"team"两种模式,"bond"模式最多可以添加两块网卡,"team"模式最多可以添加八块网卡。
准备一台虚拟机,添加两条虚拟网卡,eth1,eth2.实现虚拟网卡team0,ip地址为192.168.1.1
[root@server0 ~]#nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{"runner": {"name": "activebackup"}}' #表示建立一个team,名称为team0,工作模式为activebackup
[root@server0 ~]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.1/24
#修改team0的ip地址 192.168.1.1/24
[root@server0 ~]# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
#将eth1添加到team0中
[root@server0 ~]# nmcli connection add type team-slave con-name team0-1 ifname eth2 master team0
#将eth2添加到team0中
[root@server0 ~]# teamdctl team0 state #查看team0状态
[root@server0 ~]# nmcli connetcion up tamp0 #重启team0网卡
team有四种工作模式,分别是"broadcast"广播容错、"roundrobin"平衡轮询、"activebackup"主备和"loadbalance"负载均衡。在添加team模式时命令中的工作模式命令也不同,team模式的命令格式是'{"runner":{"name":"工作模式"}}',这点需要注意。
测试时也是通过"ifconfig eth2 down",去掉一块网卡,再ping一下,可以看到网络依旧连通着。
bond模式与team模式的区别在于可添加的网卡数量,命令格式也稍微有点区别(模式)
[root@server0 ~]# nmcli connection add type bond con-name bond0 mode active-backup
[root@server0 ~]# nmcli connection add con-name eth0 ifname eth0 type bond-slave master bond0
#将eth0网卡连接添加到这个bond中。
[root@server0 ~]# nmcli connection add con-name eth1 ifname eth1 type bond-slave master bond0。
#将eth1连接网卡添加到这个bond中。
[root@server0 ~]# teamdctl team0 state #查看team0状态
[root@server0 ~]# nmcli connetcion up tamp0 #重启team0网卡
两台虚拟机,server,desktop,处在相同网段,通过ip访问,不配置dns,路由
server ip : 172.25.0.8
desktop ip :172.25.0.11
server准备两张虚拟网卡,eth1,eth2,做一个链路聚合网卡team,配置ip,172.25.0.8
nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{"runner": {"name": "activebackup"}}'
nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
nmcli connection add type team-slave con-name team0-1 ifname eth2 master team0
nmcli connection modify team0 ipv4.method manual ipv4.addresses 172.25.0.8/24
nmcli connection up team0 #启动网卡
ping 172.25.0.8 ,可以ping通
关闭一张网卡.eth1.可以看到活跃eth1显示为down,活跃网卡位eth2
ifconfig eth1 down
在用server ping一下,可以ping通
关闭第二张网卡,eth2,此时没有活跃网卡
再尝试ping一下,可以看到没有响应
结论:链路聚合只有在两张网卡同时故障时才无法访问