聚合链路与软件网桥的原理及配置方法
聚合链路与软件网桥的原理及配置方法
一、聚合链路(网络组队)
1. 基本概念
- 聚合链路(网络组队)是通过逻辑方式将多个网络接口控制器(NIC,Network Interface Control)连接,实现故障转移或提升吞吐量的方法。
- 优势:采用新的实施方式,性能更优;模块化设计使其可扩展性更强。
2. teamd 支持的聚合模式(teamd 是实现聚合链路的工具)
- roundrobin(轮询模式):按轮询方式在所有端口传输数据包。
- activebackup(主备模式):故障迁移机制,监控链接变化,仅通过活动端口传输数据。
- loadbalance(负载均衡模式):监控流量,利用哈希函数选择传输端口,力求流量均衡。
- broadcast(广播容错模式):设备通过所有端口传输数据包,实现容错。
3. 主备模式(activebackup)配置步骤
以两台服务器(server1、server2)为例:
server1 配置
-
创建组接口
[root@hrz3 ~]# nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}' [root@hrz3 ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33 team0 43ba7d1c-2472-430c-80f0-8e767bcedad8 team team0
-
配置静态 IP
[root@hrz3 ~]# nmcli connection modify team0 ipv4.addresses 192.168.200.30/24 ipv4.method manual connection.autoconnect yes [root@hrz3 ~]# ip a ...................... 10: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:b0:df:e8 brd ff:ff:ff:ff:ff:ffinet 192.168.200.30/24 brd 192.168.200.255 scope global noprefixroute team0
-
添加端口接口(将 ens36、ens37 加入 team0)
[root@hrz3 ~]# nmcli connection add con-name ens36 ifname ens36 type team-slave master team0 [root@hrz3 ~]# nmcli connection add con-name ens37 ifname ens37 type team-slave master team0 [root@hrz3 ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33 ens36 c399a5f4-2cb3-45b9-8261-37269597c024 ethernet ens36 ens37 143dddaa-7c5c-498e-8a65-18a1b0057180 ethernet ens37 team0 43ba7d1c-2472-430c-80f0-8e767bcedad8 team team0 virbr0 199846fc-481d-489c-af7b-12c9e664bd9c bridge virbr0
-
激活组接口
nmcli connection up team0
-
重启网卡服务(建议操作)
systemctl restart network
-
查看组队状态
teamdctl team0 state
[root@hrz3 ~]# teamdctl team0 state setup:runner: activebackup ports:ens36link watches:link summary: upinstance[link_watch_0]:name: ethtoollink: updown count: 0ens37link watches:link summary: upinstance[link_watch_0]:name: ethtoollink: updown count: 0 runner:active port: ens36
server2 配置
- 步骤与 server1 一致,仅需将 team0 的 IP 修改为
192.168.200.20/24
。
测试
- 在 server1 上执行
ping 192.168.0.2
(server2 的 team0 接口 IP),若能 ping 通则配置成功。
[root@hrz3 ~]# ping 192.168.200.20
PING 192.168.200.20 (192.168.200.20) 56(84) bytes of data.
64 bytes from 192.168.200.20: icmp_seq=1 ttl=64 time=0.314 ms
64 bytes from 192.168.200.20: icmp_seq=2 ttl=64 time=0.321 ms
二、软件网桥
1. 基本概念
- 网桥是链路层设备,基于 MAC 地址转发网络流量,通过学习主机 MAC 地址构建 MAC 地址表(转发表),并依据表中信息决策数据包转发端口。
- Linux 环境中可通过软件网桥仿真硬件网桥,常见应用于虚拟化场景,用于在多个虚拟 NIC 间共享硬件 NIC。
2. 核心功能
- MAC 学习:记录数据包来源 MAC 地址与对应端口,建立 “地址 - 端口” 对照表(转发表)。
- 报文转发:提取数据包的目的 MAC 地址,从转发表中查找对应端口并转发数据。
3. 配置步骤
-
创建软件网桥
[root@hrz2 ~]# nmcli connection add con-name bridge0 ifname bridge0 type bridge [root@hrz2 ~]# nmcli connection show NAME UUID TYPE DEVICE ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33 virbr0 f636e086-5953-48a8-b9c4-c033f9f54deb bridge virbr0 bridge0 a0353cad-39e3-4333-b9d7-b359fb8e5a9e bridge bridge0
-
配置静态 IP(可选)
[root@hrz2 ~]# nmcli connection modify bridge0 ipv4.addresses 192.168.200.20/24 ipv4.method manual connection.autoconnect yes [root@hrz2 ~]# ip a .......... 8: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:08:b6:b1 brd ff:ff:ff:ff:ff:ffinet 192.168.200.20/24 brd 192.168.200.255 scope global noprefixroute bridge0valid_lft forever preferred_lft foreverinet6 fe80::5e7b:f11f:7aee:998f/64 scope link noprefixroute valid_lft forever preferred_lft forever
-
添加接口至网桥(将 ens37、ens40、ens41 等接口连接到 bridge0,注意避免重复命名)
[root@hrz2 ~]# nmcli connection add con-name bridge0-ens36 ifname ens36 type bridge-slave master bridge0 [root@hrz2 ~]# nmcli connection add con-name bridge0-ens37 ifname ens37 type bridge-slave master bridge0
-
激活网桥
[root@hrz2 ~]# nmcli connection up bridge0
-
重启网卡服务(建议操作)
[root@hrz2 ~]# systemctl restart network
4. 流量分担设置
-
开启 IP 转发,使多个网卡分担流量:
[root@hrz2 ~]# vim /etc/sysctl.confnet.ipv4.ip_forward = 1[root@hrz2 ~]# sysctl -p net.ipv4.ip_forward = 1
网络测试
[root@hrz2 ~]# ping 192.168.200.30
PING 192.168.200.30 (192.168.200.30) 56(84) bytes of data.
64 bytes from 192.168.200.30: icmp_seq=1 ttl=64 time=0.302 ms
64 bytes from 192.168.200.30: icmp_seq=2 ttl=64 time=0.330 ms
64 bytes from 192.168.200.30: icmp_seq=3 ttl=64 time=0.431 ms