An Architecture of Highly Available Services using Anycast and Segment Routing in IPv6
IPv6 anycast is increasingly being used to provide geoproximity, fault-tolerance and load balancing solutions for services that are available from multiple points …
Talk Title | An Architecture of Highly Available Services using Anycast and Segment Routing in IPv6 |
Speakers | Andrew Wang |
Conference | NANOG77 |
Conf Tag | |
Location | Austin, TX |
Date | Oct 28 2019 - Oct 30 2019 |
URL | Talk Page |
Slides | Talk Slides |
Video | Talk Video |
IPv6 anycast is increasingly being used to provide geoproximity, fault-tolerance and load balancing solutions for services that are available from multiple points in the network. Anycast is a technique that can be used to direct clients to the closest server that can respond to the request, often reducing latency and improving the client experience. The major challenge in such systems is handling TCP connections during outages, as nodes go down and eventually come back up. We present an architecture that leverages Segment Routing in IPv6 (SRv6) to ensure fast failover in the presence of server outage. i.e., requests are redirected to a remote server, but keep ongoing TCP connections to remote servers intact in the presence of local recovery, all this transparently to the client making the request. In this presentation we cover basic concepts of IPv6 anycast and Segment Routing. We show how anycast can be achieved in IPv6 using BGP and the challenges it presents for a TCP connection. Then we will go over SRv6, introduce its main principles, and show how it can be leveraged to support stable TCP connections for services that are anycast from multiple points in the network. A short demonstration running in Containernet (mininet based network emulator that supports docker images) will tie all the concepts together: GoBGP for route advertisement, Netbricks (framework for developing DPDK apps) for SRv6 packet handling and Consul for service healthcheck. We will show a client making a request which will be served by a local cluster, and how the request will be fulfilled by a remote server when the local server is unavailable.