Frage

Wie wir dies in der Vergangenheit getan haben, würde Ich mag nützliche Informationen sammeln für jeden Loadbalancer zu bewegen, wie es sind Fragen, die Ihr Code bewusst sein müssen.

Wir von einem Apache-Server bewegten als Reverse-Proxy / Loadbalancer mit drei Apache-Server hinter Tintenfische.

Wir sind mit PHP / MySQL, so Probleme unterscheiden können.

Dinge, die wir zu lösen hatten:

Sitzungen

Wir zogen von "default" php-Sessions (Dateien) verteilt Memcached-Sitzungen. Einfache Lösung, muss getan werden. Auf diese Weise müssen Sie nicht auch brauchen „Sticky Sessions“ auf Ihrem Loadbalancer.

Caching

Um unsere nicht ausgeschüttete apc-Cache pro Webserver, fügten wir anoter Memcached-Schicht für verteilte Objekt-Caching, und ersetzt alle alten / veraltete filecaching Systeme mit.

Uploads

Uploads gehen zu einem gemeinsamen (nfs) Ordnern.

Dinge, die wir auf Geschwindigkeit optimiert:

Static Files

Unser Haupt NFS läuft ein lighttpd, dient (auch von Nutzern hochgeladen wurden) Bilder. Squid ist sich dessen bewusst und nie fragt unsere Apache-Knoten für Bilder, die eine schöne Leistungssteigerung gab. Squid ist auch so konfiguriert, diese Dateien im RAM zwischengespeichert werden.

Was haben Sie Ihren Code / Projekt für Loadbalancer bereit tun, andere Bedenken für Menschen über diese Bewegung zu denken, und welche Plattform / Sprache sind Sie mit?

War es hilfreich?

Lösung

Wenn dies zu tun:

Für http Knoten, schiebe ich hart für ein einziges System-Image (ocfs2 ist gut für diese) und entweder Pfund oder Kreuzung als Load Balancer verwenden, je nach Szenario. Knoten sollte eine kleine lokale Festplatte für Swap und die meisten (aber nicht alle) Kopfschmerzen von CDSLs zu vermeiden.

Dann bringe ich Xen in den Mix. Wenn Sie eine kleine, zeitliche Menge an Informationen über Xenbus platzieren (das heißt, wie viel virtueller Linux-Speicher hat Prozesse pro VM tatsächlich versprochen aka Committed_AS) Sie schnell eine hirntot Load Balancer erkennen und es anpassen. Oracle fing auch dazu auf .. und arbeitet nun den Ballon Treiber in Linux zu verbessern.

Danach sehe ich die Kosten für die Datenbanknutzung für eine gegebene Anwendung über sqlite3 Aufspalten und was auch immer db die App nativ will, während zu realisieren, dass ich brauche die db aufzuspalten so posix_fadvise () seine Arbeit erledigen kann und nicht Kernel verschmutzen Puffer unnötig. Da die meisten DBMS Dienste ihre eigene Pufferung tun wollen, müssen Sie auch lassen sie ihre eigenen Clustering tun. Das ist wirklich diktiert die Art von DB-Cluster, die ich verwenden und was ich mit dem Ballon Fahrer tun.

Memcache-Server dann booten Sie von einem mageren initrd, wieder, während die privilegierte Domain Uhren ihre Speicher- und CPU-Nutzung, damit sie weiß, wenn mehr zu booten.

Die Wahl des Herzschlag / Übernahme hängt wirklich von dem gegebenen Netz und der erwarteten Nutzung des Clusters. Es ist schwer, dass man zu verallgemeinern.

Das Endergebnis ist in der Regel 5 oder 6 physischen Knoten mit ziemlich viel Speicher ein Virtual Machine Monitor Booten + Gäste während auf gespiegelten Speicher angeschlossen.

Speicher ist auch schwer, in allgemeinen Begriffen zu beschreiben .. manchmal benutze ich Cluster LVM, manchmal nicht. Das wird sich nicht ändern, wenn LVM2 schließlich bewegt sich weg von seiner aktuellen String-basierte API.

Schließlich werden alle dieser Koordinierungs Ergebnisse in so etwas wie Augias Aktualisierung Konfigurationen on the fly, basierend auf Ereignissen kommuniziert über Xenbus. Dazu gehört ocfs2 selbst oder jede andere Dienstleistung, wo Konfigurationen können nicht auf einem einzigen System-Image befinden.

Das ist wirklich eine anwendungsspezifische Frage .. können Sie ein Beispiel geben? Ich liebe memcache, aber nicht jeder kann von der Nutzung, zum Beispiel profitieren. Sind wir Ihre Konfiguration oder sprechen über Best Practices im Allgemeinen bewerten?

Edit:

Es tut uns Leid, weil sie so Linux centric ... sein typisch, was ich benutze, wenn ein Cluster zu entwerfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top