Dual-Upstream Load Balancing & Failover (PCC + Recursive)
Production RoutingFailoverPCCMikroTik
PCC load balancing over two metro-Ethernet upstreams with recursive failover; fixed broken WhatsApp calls by changing how sessions are pinned.
Problem
Upstream links flap, so failover has to be automatic. After load balancing was in place, customers reported WhatsApp voice and video calls stuck on "Connecting". The PCC rule split traffic per connection, so one customer could leave through two public addresses at once, which breaks call setup.
My role
Found the cause of the call problem, proposed the fix with rollback values, and verified it after it was applied.
Scale
- 2 metro-Ethernet upstreams, multi-gigabit total
- 1,000+ customers behind the router
What I built
- Recursive routes with a health check per upstream; the backup path takes over when a check fails.
- PCC changed from both-addresses to src-address, so all traffic from one customer stays on one upstream.
- UDP connection-tracking timeout raised from 10 s to 30 s so call sessions are not dropped between packets.
- Health-check target moved to a host that answers reliably, to avoid false failovers.
- Test scenarios and rollback values written down before the change.
Architecture
-
Customers
- PPPoE subscribers
-
Edge
- Mangle: PCC by source address
-
Routing
- Table A → Upstream A
- Table B → Upstream B
-
Checks
- Recursive health check
Outcome
- WhatsApp call complaints stopped after the PCC change.
- Failover happens automatically when an upstream drops.
- Fewer false failovers after changing the health-check target.
Stack
MikroTik RouterOSPCCMangleRecursive routingConnection trackingNetwatch
Next project
ODP/ODC Deployment Tracker