Schlechte Load-Balancer-Leistung auf Rackspace und Centos

7

Ich teste verschiedene Optionen für den Lastausgleich und erhalte schlechte Ergebnisse mit Nginx, Haproxy und Lack. Ich habe einen 4 GB Load Balancer bei Rackspace, der auf 4x1 GB App-Server trifft.

Ich treffe eine URL namens "/ slow", die absichtlich 500 ms wartet, bevor sie antwortet. Wenn ich einen Anwendungsserver direkt anrufe, kann er eine Verbindungsrate von 1600-1800 pro Sekunde verarbeiten.

Wenn ich den Nginx Load Balancer drücke, kann er nur etwa 2000 Verbindungen verarbeiten. Ich hatte auf etwas gehofft, das näher an 4x1600 = 6000 liegt. Unten ist der Befehl, mit dem ich es teste. Dies wird parallel auf 40 Instanzen mit 256 MB ausgeführt. Ich setze num_call absichtlich auf 1, weil ich die Verbindungsleistung sehen möchte. Höher als das und ich bekomme viele Fehler.

httperf --server 50.56.80.227 --port 1555 --uri /slow --rate 50 --num-call 1 --num-conn 100 --timeout 5

Hier ist meine Nginx-Konfiguration: https://gist.github.com/1299501

Also, hier ist die seltsame Sache, egal ob ich Nginx, Haproxy oder Lack verwende, ich erhalte ungefähr die gleichen Ergebnisse. Ich habe jedoch die neuen Cloud-Balancer von Rackspace getestet und sie erzielen eine viel bessere Leistung (gut mit 7000 / s). Da nginx und die anderen alle auf einer von mir eingerichteten Instanz ausgeführt werden und der Rackspace-Balancer nicht, schätze ich, dass etwas an dem System nicht stimmt. Ich würde lieber einen Balancer verwenden, den ich kontrolliere, damit ich Caching, GZIP, SSL und andere Dinge hinzufügen kann.

Wie kann ich herausfinden, was der Engpass ist? Gibt es irgendetwas, das ich am System optimieren sollte, um die Leistung zu verbessern? Benötige ich mehr als 4 GB RAM? (Die Ram-Nutzung ist während des Tests nicht hoch). Irgendwelche anderen zufälligen Ideen?

Update: Ich habe gerade die Größe des Balancers auf 8 GB geändert und er hat eine viel bessere Leistung, bis zu 6000-7000 oder vergleichbar mit den Rackspace-Balancern. Dies macht keinen Sinn, da zuvor nicht der Arbeitsspeicher knapp wurde.

Update: Hier ist ein Beispiel für die Ausgabe von httperf, wenn ich den Balancer überlade (bei der 8-GB-Version also höher als zuvor, aber die Fehler sind ähnlich): https://gist.github.com/1299628

Sean Clark Hess
quelle
Bitte zeigen Sie uns die tatsächliche Ausgabe Ihres Befehls. Übrigens, parallele 40 Instanzen * 50 Aufrufe pro Sekunde (Ihre Konfigurationswerte) == 2000 Anforderungen pro Sekunde. Vielleicht ist das dein Problem?
Jeff Ferland
2000 habe ich beabsichtigt. Was meinst du? Ich kann ~ 1700 Verbindungen pro App-Server erhalten, daher sollte ich mit 4 App-Servern ungefähr das Vierfache erreichen, es sei denn, der Balancer ist der Engpass. Es handhabt 2000, kann aber nicht viel mehr als das.
Sean Clark Hess
Das Zurücksetzen der Verbindung klingt sicher nach einem kurzlebigen Problem mit Ports / Zeitüberwachung. Versuchen Sie dies von einer einzelnen IP / einem einzelnen Host aus zu testen?
Polynom
Nein, ich verteile die Tests auf 40 256-MB-Server. Kann ich etwas überprüfen, um festzustellen, ob dies das Problem ist?
Sean Clark Hess
Wie viele offene Dateideskriptoren hat Ihr System maximal für nginx? Versuchen Sie bashs "ulimit -n" unter nginx user. Oder unter normalem Benutzer, um die Standardeinstellung anzuzeigen.
Sergey

Antworten:

4

Ich bin auch in der Rackspace Cloud und habe ein sehr ähnliches Problem. Ich glaube, das Problem ist folgendes:

FAQ zu Rackspace Cloud Server

Aus dem, was Sie beschreiben, geht hervor, dass Sie einfach die erbärmlichen Mengen an Bandbreite, die uns der Rackspace bietet, voll ausschöpfen und fast ausschließlich die erstaunlichen Leistungssteigerungen erzielen, die Dinge wie Varnish / Nginx bieten.

Führen Sie zur Bestätigung einige Ihrer Benchmarks bei geöffnetem iftop erneut aus und beobachten Sie, wie die Rackspace-Werte für jede Servergröße vollständig ausgeschöpft werden.

WerkkreW
quelle