ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

共建共享场景跨运营商负载均衡:从流量归属到分流网关实践

共建共享场景跨运营商负载均衡:从流量归属到分流网关实践 简介一份聚焦共建共享场景下跨运营商负载均衡方案的研究案例面向运营商网络优化工程师、基站维护人员及通信专业学习者针对当前网络资源短缺与业务分布不均衡导致局部高负荷的问题提供从原理到落地的完整思路。文档为单个PDF文件压缩包大小901KB共10页内容涵盖项目背景、网络负载均衡原理、处理流程以及电联共享异厂家设备间的负载均衡实现尤其对流量监控、流量分配、流量控制与优化等环节做了清晰梳理。创新实施部分详细介绍了验证站点选择、参数配置、信令观测与指标评估方法并基于合肥电信LTE网络高负荷小区占比长期约8%的实际场景总结了试点效果。读者可据此理解异厂家负载均衡的交互机制和配置要点掌握负荷均衡优化的关键步骤。已有172人学习该资源适合需要深入共建共享网络优化实践的技术人员参考。1. 共建共享场景下跨运营商负载均衡卡点不在设备而在归属把三家运营商的用户放进同一个基站、同一套传输听着是省钱的妙招但流量一旦进了共享管道立刻会撞上一个问题用户归属哪家决定了他该从哪个出口回网。基站不知道传输也不知道只有核心网知道。于是负载均衡在这里不再是把请求分给几台服务器那种经典玩法而是要在共享接入侧把不同归属的用户流按策略引到对应的运营商出口。很多团队第一次接触这个需求第一反应是上硬件负载均衡器或者直接套用 nginx 的反向代理思路结果发现在这个场景里流量根本不分 HTTP 还是 TCP而是按用户、按 APN、按目的 IP 段来分的。这篇文章就把这个方案的选型、落地和排错路径讲清楚适合正在做共建共享网络规划、边缘接入网关选型或者被共享基站流量怎么各回各家这个问题卡住的运维和架构同事。2. 跨运营商负载均衡到底在均衡什么先拆流量对象再谈策略2.1 共建共享接入网下的流量归属模型共建共享的常见形态是两家或三家运营商共同建设一张无线接入网基站信号对所有签约用户开放。用户接入后基站本身不区分用户归属数据包通过共享传输回传到某个汇聚节点再由汇聚节点决定怎么分流。这里的核心矛盾是共享是物理层面的而计费、策略、内容访问权限都是逻辑层面的按归属运营商隔离。一个典型的归属模型是用户 A 属于运营商 X签约的是 X 的 VoLTE、互联网和政企专网用户 B 属于运营商 Y签约的是 Y 的物联网和互联网。两个人可能在同一时刻接入同一个基站发出的流量到了共享承载网后需要分别进入 X 和 Y 的核心网。如果分流做错A 的流量被送到 Y 的核心网Y 的核心网不认识 A 的用户上下文轻则丢包重则触发位置更新风暴。所以在设计负载均衡方案前第一件事是把流量对象拆出维度。我一般会按三层来分用户维度IMSI 前缀、MSISDN 号段用来识别归属会话维度APN / DNN用来识别业务类型网络维度目的 IP 网段用来识别内容资源归属这三个维度决定了分流策略的粒度。只按目的 IP 做最简单但用户归属不同导致的服务差异比如某运营商自有 CDN 节点会完全失效。只按用户做又会在访问第三方公共资源时失去优化空间。实际方案基本都是多层判定的组合。2.2 为什么通用负载均衡器在跨运营商场景下会失灵常见的企业级负载均衡方案比如 nginx 反向代理、LVS 和 F5 这类硬件 LB核心能力集中在四层和七层转发。四层转发看 IP 和端口七层转发看 HTTP 头、URL 和 cookie。但在共建共享的跨运营商分流场景里网关收到的原始流量可能是 GTP-U 封装的用户面报文也可能是已经解封装后的纯 IP 报文。如果是 GTP-U 报文通用 LB 根本解不出内层 IP除非做 GTP 卸载而这恰恰不是 nginx 和 LVS 的强项。另一个失灵点是会话保持逻辑。通用 LB 的会话保持通常基于源 IP 或 cookie但移动网络用户的源 IP 是核心网分配的同一个用户在一次会话过程中可能发生 IP 地址更新比如从 4G 切换到 5G 后地址重分配。如果 LB 还按旧 IP 做关联流量会被错误地送到另一个运营商出口导致应用重连甚至掉线。提示不要把机房常用的 nginx 负载均衡配置直接迁移到跨运营商分流节点上。这里要解决的不是请求到哪台服务器而是这个用户属于哪张网、走哪个出口前者是容量调度问题后者是路由决策问题。3. 共享接入侧的分流网关设计从 GTP 卸载到目标网段路由3.1 分流网关在组网中的位置和两种主流接入方式在共建共享场景中分流网关通常放在基站汇聚和运营商核心网之间。物理上可以是一台独立设备也可以部署在共享 UPF用户面功能上作为逻辑网元。它的核心功能是接收共享传输送上来的用户流量识别用户归属按策略转发到对应运营商的出口。常见做法是给每个参与共建的运营商分配一组独立的 VLAN 或 VXLAN 实例网关只负责把报文送到对应实例再由各运营商自己的出口路由器做进一步的路由决策。这样分流网关不感知各运营商内部的路由策略降低了耦合。接入方式上有两种主流选型接入方式典型连接对象优点代价共享传输直连网关基站侧汇聚交换机链路少时延低故障域集中在网关网关性能要求高单点风险大经共享承载网到网关各运营商核心网边缘故障可回退逃生路径明确多一段传输开销时延有损耗我在实际方案里更倾向第二种即共享承载网先兜底网关作为逻辑分流节点挂在边缘。原因很现实直连模式下网关一旦重启所有共享基站用户全部脱网这个事故级别太高而挂在边缘虽然多一跳但至少可以在网关故障时把流量直接送到一个默认出口保证基本通信不中断。3.2 基于用户归属识别的最小可行实现先跑通一个最小闭环比什么都重要。以下用 Linux 主机 iptables 和策略路由做一个简化版分流网关的验证环境它解决的是把一个用户面流量按目的 IP 送到不同运营商出口这个基础需求。真实生产环境一般用支持 GTP 卸载的专用网元但思路完全一致。# 创建两个独立路由表分别对应运营商 X 和运营商 Y 的出口 echo 100 opx /etc/iproute2/rt_tables echo 200 opy /etc/iproute2/rt_tables # 配置两个出口的默认路由各走各的物理链路 ip route add default via 192.168.10.1 dev eth1 table opx ip route add default via 192.168.20.1 dev eth2 table opy # 配置规则目的 IP 属于运营商 X 的 CDN 段走 opx 表 ip rule add from all to 10.128.0.0/16 lookup opx priority 1000 # 配置规则目的 IP 属于运营商 Y 的 CDN 段走 opy 表 ip rule add from all to 10.64.0.0/16 lookup opy priority 1001这段配置的逻辑是先把运营商 X 和运营商 Y 的出口各绑定一张独立路由表再通过ip rule将目标网段映射到对应路由表。priority参数控制匹配顺序数值小的先匹配。注意from all在这里不做源地址限制因为移动用户面的源 IP 是动态的靠目的网段做初始分流最直接。如果要做更细的用户粒度分流需要在网关前先把 GTP 用户面报文解出来然后以内层用户 IP 为 key 去查询用户归属表。这个动作适合用 DPDK 或 XDP 实现纯内核协议栈的 iptables 在高流量下会有性能瓶颈。下面用 Python 模拟一下归属判定的逻辑便于理解# 简化版归属判定逻辑检查 IMSI 号段映射表 subscriber_table { 46000: opx, # 中国移动号段前缀映射到运营商 X 46001: opy, # 中国联通号段前缀映射到运营商 Y } def resolve_owner(imsi): 根据 IMSI 前五位判断归属运营商 prefix imsi[:5] owner subscriber_table.get(prefix, unknown) if owner unknown: # 未匹配号段时回退到默认出口不能丢流量 return opx_default return owner这里的关键点是任何识别逻辑都必须带一个默认回退出口否则遇到未收录的号段会直接丢包。生产环境中归属映射表通常来自运营商之间的结算系统定时同步别指望手动维护。3.3 逃生通道和故障切换的两种回退策略跨运营商分流网关最怕的不是策略配错而是网关设备整体故障。一旦分流能力消失共享基站下所有用户的上行流量都会堆积在网关上而网关已经没有能力判断该往哪送。这时候必须有一个即使送错也比丢了强的兜底机制。第一种回退策略是逃生路由。在共享汇聚交换机上配置一条指向某个默认出口路由的备份路径当检测到与分流网关的保活链路中断时交换机直接把流量转发到该默认出口。代价是这个出口所属的运营商会处理大量非本网用户流量并在结算时产生争议但至少通信不中断。第二种是冷备切换。分流网关做主备两台主设备通过 BFD 通告自己的健康状态备用设备在检测到主设备故障后接管全部虚拟 IP 和路由规则把流量继续按原策略分流。这个方案的切换时间取决于 BFD 检测间隔通常可以做到 1 秒以内代价是需要一台同样配置的备机。4. 3 个必调的负载均衡参数与共享传输链路的排错路径4.1 每个运营商出口链路的权重和阈值参数负载均衡方案里最常被忽视的其实是怎样定义均衡。在跨运营商场景下均衡不是把流量对半分而是按每个运营商的签约用户比例和出口带宽能力做加权分配。以下三个参数是最需要在开局阶段就调好的。第一个是链路权重。假设运营商 X 的出口链路是 10G运营商 Y 的是 5G那么权重比 2:1 是对物理能力的基本尊重。部分分流网关支持动态权重按实时链路利用率自动调整建议先手动固定等流量模型稳定后再开启自动模式。第二个是会话超时时间。用户面的会话超时不能设得太短移动网络用户会频繁发生状态切换TCP 连接可能空闲几十秒后继续传输数据。常见做法是业务面空闲超时设为 300 秒以上控制面信令保持 30 秒级别避免过早释放用户上下文。第三个是最大并发会话数。共享网关上同时存在的用户会话数是动态的要给它设一个告警阈值比如达到硬件处理能力的 70% 就触发扩容或调度提示。如果留着不设高并发时网关的转发时延会直线上升表现为用户测速正常但实际浏览网页明显卡顿。4.2 流量未按预期分流时的 5 步排查法跨运营商分流出问题时现象往往是部分用户上不了网或者某运营商侧链路拥塞而另一侧闲置。按下面的顺序排查效率最高。第一步确认网关是否真正识别了用户归属。在网关上开启会话日志检查日志里记录的用户归属字段是否正确对应其 IMSI 号段。如果归属识别错了先查号段映射表是否过期。第二步检查策略路由表是否被其它规则抢占。用ip rule show和ip route show table opx分别看规则优先级和路由条目确认没有更高优先级的规则把流量截走。常见的坑是默认路由表 main 的优先级是 30000 级别但如果你配的规则没用数字优先级可能被系统默认规则压住。第三步看目的路由是否可达。在网关上来一次ping测试注意要用对应的出口接口出去ping -I eth1 10.128.0.1 ping -I eth2 10.64.0.1-I参数指定源接口能直接验证每个出口链路是否通。如果某个出口不通再检查对端运营商边缘路由器的互联地址和路由通告。第四步确认会话保持是否被破坏。在网关上看活跃 NAT 会话检查同一用户的前后报文是不是走了同一个出口。如果出口变了看是不是多个策略规则同时命中优先级没排对。第五步验证逃生路由有没有误触发。很多低概率故障是逃生路由和正常路由同时存在而且逃生路由的优先级更高导致流量永远走默认出口没有按策略分流。确认逃生路由只在主链路故障时才写入路由表。4.3 和普通企业负载均衡排错的差异点企业内部的负载均衡排错核心手段是看连通性、看会话表、看后端健康检查。跨运营商场景里这些都不够因为还有一个归属判定环节而这个环节的错误不会表现为不通而是表现为通了但走错了路。一个用户访问视频网站如果被错误分流到非归属运营商出口技术上是可以通信的但目的侧做了地域限制或鉴权就会拿到一个错误页面。我一般会用两个维度的日志做交叉验证控制面信令里的用户归属和用户面数据流的实际出口记录。这两个信息对不上问题一定出在分流策略上对得上但业务异常才去查传输链路和业务系统。注意与通用 nginx 负载均衡配置的排查思路不同跨运营商分流问题很少出在后端服务不可用更多出在策略描述的用户维度和实际网络里的用户标识不一致。先核对标识定义再动转发配置。5. 用流量矩阵验证跨运营商负载均衡的效果负载均衡配置完成之后不能只看能上网就算结束。我建议在分流网关的出口侧做一次全量流量统计然后生成流量矩阵按归属运营商和目的网段两个维度核对分流比例。# 在网关出口侧采样 5 分钟统计各出口的总包数 tcpdump -i eth1 -nn -q -c 100000 /tmp/opx_traffic.txt tcpdump -i eth2 -nn -q -c 100000 /tmp/opy_traffic.txt # 统计各出口采样的源 IP 号段归属 awk {print $2} /tmp/opx_traffic.txt | awk -F. {print $1.$2} | sort | uniq -c | sort -nr | head -20这里的逻辑是分别在两个出口抓包然后看源 IP 的 B 段分布再和用户归属表做比对。如果某个 B 段明显属于运营商 X 的用户却大量出现在 eth2运营商 Y 出口说明归属识别或分流策略还有遗漏。流量矩阵方法比单纯看链路利用率准确得多利用率只能告诉你链路忙不忙矩阵能告诉你是谁在占用、该不该占用。验证的另一个维度是时延和丢包。跨运营商分流正确时数据路径是用户 → 共享基站 → 分流网关 → 归属运营商出口 → 目标是不跨网绕行的。如果配置错误流量可能多绕了一圈到另一个运营商的骨干网再迂回用户侧表现是时延增加 20ms 以上。用 ping 统计分位数来判断这个方法在任何迁移和调优后都建议做一次成本极低但很能说明问题。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进