Projects

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

  1. Customers

    • PPPoE subscribers
  2. Edge

    • Mangle: PCC by source address
  3. Routing

    • Table A → Upstream A
    • Table B → Upstream B
  4. Checks

    • Recursive health check
When an upstream check fails, its table falls back to the other upstream.

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