基于dpdk bond lacp模式实现链路聚合

63 阅读4分钟

简介

随着网络技术的飞速发展,高带宽、高可靠性的网络需求日益增长。链路聚合(Link Aggregation)作为一种提升网络性能和可靠性的重要技术,得到了广泛应用。本文将深入探讨基于 DPDK Bond 实现链路聚合,重点介绍 LACP 模式的原理和应用。

PortChannel

PortChannel,也称为 Eth-Trunk 或链路聚合组(LAG),是一种将多个物理以太网接口捆绑成一个逻辑接口的技术。它通过增加链路带宽、实现链路冗余和负载均衡,提高了网络的性能和可靠性。

PortChannel 主要包括以下几个方面:

  • 带宽聚合: 将多个物理链路的带宽叠加,提供更高的带宽。
  • 链路冗余: 当某个成员链路发生故障时,流量可以自动切换到其他正常链路,提高网络的可靠性。
  • 负载均衡: 根据一定的算法,将流量均匀地分配到各个成员链路,提高链路利用率。

LACP

LACP(Link Aggregation Control Protocol,链路聚合控制协议)是一种动态链路聚合协议,它允许交换机之间自动协商链路聚合。

LACP 协议通过交换 LACP 数据包,实现以下功能:

  • 链路发现: 自动发现可以聚合的链路。
  • 参数协商: 协商链路聚合的参数,如系统优先级、端口优先级等。
  • 链路选择: 根据协商结果,选择活动链路。
  • 链路监控: 监控链路的状态,及时发现故障。

LACP 数据包的格式如下:

  • 目的 MAC 地址: 01:80:C2:00:00:02(LACP 多播地址)
  • 源 MAC 地址: 本地端口的 MAC 地址
  • 以太网类型: 0x8809(Slow 协议类型)
  • 协议子类型: 0x01(LACP 协议类型)
  • LACPDU(LACP 数据单元-部分主要字段):
    • Actor System Priority(发起者系统优先级)
    • Actor System ID(发起者系统 ID)
    • Actor Port Priority(发起者端口优先级)
    • Actor Port Number(发起者端口号)
    • Partner System Priority(伙伴系统优先级)
    • Partner System ID(伙伴系统 ID)
    • Partner Port Priority(伙伴端口优先级)
    • Partner Port Number(伙伴端口号)
    • 状态字段

LACP 协商过程主要包括以下几个步骤:

  1. 链路发现: 交换机之间互相交换 LACP 数据包,发现可以聚合的链路。
  2. 参数协商: 交换机之间协商系统优先级、端口优先级等参数。
  3. 链路选择: 交换机根据协商结果,选择活动链路。
  4. 链路监控: 交换机监控链路的状态,及时发现故障。

DPDK 示例

examples/bond/main.c

  • 修改模式为BONDING_MODE_8023AD,表示lacp模式
  • 需要先初始化物理网口
  • 再初始化bond虚拟口
    • 可以完全调用api来实现
    • 也可以通过启动参数--vdev='net_bonding0'来实现
    • 以及--vdev方式下,不支持的选项再通过api来实现
  • 注意LACP通过报文在驱动层处理,不会上送到(即rx不能收到LACP报文)
retval = rte_eth_bond_create("net_bonding0", BONDING_MODE_8023AD,0 /*SOCKET_ID_ANY*/);
  • 普通模式(不开专有队列),循环调用rte_eth_tx_burst(BOND_PORT, 0, NULL, 0);触发驱动发送LACP通告报文
while (global_flag_stru_p->LcoreMainIsRunning) {
		rte_spinlock_unlock(&global_flag_stru_p->lock);
		rx_cnt = rte_eth_rx_burst(BOND_PORT, 0, pkts, MAX_PKT_BURST);
		is_free = 0;
		rte_eth_tx_burst(BOND_PORT, 0, NULL, 0);

image.png

  • 专有队列模式(开专有队列),不需要上层去循环调用rx/tx来触发驱动lacp报文发送
    • 优点:不受上层影响,避免定时通告不准导致波动
    • 缺点:需硬件支持,部分网卡可能不支持

int rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port)

  • 运行

image.png

交换机

配置

  • mode lacp-dynamic 开启lacp模式,也可lacp-static
  • lacp timeout fast 更快地检测到链路故障(1s),对应slow为30s
  • lacp preempt enable 开启抢占,当一个优先级更高的链路从故障状态恢复到可用状态时,它会抢占当前活动的低优先级链路,成为新的活动链路

image.png

状态

image.png

参考