FreeBSD im Cluster (Web Application)

evildaemon

make world
Ich hab mich in den letzten Tagen intensiv mit Clustern und Load-Balancing beschäftigt - gerade mit dem Schwerpunkt Web Application (also HTTPD/Script/DBMS).

Wieso? Ich hab mich gefragt, wie man eine Webanwendung für 1 Million Besucher pro Tag am besten betreiben kann. Sagen wir mal die Seite ist eine Forum für BSD Anhänger ;) und betreibt noch einen Downloaddienst für BSD ISOs (über HTTP und FTP).
Welche Ports können eingesetzt werden? Wie wird alles verbunden? Welche Hardware sollte verwendet werden? Wieviel Hardware braucht man? Was kostet sowas? Wie ist es skalierbar?
Was aber immer der Fall ist : Als Betriebssystem muss FreeBSD eingesetzt werden.

Ich hab auch schon eine Idee - Pan als Load-Balancer, light-tpd als Webserver, PHP als Scriptsprache und PostgreSQL als DBMS. Als DBMS Load-Balancer wird pgpool-II eingesetzt. Download und Upload über Pure-FTPD. Verwaltet wird alles über OpenSSH. Als Firewall dient IPFW. Als Server werden 1 HE und 2 HE Server eingesetzt. Der Vorteil wäre hier wirklich - und das hab ich überprüft - alle Ports ausser PHP stehen unter der BSD Lizenz.

Nun bin ich wirklich kein Experte in Clusterarchitektur oder RZ-Betrieb - und würde einfach gerne wissen wie ihr so ein System aufsetzen würdet.
 
Schau dir z.B. mal "pound" an. Das Ding kann fein die http-Load intelligent auf mehrere Backends verteilen. Ansonsten gibts natuerlch noch suendhaft teure sogenannte "Hardware-Loadbalancer", die meist Linuxbasiert sind.
 
Ist die Anwendung kommerziell und steckt Geld dahinter: Nimm ein "kommerzielles" Produkt (mit Support, SLA etc.) Kostet zwar was aber wenn wo einige Moneten im Spiel sind würde ich mich nicht trauen, eine Speziallösung zusammenzuwurschteln.
(und als einsamer Cowboy bei Problemen dazustehen - das fällt dir irgendwann auf den Kopf)

Sonst ist es sicher interessant mit welchen Mitteln man in BSD ein solches System zusammenbringt.


edit:

oh, zuerst lesen dann schreiben ;)
aber grundsätzlich lass ich meine aussage mal so stehen.
 
hi

also der meinun von worel kann ich nicht ganz bepflichten.

unter freebsd gibt es einige moeglich keiten zu loadbalancen und einen ha cluster zu bauen.

pund ist eine , jedoch rate ioch von der loesung zz ab weil die aktuelle version
noch sehr im wandel bzw im development ist , ide alte 1.8 ist stabil aber man hat einige features nicht und ist grundsaetzlich nicht mehr kompatible zur 2 ( config file )

was gibt es noch ?
a: pf mit slbd
- pf ist mittlerweile bei freebsd dabei und slbd in ports.
funktioniert prima mit carp zusammen was ja mittlerweile standart ist in der basis
config von freebsd.
mach ein einfaches round-robin , mit erkennung ob ein host weg ist.
b: - apache 2.2.2
proxy-loadbalancer ist bestandteil der apache 2.2.2 dist.
im ports drin
z.t. per web konfigurierbar (z.b. node sind abschalt bar )
standart configurations syntax apache
laeuft auf applications layer
kann sogar tomcat proccesse loadbalancen
lauft mit carp ( ggf beim umschalten auf backup server nen apachectl graceful )
c: das ipvs project
ist in ports
muss aber bei 6.2 per hand nach gebessert werden ( 1 zeile in einer kernel src
datei eintragen da dort das patch file nicht richtig arbeitet.)
module mussen per /usr/local/etc/rc. geladen werden keines falls per
/boot/loader.conf ( kernel panik beim boot )
ipvs ist ein sehr maechtiger loadbalancing project mit zig lb algorithmen wers
brauch ,
layer 2
wenn man den ldirectord einsetzt (kann man via haertbeat packet installieren oder per hand ein sehr maechtiges system.
mit dem man alles loadbalancen kann.

jedoch aufwendig in der installation und configuration.

ich hoffe das hilft ein wenig .

grundsaetzlich wuerde ich bei deinem vorhaben die carp / ipvs + ldirectord loesung empfehlen da du dort alles aus einer hand bekommst ( http, ftp , sql lb )
und das ganze tranzparent ist ( layer 2 ) ist natuerlich aufwendig .
grundsaetzlich ist ggf bei sql eine "hauseigene " cluster loesung zu bevorzugen als eine die davorgeschaltet ist z.b. oracle rac oder mysql cluster
aber auch hier aufwendig ( mysql datenbank cluster braucht mindesten 3 maschinen alleine ) .



holger

ps. von pen rate ich ab aus vielen gruenden die zuweit fuhren wuerden hier aufzufuehren
 
Zuletzt bearbeitet:
Ist die Anwendung kommerziell und steckt Geld dahinter: Nimm ein "kommerzielles" Produkt (mit Support, SLA etc.) Kostet zwar was aber wenn wo einige Moneten im Spiel sind würde ich mich nicht trauen, eine Speziallösung zusammenzuwurschteln.
Wenn man das Wort "zusammenzuwurschteln" durch "frickeln" ersetzt, könnte man denken du bist ein Troll ;) . Soll das heißen FreeBSD in seiner Ursprungsform nicht für profisionellen Einsatz geeignet ist? Oder sobald man mehr als einen Server braucht muss man zu Linux wechseln?

- apache 2.2.2
proxy-loadbalancer ist bestandteil der apache 2.2.2 dist.
Wieso den noch ein Load-Balancer, wenn ich schon pound verwende? Oder benötige ich den Load-Balancer für eine andere Sache?

Ist genau das was ich gesucht hab.

grundsaetzlich wuerde ich bei deinem vorhaben die carp / ipvs + ldirectord
Also Carp als Failover kann ich verstehen - . Aber IPVS und Ldirectord sind Linux Projekte, und der FreeBSD Port is wohl ein bisschen outdated.
 
Zuletzt bearbeitet:
Ahoi,

ich betreibe zu Studienzwecken so ein Cluster

8 Nodes:

2 db-server
6 Webserver

Alle server mit einer Gigabit-Netzwerkkarte an einen Gigabitswitch
Der Gigabitswitch hat ein 4-Port-Trunk an die Außenwelt.
(in diesem Fall in ein internes Netz)

Alle Server laufen mit Freebsd 6.1/apache 1.3.34/mod_perl/php/mysql_client.....

Für die Clusterfunktionalität benutze ich spread.
Als IP-Failover-Lösung wackamole
8 Rechner (8 RIP's) 16VIP's
zusammen-------------------->HA

Für den apache benutze ich Mod_backhand als Loadbalancer------------>LB

Last der Server kann auf einer Statuseite abgelesen werden.
Eigene Lastregeln sind leicht umsetzbar.

Von außen werden die Rechner zusätzlich per RR-DNS angesprochen

Alle Webserver haben eine weitere 100Mbit Netzwerkkarte die an einen 100Mbit Switch gehen. Dieser Switch hat 2 Gigabit-Uplink-Ports die zu den beiden DB-Servern gehen.

Ein Server läuft mit mysql als Master, der andere als Slave.

HW:

Alle Webserver mit Dual Pentium III und 2 Gbyte Hauptspeicher
Ultra 80/160 SCSI-Raidcontroller mit Raid 1 oder 10 (mindestens 60GB)

Beide Datenbankserver mit Dual Xeon 3.06/2.4 GHz mit 6/5Gbyte Hauptspeicher
Ultra 160/320 Raidcontroller mit Raid10 oder 1 und Raid5 für die Datenbank
Beide Server haben redundante Netzteile.

Alle Server 2HE

In einer ähnlichen Konfiguration wird schon seit Jahren die Seite der Cebit betrieben.

Gruss
 
Beide Datenbankserver mit Dual Xeon 3.06/2.4 GHz mit 6/5Gbyte Hauptspeicher Ultra 160/320 Raidcontroller mit Raid10 oder 1 und Raid5 für die Datenbank Beide Server haben redundante Netzteile.
WOW! ... ähh ... WOW! Das sind echt starke Maschienen - und bestimmt nicht günstig :) . Der ganze Beitrag gibt mir Hoffnung - alles was ich in der letzten Zeit über HA, LB und Cluster gelesen war stark nach Linux orientiert.

Ich hab nur noch zwei Fragen. Hast du die Hardware selber zusammengebaut? Und - was hält das ganze System theoretisch (kann mir nicht vorstellen, dass du deine "Maschienen" voll auslasten kannst) so an Pageviews aus?
 
hi
@evildaemon
nur weil etwas alt ist muss es nicht gut sein
ipvs ist zz eines der besten loadbalancer projecte die ich kenne auf layer2 basis.

warum ich pound aktuell nicht nehmen wuerde ( zumindestens die 2 release nicht )
hatte ich schon geschrieben.

mod_backhand ist eine nette loesung hat aber in meinen augen 2 nachteile.
a: laeuft nur mit apache 1.3 und wird nicht mehr gross weiter entwickelt.
b: kann in einem unguenstigen moment den ganzen cluster zu fall bringen.

mod_backhand gibt es deswegen nicht fuer die 2 er version weil dort die entwicklung fuer das proxy_loadbalancer modul angefangen hat.


so wie ich gerade gelesen habe ist spread kein wirklicher loadbalancer sondern ein,
im weitesten sinne , applications cluster wo man ensprechende anpassungen brauch damit die applikation damit laeuft .

wackamole ist nicht mehr noetig dank carp

holger

p.s. falls ich mit spread falsch liegen bitte korregieren habe nur kurz auf der homepage gelesen.
 
WOW! ... ähh ... WOW! Das sind echt starke Maschienen - und bestimmt nicht günstig . Der ganze Beitrag gibt mir Hoffnung - alles was ich in der letzten Zeit über HA, LB und Cluster gelesen war stark nach Linux orientiert.

Ich hab nur noch zwei Fragen. Hast du die Hardware selber zusammengebaut? Und - was hält das ganze System theoretisch (kann mir nicht vorstellen, dass du deine "Maschienen" voll auslasten kannst) so an Pageviews aus?

Ahoi,

jeder hat da seinen eigenen Ansatz.:D

Ich bin zu FreeBSD gekommen weil ich von der Linuxwelt arg entäuscht wurde.
(Ich habe keine Distribution auf all meinen Rechnern zum Laufen bekommen)
FreeBSD 6.1 lief auf allen Server sofort und rasant.

Ja und nein:

Alle Server habe ich nach und nach bei Ebay ersteigert.
Da die Server natürlich nicht in der passenden Konfiguration vorhanden waren habe ich nachgerüstet. (Ich bin ausgebildeter Service-Techniker).
Bei den Webservern handelt es sich um Intel SR2150 2HE Webservern für den Dauereinsatz bei Hostern. (natürlich mittlerweile veraltet)
Bei den DB-Servern handelt es sich im einen Dell Poweredge 2650 und einem Intel SR 3200. Ebenfalls für den Dauereinsatz ausgelegt.
Das alle Server SCSI-Raid haben, hat einen Grund:
Nur SCSI-Fetsplatten sind für den Dauereinsatz augelegt (was meine beruflich Praxis immer wieder bestätigt)
Kostenpunkt für alle Server und weitere Ersatzteil in etwa 6000 Euro im Laufe der Jahre.


Hmm ja Pageviews......das ist eine schwierige Frage.
Da ja mein Cluster (ich werde mal ein Foto machen) wenn es läuft knapp 1800W zieht stellt man sich das ja nicht neben das Sofa.
Zum Glück habe ich einen Platz bei einem Kunden gefunden (im 22HE 19" Netzwerkschrank) und immer wenn ich dort bin, kann ich weiterforschen.

Also wenn Dein Projekt nicht überwiegend aus statischen Webseiten besteht ( hier würde ein Dicker Server mit viel Speicher genügen),
dann mußt Du genau angeben was dort passieren soll.

Bei vielem dynamischen Seiten mit db-Abfragen würde ich den 3-Staffel-Ansatz bevorzugen.

An erster Stelle (für den Kunden sichtbar) stehen schlanke 1HE- Server (auf pageviews/s getrimmt).
Diese haben im hintergrund mehrer dicke Server die Abfragen (PHP/Perl/whatever) erledigen und sind mit 1-3 DB-Servern als dritte Reihe verbunden.
Reihe1-3 sind jeweils als cluster ausgelegt und lassen sich nach Bedarf durch zusätzliche Server erweitern.

Zugegeben apache 1.3.34 mod_backhand und wackamole/spread sind schon etwas älter und nicht mehr so im Scope der Entwickler....aber voll funktionsfähig.
Btw: nicht alles was neu ist , ist unbedingt besser.

spread ist nichts anderes als ein Hochgeschwindigkeits-Cluster-Protokoll welches auf die eigene Anwendung angepasst werden kann.
Diese Protokoll wir von wackamole benutzt um die VIP's zu verteilen.

Naja in einem ungünstigen Fall kann man jeder HW/Software-Kombination zu Fall bringen.

Aber wir wollen uns ja nicht über Glaubensfragen streiten :p.
Wer eine ähnliche Kombination am Laufen hat....kann ja seine Erfahrungswerte mal mitteilen.

Ich leren jeden Tag gerne dazu.....und mein Cluster wird bestimmt bis zur Rente immer wieder umkonfiguriert....mal sehen wer den längeren Atem hat...meine Hardware oder ich :ugly:

Gruss

P.S.: Als Rule off thumb
Überwiegend statische Seiten ---->Speichergebunden (mehr Hauptspeicher=schneller)---->Loadbalancing eher unüblich

Überwiegend dynamische Seiten ---->CPUgebunden (schnellere CPU's=schneller)-----> Loadbalancing sehr üblich---->zusätzlicher Rechner mehr CPU-Leistung (abzüglich Clusteroverhead)

Webseiten mit heavy DB-I/O---->Disk gebunden (schnellere Controller/Festplatten/Raid) mehr I/O's---->zusätzliche Rechner als slave --->mehr I/O's beim Lesen.

Wichtig ist auch zu wissen mit welcher Bandbreite Dein Cluster angesprochen werden kann.... und das Deine Rechner untereinander genügend schnell kommunizieren können.

Bei nun immer häufiger anzutreffenden Kunden mit VDSL sprich 50Mbit.... wird da einiges auf die Provider (Backbone) und Hoster (Server zukommen)

Ein mit 100Mbit angebundere Server wird dann locker (beim Download) von 3 VDSL.-Highspeedkunden an die Wand gedrängt.

Gruss
 
Dann habe ich aber noch eine Frage : Sagen wir mal, wir haben einen Load-Balancer und sechs Webserver (und zwei Datenbank Server), welche die gleiche Webseite darstellen sollen. Nun möchte man natürlich eine redundante Umgebung - das heißt, wenn ich die Webseite update oder ändere, müsste das synchron auf allen Servern geändert werden. Was für Software setzte ich dafür ein? NFS?
 
Bezüglich der Datenbank nimmt man imho einen (MySQL) Master, welcher seinen Bestand auf (deine zwei) Server repliziert. Den Abgleich des DocumentRoot könntest du auch per rsync erledigen lassen.
 
Wenn es um die Performance von CMS-Lösungen oder andern dynamischen Inhalten geht, schau Dir auch einmal Varnish von FreeBSD Developer Poul-Henning Kamp an.

Das ist ein Server-Cache für dynamische Inhalte, mit der die Last der dahinterliegenden Webserver reduziert wird. Das ganze wurde für das Online-Angebot einer norwegischen Tageszeitung entwickelt und klingt wirklich beeindruckend.

Für Freunde akkustischer Erklärungen: Es gab vor einiger Zeit auf bsdtalk ein Interview mit Poul-Henning dazu... http://bsdtalk.blogspot.com/2006/10/bsdtalk072-interview-with-poul-henning.html

Ansonsten findet sich die Projektwebseit unter www.varnish-cache.org

Viel Erfolg!

EDIT: Ein gutes Einstiegsdokument zu Varnish findet sich unter http://phk.freebsd.dk/pubs/varnish.pdf
 
Zuletzt bearbeitet:
Ich kenne zwar die ganze hier vorgestellte Software nicht, aber ich wuerde das HTTP-LB einfach ueber pf(4) abfackeln. Zwei pf(4)-Kisten vorne dran, mittels carp(4) Interface und State-Abgleich ueber pfsync(4).

Die teilen das ganze dann auf N Webserver auf. Wobei hier gilt: Klasse statt Masse. Du kannst N trivialerweise erhoehen, das skaliert prinzipiell beliebig.

Bei "dynamischen" Seiten hast du da natuerlich ein Problem. Pseudo-dynamische Seiten, welche bei 10.000 Abfragen zwar immer den gleichen Inhalt liefern, aber 10.000 mal neu berechnet wurden sind leider die Norm aber hier wird offensichtlich etwas falsch gemacht.

Da gibt es dann reverse caching proxies, welche das etwas abmildern, halte ich aber fuer einen schlechten Hack.

Bei dem DBMS kommt es dann sehr aufs Detail drauf an. PGSQL laesst sich nicht clustern, bei MySQL klappt das auch nur gut, wenn die Last mostly-read-only ist. Und fuer read-only Inhalte braucht man keine wirklich dynamische Webseite ...

Die Geschichte mit dem docroot auf NFS laeuft bei uns momentan in einer Testphase, jedoch nur fuer das Intranet. Fuer den Webauftritt wuerde ich da lieber Inhalte zentral halten und per rsync auf die Webserver pushen.

Alles eine Frage wie oft sich die Inhalte aendern, damit steht und faellt die Skalierbarkeit -- Vermeide "dynamische" Inhalte wie die Pest!
 
Dann habe ich aber noch eine Frage : Sagen wir mal, wir haben einen Load-Balancer und sechs Webserver (und zwei Datenbank Server), welche die gleiche Webseite darstellen sollen. Nun möchte man natürlich eine redundante Umgebung - das heißt, wenn ich die Webseite update oder ändere, müsste das synchron auf allen Servern geändert werden. Was für Software setzte ich dafür ein? NFS?

Ahoi

NFS ist eine eher schlechte Idee.
Damit schaffst Du Dir eine 4'te Ebene (NFS-Server) die dann auch ausfallsicher sein muss.
Oder die Ebene 2 (Script-Server) oder 3 (DB-Server) müssen die Aufgabe mit übernehmen.
Außerdem würden die NFS-Server (wenn eine eigene Ebene) deine Netzwerklast stark erhöhen weil ja jeder Zugriff auf einen Webserver auch einen Zugriff über Netzwerk auf den/die NFS-Server erzeugt (und ggf. auch noch einen Zugriff auf den/die DB-Server)

Ich bevorzuge da den kleineren Ansatz.
In das Cluster habe ich ein Notebook in die Ebene 1 (Webserver) mit eingebunden. Dieser erfüllt aber nicht immer Aufgaben für den Cluster.
(Primär läuft auf dem Notebook CACTI und überwacht den Cluster und all seine Funktionen)------->anderes Thema :D

Auf diesem Notebook findet die Entwicklung statt.
Da der Rechner ja direkt über seine RIP ansprechbar ist, kann ich die Veränderungen auch sofort testen.
Sind die Veränderungen nach meinem Geschmack werden die Inhalte/Scripte per rsync an die aktiven Webserver weitergegeben (bei mir auch an die DB-Server/die helfen halt mit).------> Ich habe nur eine Ebene!!!

Danach geht das Notebook wieder in den Cluster und stellt seine Rechenleistung zur Verfügung.

Gruss
 
Ahoi

NFS ist eine eher schlechte Idee.
Damit schaffst Du Dir eine 4'te Ebene (NFS-Server) die dann auch ausfallsicher sein muss.
Oder die Ebene 2 (Script-Server) oder 3 (DB-Server) müssen die Aufgabe mit übernehmen.
Außerdem würden die NFS-Server (wenn eine eigene Ebene) deine Netzwerklast stark erhöhen weil ja jeder Zugriff auf einen Webserver auch einen Zugriff über Netzwerk auf den/die NFS-Server erzeugt (und ggf. auch noch einen Zugriff auf den/die DB-Server)

Gruss

Hallo,
wenn man NFS nimmt, dann baut man natürlich ein eigenes LAN nur fürs NFS auf. Sozusagen ein SAN für arme.

marmorkuchen
 
Statische Seiten dynamisch erstellt

Hallo,

ich habe eine Anmerkungen zur sehr interessanten Antwort von MrFixit:

Sicherlich sollte man statische Seiten einfach nur ausgeben und nicht jeweils neu berechnen. Allerdings gibt es häufig das Szenario, dass sich der Benutzer am Anfang authentifiziert und ein Identifier in der Session weitergereicht wird. Wenn Cookies nicht möglich sind, wird der Identifier meist an die URL gehängt, was erfordert, dass auch statische Seiten dynamisiert werden (zumindest jeder Link in einer statischen Seite). Damit würde dann auch eine statische Seite nicht nur ausgegeben, sondern neu berechnet. Gibt es Alternativen dazu?

viele Grüße

Rainer
 
Zurück
Oben