weidner/archives/2012/07/

Anycast

IP Anycast ist eine Adressierungsart in Computernetzen, bei der ich über eine Adresse einen einzelnen Rechner aus einer ganzen Gruppe von Rechnern ansprechen kann. Es antwortet derjenige, der über die kürzeste Route erreichbar ist.

Welche Vorteile und Nachteile hat das?

Vorteile

Nachteile

Wann nehme ich das?

Wenn ich ein größeres Netz betreibe und für Anycast geeignete Dienste redundant anbieten will. Die kürzeren Zugrifffszeiten und die Entlastung des Netzes kommen besonders bei weit verzweigten Netzen zur Geltung.

Wie funktioniert das?

Jeder Anycast-Server nimmt am verwendeten Routing-Protokoll teil und speist die Anycast-Adresse als Hostroute mit seiner Unicast-Adresse als Gateway ein. Durch das Routing-Protokoll wird sichergestellt, dass an jeder Stelle im Netz der nächstgelegene Anycast-Server verwendet wird.

Auf Linux-Servern kann ich die Anycast-Hostroute zum Beispiel mit quagga, einer Routing-Software, in das Netz einspeisen. Die Adresse selbst binde ich an die loopback Schnittstelle (lo). Dafür verwende ich vorzugsweise ein Skript, mit dem ich die Adressen einfach und automatisch beim Start des Dienstes aktivieren kann.

Welche Dienste sind geeignet?

Geeignet sind vor allem UDP-Dienste, die mit einer Anfrage/Antwort auskommen. Mit einigen Vorkehrungen ist es möglich TCP-Dienste über Anycast zu betreiben.

Was kann schief gehen?

Erreichbarkeit von Anycast-Servern im gleichen Netzsegment

Wenn ein Anycast-Server im selben Netzsegment wie seine Clients angeschlossen ist, dann versuchen diese zunächst, ihn über ihr Gateway zu erreichen. Dieses verweist sie dann über ICMP-Redirect-Pakete an den Server. Wenn auf den Clients eine Paketfirewall aktiv ist, die ICMP-Redirects unterbindet (manche schlecht eingestellten MS-Windows Firwalls machen das), können die Clients den Server nicht oder nur sehr unzuverlässig erreichen. Im Zweifelsfall platziere ich den Anycast-Server so, das immer mindestens ein Router zwischen ihm und den Clients liegt.

Ausfall eines Anycast-Dienstes, aber nicht des betreffenden Serverhosts

Wenn beispielsweise der DNS- oder NTP-Dienst auf dem Server ausfällt, aber die Route noch eingespeist wird, so bekommt der Server zwar die Anfragen der Clients, kann sie aber nicht beantworten. Die Clients können ihrerseits keinen anderen Server ansprechen, da dieser Server über das Routingprotokoll ausgewählt wird. Sinnvoll ist, den Dienst direkt auf dem Server zu überwachen und die Route aktiv abzumelden, sobald der Dienst ausfällt. Dazu ist es sinnvoll, verschiedene Anycast-Adressen für verschiedene Dienste (wie DNS, NTP) zu verwenden. Diese Adressen sollten einzeln und gesamt deaktivierbar sein und auf dem Rechner selbst sollten die Dienste lokal überwacht werden, zum Beispiel mit mon.

Wechsel des Anycast-Servers während einer bestehenden TCP-Verbindung

Wenn Anycast für ein HTTP-Content-Delivery-Network (CDN) verwendet wird, kann es passieren, dass mitten in einer HTTP-Übertragung der Server gewechselt wird. Der neue Server kennt im Allgemeinen nicht den Zustand der TCP-Verbindung und beendet diese. Da ein Ausfall eines HTTP-Servers den gleichen Effekt hätte ist das an und für sich nicht weiter tragisch. Bei Anycast ist es allerdings möglich, das bei einer Routingänderung während der Übertragung (zum Beispiel durch Ausfall einer Verbindung und Umschaltung auf eine andere) auf einmal ein anderer Server verwendet wird und die Verbindung beendet, obwohl der alte Server noch aktiv ist. Das passiert bei Unicast nicht.

Weitergehende Informationen

https://de.wikipedia.org/wiki/Anycast

https://tools.ietf.org/html/rfc1546

https://tools.ietf.org/html/rfc3068

https://tools.ietf.org/html/rfc3446

http://www.netlinxinc.com/netlinx-blog/45-dns/118-introduction-to-anycast-dns.html

http://www.net.cmu.edu/pres/anycast/

http://www.nanog.org/meetings/nanog28/presentations/sink.pdf

Posted 2012-07-15
Tags: