Ich verwende derzeit DNS Round Robin für den Lastausgleich, was großartig funktioniert. Die Aufzeichnungen sehen so aus (ich habe eine TTL von 120 Sekunden)
;; ANSWER SECTION:
orion.2x.to. 116 IN A 80.237.201.41
orion.2x.to. 116 IN A 87.230.54.12
orion.2x.to. 116 IN A 87.230.100.10
orion.2x.to. 116 IN A 87.230.51.65
Ich habe erfahren, dass nicht jeder ISP / jedes Gerät eine solche Antwort gleich behandelt. Beispielsweise drehen einige DNS-Server die Adressen zufällig oder durchlaufen sie immer. Einige verbreiten nur den ersten Eintrag, andere versuchen anhand der IP-Adresse herauszufinden, welcher am besten (regional in der Nähe) ist.
Wenn die Benutzerbasis jedoch groß genug ist (verteilt auf mehrere ISPs usw.), ist der Ausgleich ziemlich gut. Die Abweichungen vom Server mit dem höchsten zum niedrigsten Server überschreiten kaum jeweils 15%.
Jetzt habe ich jedoch das Problem, dass ich mehr Server in die Systeme einführe und dass nicht alle die gleichen Kapazitäten haben.
Ich habe derzeit nur 1-Gbit / s-Server, möchte aber auch mit 100-Mbit / s-Servern und 10-Gbit / s-Servern arbeiten.
Ich möchte also einen Server mit 10 Gbit / s und einem Gewicht von 100, einen 1-Gbit / s-Server mit einem Gewicht von 10 und einen 100-Mbit / s-Server mit einem Gewicht von 1 einführen.
Ich habe zuvor zweimal Server hinzugefügt, um mehr Datenverkehr zu ihnen zu bringen (was gut funktioniert hat - die Bandbreite hat sich fast verdoppelt). Das 100-fache Hinzufügen eines 10-Gbit / s-Servers zu DNS ist jedoch etwas lächerlich.
Also habe ich darüber nachgedacht, die TTL zu verwenden.
Wenn ich Server A 240 Sekunden TTL und Server B nur 120 Sekunden gebe (was ungefähr das Minimum für Round Robin ist, da viele DNS-Server auf 120 gesetzt sind, wenn eine niedrigere TTL angegeben ist (wie ich gehört habe)). Ich denke, so etwas sollte in einem idealen Szenario auftreten:
First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds
Second 120 seconds
50% of requests still have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds
Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B (from the 50% of Server A that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec
Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...
Wie Sie sehen, ist die Vorhersage ziemlich kompliziert und wird in der Praxis mit Sicherheit nicht so funktionieren. Aber es sollte sich definitiv auf die Distribution auswirken!
Ich weiß, dass gewichtetes Round Robin existiert und nur vom Root-Server gesteuert wird. Beim Antworten werden nur DNS-Einträge durchlaufen und DNS-Einträge mit einer festgelegten Wahrscheinlichkeit zurückgegeben, die der Gewichtung entspricht. Mein DNS-Server unterstützt dies nicht und meine Anforderungen sind nicht so genau. Wenn es nicht perfekt wiegt, ist es in Ordnung, aber es sollte in die richtige Richtung gehen.
Ich denke, die Verwendung des TTL-Felds könnte eine elegantere und einfachere Lösung sein - und es ist kein DNS-Server erforderlich, der dies dynamisch steuert, wodurch Ressourcen gespart werden -, was meiner Meinung nach der springende Punkt beim DNS-Lastausgleich im Vergleich zum Hardware-Lastausgleich ist.
Meine Frage lautet nun: Gibt es Best Practices / Methoden / Faustregeln zur Gewichtung der Round-Robin-Verteilung mithilfe des TTL-Attributs von DNS-Einträgen?
Bearbeiten:
Das System ist ein Forward-Proxy-Server-System. Die Bandbreite (keine Anforderungen) überschreitet die Kapazität eines einzelnen Servers mit Ethernet. Ich brauche also eine Ausgleichslösung, die die Bandbreite auf mehrere Server verteilt. Gibt es alternative Methoden als die Verwendung von DNS? Natürlich kann ich einen Load Balancer mit Fibre Channel usw. verwenden, aber die Kosten sind lächerlich und es erhöht auch nur die Breite des Engpasses und beseitigt ihn nicht. Das einzige, woran ich denken kann, sind Anycast-IP-Adressen (Anycast oder Multicast?), Aber ich habe nicht die Mittel, um ein solches System einzurichten.