聚合中的控制协议
LACP 是链路聚合控制协议,用于让直连两端交换成员端口信息,建立并维护兼容的聚合关系。链路聚合把多条物理连接作为逻辑连接使用,而 LACP 处理的是哪些端口可以参加、双方掌握的状态是否一致、收发是否可以启用。IEEE 802.1AX-2020 属于链路聚合标准,工作组记录其于 2020 年1月30日获批。
启用 LACP 并不意味着把接上的所有网线无条件并成一组。设备需要根据端口属性、配置及对端信息进行选择;Linux bonding 的动态聚合模式就要求聚合成员具备相同速率和双工设置,并要求对端支持相应动态聚合。静态聚合和其他网卡绑定模式也不应统称为 LACP。
双方交换什么状态
在某一端的视角中,本端称为 Actor,对端称为 Partner;交换方向反过来时,这两个角色也随之交换。LACP 数据单元传递系统标识、端口标识、优先级、运行键值及状态。键值帮助表示端口的聚合兼容关系,但不能脱离系统身份和其他条件,仅凭两处数字相同就认定线路能够聚合。
同步状态表示该链路被分配到正确的聚合组,且与所交换的系统标识和运行键一致。Collecting 表示允许把这条链路收到的帧交给聚合器,Distributing 表示允许通过它发送聚合流量。物理链路亮起,与已经具备这些收发资格,是不同层面的状态。
主动模式愿意主动发送协议报文,被动模式通常在对方主动参与时回应。因此,在普通主动/被动协商方式中,两端都只被动等待不会自行发起交换。排障不能只看本端配置,还要看收到的对端状态以及同步、收集、分发是否实际成立。
一条成员失效之后
假设两端已有两条正常参与收发的成员链路,其中一条断开。物理链路监测可以发现端口不可用,聚合控制据此撤销该成员的使用资格;若物理连接仍显示正常但收不到对端 LACP 报文,则需由协议接收定时器识别状态过期。两种故障路径不必具有相同的发现时间。
Juniper 文档说明,快速周期为每秒一次报文,慢速为每30秒一次,连续缺失三个预期周期分别对应约3秒和90秒的超时尺度。这些数字不是从任意故障发生到业务恢复的统一保证,还要考虑双方所声明的超时偏好及状态处理。恢复收报后,端口也应重新形成兼容、同步的关系,而不是仅凭接上线缆就立即分担数据。
剩余链路若仍有效,聚合可能继续工作,但容量减少;若配置了最低活动成员数量,也可能不再满足整体可用条件。故障期间已经发出的帧并没有因为使用 LACP 就自动获得重传保证。
协商不等于流量均分
选定可用成员之后,数据面还须决定每个流或帧走哪条链路。Linux bonding 文档将这部分作为独立的发送哈希策略说明:可以利用不同层的地址和端口信息分配流量,策略还需注意同一会话的帧顺序。LACP 本身不是这些哈希函数的名称。
所以,两条链路成功聚合不代表每秒流量必定各占一半,也不代表一个连接能获得两条链路带宽之和。控制协商成功、链路可用性和负载分布是否合适,是三个相关但需要分别检查的问题。
参考:[3]