Sunday, August 25, 2019

Anycast IP plugin

Hi all,

I have been wondering for a while about the practicality of a software-solution I've developed - would appreciate your opinion and level of interest in this.

The issue is such - Active/Active load balancing is hard. Even if your service is a nice stateless UDP app, if you're using VRRP or similar solutions for high availability you're pretty limited as it requires L2 adjacency between all participating servers. Distributing an anycast IP is not fun, as it mixes underlay (for added static routes or directing the network to point at some servers for the same address) and overlay (the usual configuration of loopbacks and configuring non-local bind, routing and a bunch of other stuff).

What I'm suggesting is a nice Ansible playbook (or installable software, it's really the same) which configures the following:

  1. The anycast address on the servers, some LB software plus its configuration towards backend servers
  2. EXAbgp/BIRD used to peer with the ToR switch/Default gateway/Whatever BGP capable switch you choose (possible to use other routing protocols as well)
  3. An ACL/prefix-list on the switch which prevents the specific BGP peering from learning any IP address which is not the anycast address
  4. Keepalived used to monitor processes, status or whatever custom logic you want to apply and stop advertising the anycast IP as soon as the service is marked as down
  5. Basic monitoring showing the distribution of load across all servers, the status of BGP/LB/Keepalived services, configuration compliance etc.

What do you think? I've been looking for a solution which will do this all together, the closest I've found is Calico, MetalLB but of course that those are a partial match and are sort of an overkill.

Cheers.



No comments:

Post a Comment