Appearance
IDC 二层架构:从堆叠到去堆叠
堆叠技术
堆叠技术很长一段时间主要 解决服务器 ToR(Top-of-Rack) 上联链路的高可用问题,即服务器双网卡分别接入两台交换机,堆叠让其形成一个逻辑设备,从而实现链路聚合(LACP)和主备切换的能力。
堆叠优点:
- 统一管理:作为单设备配置和监控,简化运维。
- 上/下联聚合:支持跨设备链路聚合。
- 主控冗余:主备热切换提供一定程度的高可用。
- 资源共享:MAC 表、路由表、ARP 等控制平面资源统一。
常见堆叠技术:
- Cisco StackWise(Catalyst 系列)
- Huawei iStack
- H3C IRF
- Aruba VSF
二、堆叠弊端与演化
尽管堆叠技术解决了初期网络规模扩展和高可用问题,但在大规模数据中心中暴露出不少问题:
问题 | 描述 |
---|---|
脑裂 | 堆叠链中断导致堆叠设备产生多个“主控”,引发冲突和广播风暴 |
升级困难 | 大多数堆叠需要整组设备统一升级,涉及全链路中断 |
厂商依赖强 | 多为私有协议,跨厂商部署受限 |
这些挑战促使业界开始探索“去堆叠”架构。
三、技术演进:从堆叠到去堆叠
在堆叠技术难以满足灵活性与可扩展性要求的背景下,出现了以下几类典型演进技术:
✅ Cisco VPC / 标准化 M-LAG / MC-LAG(Multi-Chassis Link Aggregation Group)
为了解决堆叠的诸多问题,Cisco 推出了 VPC(Virtual PortChannel) 技术,允许两台独立设备对下提供跨设备链路聚合能力。随后该思路被标准化并演化为 M-LAG(Multi-Chassis Link Aggregation)、MC-LAG 多点连接聚合 (Multi-Chassis Link Aggregation Group) 等技术。
这些方案通过一定的状态同步机制(keepalive 链路、状态数据库同步等),实现设备之间的协作,而非合并。
参考文档
https://www.codenong.com/cs106890337/
https://zhuanlan.zhihu.com/p/62024674
https://www.ichenfu.com/2025/07/18/broadcast-arp-and-nd-on-hw-offloaded-bonding/
https://www.h3c.com/cn/Service/Document_Software/Document_Center/Home/Switches/00-Public/Configure/Practice/H3C_S_MLAG-BP_Long/
https://support.huawei.com/hedex/hdx.do?docid=EDOC1100457211&id=ZH-CN_CONCEPT_0000001309217813
为简化部署成本,在无聚合需求场景中,也可以通过服务器或交换机主动发送 Gratuitous ARP 或 Proxy ARP 的方式,让上游设备快速更新 ARP 缓存,实现流量切换。适合主备架构、低成本冗余场景。
交换机配置
- 华为交换机配置
vlan 30
interface Eth-Trunk 30
mode lacp-dynamic
lacp system-id 00e0-fc12-3456
port link-type access
port default vlan 30
interface GE1/0/3
Eth-Trunk 30
int vlan 30
ip address 172.16.30.1 255.255.255.0
arp proxy anyway enable
mac-address 7073-8d35-f168
arp delete trigger link-down enable
arp direct-route enable
arp direct-route preference 1
Linux 修改内核
默认情况 ARP 请求/回应只会从一个活跃的物理网卡发送,具体取决于 xmit_hash_policy 策略(比如基于 MAC、IP、端口哈希)。去堆叠架构如果 ARP 请求只从其中一个物理口发出,另一台交换机就学不到服务器的 MAC 地址,从而无法回送数据包。所以需要“ARP 双发”
- 下载源码 & 安装依赖
sudo apt install linux-source
sudo apt install -y openssl flex bison ncurses* libelf-dev libssl-dev libffi-dev build-essential dwarves
- 修改代码重新编译
ubuntu@ubuntu:/usr/src$ ls
linux-source-4.15.0 linux-source-4.15.0.tar.bz2
cd linux-source-4.15.0
tar -xvf linux-source-4.15.0.tar.bz2
cd linux-source-4.15.0
make menuconfig
vim .config
CONFIG_DEBUG_INFO_BTF
CONFIG_SYSTEM_TRUSTED_KEYS
CONFIG_SYSTEM_REVOCATION_KEYS
vim ./drivers/net/bonding/bond_main.c // 搜索 bond_3ad_xor_xmit 函数添加如下代码,实现在 LACP bond 模式下对 ARP 包进行广播(ARP 双发)
1. 在 bond_3ad_xor_xmit 函数上添加 `static int bond_xmit_broadcast(struct sk_buff *skb, struct net_device *dev);` 这行代码
2. 在 bond_3ad_xor_xmit 函数中添加如下代码
// === [新增代码] 判断是否为 ARP 包,进行广播发送 ===
if (skb->protocol == htons(ETH_P_ARP)) {
// 对 ARP 包进行广播
return bond_xmit_broadcast(skb, dev);
}
make -j 64 CFLAGS_MODULE=-fno-strict-aliasing
make modules_install
make install
# 生成 deb 包
make -j64 bindeb-pkg
- 网卡配置
root@ubuntu:/home/eve# cat /etc/netplan/01-netcfg.yaml
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
eth1:
dhcp4: no
eth2:
dhcp4: no
addresses:
- 192.168.170.200/24
gateway4: 192.168.170.2
nameservers:
addresses: [192.168.5.1, 8.8.8.8]
bonds:
bond0:
interfaces: [eth0, eth1]
parameters:
mode: 802.3ad
addresses: [172.16.30.100/24]
# 检查 bond0 状态
cat /proc/net/bonding/bond0
# 如果因为 speed eth-trunk 无法 Selected 可以手动调整
sudo ethtool -s eth0 autoneg off speed 1000 duplex full
sudo ethtool -s eth1 autoneg off speed 1000 duplex full
sudo ip link set bond0 down && sudo ip link set bond0 up
sudo ip link set eth0 down && sudo ip link set eth0 up
sudo ip link set eth1 down && sudo ip link set eth1 up