# Fileserver



## versuch13 (23. April 2008)

Hallo. Bei vielen großen Webseiten ist mir aufgefallen, das z.B. Bildmaterial von unterschiedlichen Servern bzw. Adressen abgerufen wird. 

Webseite erreichbar unter:

http://www.domain.de/

Grafiken liegen dann aber z.B. auf

http://files.domain.de/

oder auch unter mehreren unterschiedlich Adressen.

Nun frage ich mich, aus welchem Grund wird das gemacht und wie realisiert man so etwas? Für Tips und Informationen wäre ich sehr dankbar. Viele Grüße


----------



## Dennis Wronka (23. April 2008)

Ein Grund das zu machen ist sich die Tuer offen zu halten fuer Expansion.
Wenn eine Seite waechst kann es noetig werden Daten auf andere Server auszulagern, wie z.B. Bilder und Multimedia-Dateien.

Wenn nun von vornherein, also auch wenn die Seite noch auf einem Server liegt, mit getrennten Hostnamen gearbeitet wird ist die Umstellung auf mehrere Server hinterher um einiges einfacher, da eben nur die Daten umziehen muessen und der DNS-Eintrag angepasst werden muss.


----------



## versuch13 (23. April 2008)

So dachte ich mir das auch, danke, dann bin ich hier in dem Thema als genau richtig. 

Ich arbeite mit PHP auf _einem_ Apache. Wie gehe ich das nun genau an?- kannst du evtl gute Lektüre empfehlen? Oder ist das keine große Sache?

Lade ich beim Upload von Dateien diese einfach in ein Verzeichnis welches die Subdomain darstellt? Wenn sich das ganze auf vers. Server verteilt dann nutzt man sicher FTP Funktionen? Wäre nett wenn du noch etwas genauer darauf eingehen könntest (speziell jetzt nur auf die Vorbereitung bei Nutzung eines einzigen Servers, wo lege ich die Daten ab, speichere ich die Pfade komplett in einer DB, was man dazu einfach beachten sollte) damit ich weiß wie in etwa ich das angehen muss. Vielen Dank!


----------



## Dennis Wronka (23. April 2008)

Ja, Du richtest ein extra Verzeichnis auf der Platte ein und im Apache eine VirtualHost der auf den entsprechenden Namen hoert und dort dieses Verzeichnis preisgibt.

Zusaetzlich darf natuerlich der entsprechende DNS-Eintrag nicht fehlen.

http://www.domain.de und files.domain.de muessen also die gleiche IP ausspucken.
Wenn dann spaeter mal umgezogen wird werden die Daten kopiert, der DNS-Eintrag geaendert und der VirtualHost geloescht... theoretisch.
Praktisch dauert es eine Weile bis alle DNS-Server Wind davon gekriegt haben dass der Hostname nun auf eine neue IP zeigt, aber ewig dauert das auch nicht.


----------



## versuch13 (23. April 2008)

Ok, vielen Dank, dann werde ich das mal so versuchen.


----------



## Gumbo (23. April 2008)

Häufig wird auch gleichzeitig ein schlankerer Webserver eingesetzt, der speziell für die Aufgabe, statische Daten auszuliefern, optimiert wurde.


----------



## versuch13 (23. April 2008)

Gumbo hat gesagt.:


> Häufig wird auch gleichzeitig ein schlankerer Webserver eingesetzt, der speziell für die Aufgabe, statische Daten auszuliefern, optimiert wurde.



Darauf bin ich bei meiner Recherche auch schon gestoßen. Samba wäre da eine Möglichkeit wenn ich das richtig in Errinnerung habe, ist das korrekt? Das würde also die Performance steigern können? Kann man so etwas dann auch auf einem Server (wie oben schon beschrieben, also auf einem virtual host) installieren, oder kommt dass nur in Frage wenn man einen extra Fileserver nutzt? Vielleicht hast du da noch ein paar Begriffe für mich anhand derer ich weiter recherchieren kann? Vielen Dank.


----------



## port29 (24. April 2008)

Du hast das Prinzip etwas falsch verstanden. Du hast einen Server, auf dem eine Site läuft, die dynamische Inhalte mit z.B. php produziert. Danaben hast du aber auch statische Inhalte, die einfach nur an den Webbrowser ausgeliefert werden müssen (Bilder, Videos, PDF Dateien, etc.). 

Auf deinem Server läuft jetzt z.B. ein Apache Webserver mit tausenden Erweiterungen wie Web Dav, LDAP, (fettes) PHP, etc.

Das Ausliefern von Bildern mit diesem Webserver ist ein kleines Overkill, deshalb nimmt man da etwas schlankeres und zwar einen Webserver!! (Samba ist kein Webserver!) Entweder installiert man einfach einen zweiten schlanken apache server oder nimmt gleich einen lightweight Webserver. Lighty ist z.B. einer http://www.lighttpd.net/

Um das ganze nun nutzen zu können, muss man das Zeugs richtig konfigurieren. Und zwar brauchst du zwei IP öffentliche Adressen auf dem Server. Auf eine IP Adresse legst du die Hauptseite drauf mit dem Fetten Webserver, der die dynamischen Inhalte produziert und ausliefert und auf dem anderen horcht dann der zweite leichte Webserver und liefert Bilder aus.

So, hoffe nun, dass ich dir die Funktionsweise erklären konnte.


----------



## versuch13 (24. April 2008)

Aber auch wenn der Fileserver jetzt ein stinknormaler Apache mit allen möglich Erweiterungne wäre würde dass doch die Performance der Webanwendung steigern? Die Last verteilt sich schließlich oder sehe ich das Falsch?

Lighttpd wurde mir generell als performanter beschrieben wenn viele Anfragen gleichzeit an den Server gestellt werden, das ist doch so? 
In den Fällen wo Daten von einer Subdomain abgerufen werden, dort hat die Subdomain eine eigene IP?- ist dass denn möglich? Die Daten befinden sich in dem Fall ja auf dem selbem Server, dass macht man dann wirklich nur um besser auf eine Erweiterung um einen echten Fileserver vorbereitet zu sein? Oder kann man auf einem Server zusätzlich Lighttpd installieren? 

Ihr seht schon, Fragen über Fragen. Wäre nett wenn darauf jemand eingehen könnte. Eventuell kann mir auch jemand ein Buch, Webseiten zu dem Thema, oder sonstige Quellen empfehlen anhand derer ich mich intensiver damit beschäftigen kann. 

Danke.


----------



## port29 (24. April 2008)

Ein Buch kann ich dir leider nicht nennen, da ich quasi mit dem Internet aufgewachsen bin.

Also es ist überhaupt kein Problem einem Server bzw. einer Netzwerkkarte zwei IP Adressen zuzuweisen. Bei einer Domain ist es auch kein Problem eine Subdomain auf eine andere IP Adresse zu legen, als die Hauptdomain. (ist jetzt nur nebenbei gesagt, du kannst auch eine Domain auf zwei IP Adressen legen, so bekommt man einen einfachen Load Balancer)

Mit den Erweiterungen musst du es dir so vorstellen:

Ein Bild ist eine Pizza die du auslieferst.

lighty ist jetzt z.B. ein Mini ohne Sonderausstattung.
der Apache an sich ist bereits ein kleiner Transporter. Aber es ist dir nicht genug, du willst mit dem Wagen mehr machen. z.B. Darin wohnen, also nimmt du einen Wohnanhänger mit. Du willst z.B. Getränke kühl halten. also nimmst du einen gekühlten Anhänger mit, usw. Diese Anhänger sind die Erweiterungen des Webservers.

Wie du siehst, ist ein Mini bzw. der lighty leichter und beweglicher. Deshalb kommt er mit weniger Aufwand (aber vll. in der gleichen Zeit am ziel an). Der Apache ist fett, dadurch verbraucht er mehr Ressourcen für die gleiche Aufgabe, als ein leichterer Server.


----------



## versuch13 (24. April 2008)

port29 hat gesagt.:


> Mit den Erweiterungen musst du es dir so vorstellen:
> 
> Ein Bild ist eine Pizza die du auslieferst.
> 
> ...



Ok, danke dir auch nochmal soweit. Ich werde dass einfach mal lokal bei mir versuchen.


----------



## Gumbo (24. April 2008)

Vielleicht solltest du von dem Gedanken Abstand nehmen, dass ein Server immer ein einzelner Rechner ist. So kann nämlich auch ein einzelner physischer Rechner Server mehrerer Dienste sein oder mehrere Rechner zusammen Server nur eines einzelnen Dienstes sein. (Letzteres wird dann oft eher als Host bezeichnet.)


----------



## Dennis Wronka (24. April 2008)

^ ^ Vor allem im "Zeitalter der Virtualisierung" ist wohl ein physikalischer Server auch nicht immer nur ein Server, sondern eventuell auch mal viele.

Vom erwaehnten Fall mal abgesehen dass auf einem Server (Rechner) auch mehrere Server (Programme, z.B. Web-Server, DNS-Server, etc.) laufen koennen und dies oft auch Sinn (oder im Grunde eigentlich sogar immer, denn auch SSH ist ein Server  ) macht.


----------



## versuch13 (24. April 2008)

Gumbo hat gesagt.:


> Vielleicht solltest du von dem Gedanken Abstand nehmen, dass ein Server immer ein einzelner Rechner ist. So kann nämlich auch ein einzelner physischer Rechner Server mehrerer Dienste sein oder mehrere Rechner zusammen Server nur eines einzelnen Dienstes sein. (Letzteres wird dann oft eher als Host bezeichnet.)



Das hast du richtig erkannt, das war mir so tatsächlich nicht bekannt habe ich aber gerade im Moment schon aus anderer Quelle erfahren, trotzdem danke.

Ich fasse es einfach nochmal zusammen um zu sehen ob ich es auch wirklich verstanden habe  Also, ich kann jetzt neben dem Apache zusätzlich Lighttpd (gibt es Alternativen zu denen aus bestimmten Gründen geraten werden kann?) installieren.
Und ich kann das ganze dann so konfigurieren dass Apache die dynamischen Inhalte ausliefert und Lighttpd in meinem Fall Grafiken. Lighttpd kann ich dann über eine Subdomain erreichbar machen. Stimmt das soweit? Ich hoffe doch. Sind dafür dann zwei unterschiedliche IP Adressen notwendig?


----------



## port29 (25. April 2008)

versuch13 hat gesagt.:


> Ich fasse es einfach nochmal zusammen um zu sehen ob ich es auch wirklich verstanden habe  Also, ich kann jetzt neben dem Apache zusätzlich Lighttpd (gibt es Alternativen zu denen aus bestimmten Gründen geraten werden kann?) installieren.


Ich sags mal so, in der IT Welt darf man keine Scheuklappen aufsetzen. Es gibt neben Apache und dem hier bereits genannten lighty noch hunderte andere Webserver Projekte. Jedes Projekt hat Vor- und Nachteile. Ein anderer Webserver ist z.B. thttpd ( http://www.acme.com/software/thttpd/ )Ich habe den lighty nur deshalb genannt, weil ich ihn selbst nutze, aber in einem etwas anderen Zusammenhang. 

Bei mir nimmt der lighty alle Anfragen an und schickt statischen Inhalt sofort selbst raus. Wird dynamischer Inhalt angefordert, so wird bei einem von drei Content Servern angefragt. Der Content Server liefert das Ergebnis dann an den lighty und er schickt es wieder zurück. So habe ich einen recht flexiblen und skalierbaren Loadbalancer umgesetzt. 



versuch13 hat gesagt.:


> Und ich kann das ganze dann so konfigurieren dass Apache die dynamischen Inhalte ausliefert und Lighttpd in meinem Fall Grafiken. Lighttpd kann ich dann über eine Subdomain erreichbar machen. Stimmt das soweit? Ich hoffe doch. Sind dafür dann zwei unterschiedliche IP Adressen notwendig?



Naja, nicht ganz. Um einen Remote Server (ich meine jetzt einen Dienst [Software], der Anfragen von Außerhalb bearbeitet) zu betreiben, benötigst du zwei angaben. 1) eine IP Adresse, auf der dieser Dienst lauscht und 2) einen Port. (Für diese Erklärung würden mich jetzt einige Leute an meinen Eiern an der Decke aufhängen, aber ich schreib es trotzdem mal so hin) Eine IP Adresse ist in Ports unterteilt, wie eine Stunde in Minuten unterteilt ist. Deshalb gibt es folgende Möglichkeiten: Ein Webserver läuft auf der IP Adresse A auf dem Port 80, ein zweiter Webserver läuft auf der gleichen IP A auf dem Port 81. Eine andere Möglichkeit ist es, dass ein Webserver auf der IP A auf dem Port 80 läuft und der zweite auf der IP B auf dem Port 80.

Nun zur Frage, wieso man zwei IP Adressen braucht und nicht einfach einen anderen Port nimmt. Technisch würde beides funktionieren und die Seite würde mit einer IP Adresse idR. bei ca. 70% der Internet Nutzer laufen. Aber es gibt auch Leute, die z.B. von der Firma aus auf die Seite zugreifen möchten. Der Unterschied ist, dass deren Firewall etwas härter konfiguriert ist, als bei einem Home User. Man sagt, http ist Port 80 = relativ ungefährlich. Von allen anderen Ports geht eine Gefahr aus und die Mitarbeiter haben die nicht zu nutzen. Deshalb werden die Ports von der Firewall geblockt und die Leute bekommen z.B. die Bilder nicht zu sehen. 

Deshalb nimmt man die zusätzlichen Kosten in Kauf und nimmt eine zweite IP Adresse. Alternativ kann man das auch so machen, wie ich es oben beschrieben habe. Es ist jedoch ein höherer Konfigurationsaufwand.


----------



## Dennis Wronka (25. April 2008)

port29 hat gesagt.:


> Ich sags mal so, in der IT Welt darf man keine Scheuklappen aufsetzen. Es gibt neben Apache und dem hier bereits genannten lighty noch hunderte andere Webserver Projekte.


Es gab auch mal einen Web-Server der direkt in den Linux-Kernel integriert war. Ich mein im 2.4er Kernel war das.
Wie viel Sinn sowas macht ist jetzt die Frage, vor allem mit Blick auf die Sicherheitsprobleme die daraus entstehen koennen. Schnell war das Ding aber allemal.


----------



## kalle123456 (12. Mai 2008)

port29 hat gesagt.:


> Bei mir nimmt der lighty alle Anfragen an und schickt statischen Inhalt sofort selbst raus. Wird dynamischer Inhalt angefordert, so wird bei einem von drei Content Servern angefragt. Der Content Server liefert das Ergebnis dann an den lighty und er schickt es wieder zurück. So habe ich einen recht flexiblen und skalierbaren Loadbalancer umgesetzt.



Hallo,

würde mich mal interessieren wie du das umgesetzt hast, weil ich momentan genau vor diesen Problem stehe. Mir geht es haupsächlich um Traffic intensiven Content(Videos) der vom Storageserver kommt. Dabei ist das Nadelöhr die Anbindung(100M/Bit), also brauche ich einen Loadbalancer und genau dazu wüßte ich gerne mehr.

Gruss


----------



## port29 (12. Mai 2008)

Moin,

ich habe bei dem Lighty zwei Sachen eingerichtet.

1) habe ich eine URL Rewrite Rule, die jetzt eben die Umschreibung von /content.php => /sitename/content.php erledigt. 

2) habe ich einen Proxy Server eingerichtet, der Anfragen an Content Server weiterleitet. Die Antworten bekommt er dann zurück und gibt sie dem anfragenden Client. 

Aber wie ich es verstanden habe, hast du vor allem hohen Traffic Load auf den Kisten und möchtest genau das "loadbalancen". Mit der Methode, die ich eingesetzt habe, wird das leider nicht klappen, denn da hast du effektiv nur 100MBit/s (wenn in dem Server, auf dem Lighty läuft auch noch eine low End Netzwerkkarte drin ist, hast du effektiv sogar nur 60-70MBit/s)

Um dir da helfen zu können, brauche ich ein paar Infos zu deinem Projekt und der verwendeten Architektur. Soweit ich es bisher verstanden habe, betreibst du ein Projekt, der aus zwei Typen von Content besteht. Dynamischer Inhalt und Statischer Inhalt. Letzterer kommt von einem Sorage Server. Ist es nur ein Server oder sind es mehrere. Muss der statische Content irgendwie gesichert sein, damit ihn nicht jeder mirrorn kann? Was sind es für Dateien (im Sinne von Dateigröße)?


----------



## kalle123456 (12. Mai 2008)

Hallo,

danke erstmal für deine Antwort.

Also der dynamische Content Server1 - LAMP
statischer content hauptsächlich *.flv Server2 - lighty(mod_securedownload), PHP-cgi, MySql

Server2 möchte ich loadbalancen, weil er Traffic mäßig an seine Grenzen stößt. Wie gesagt momentan nur ein Storageserver. Die Videos sind Lehrvideos 10- 150MB gross.

Beide Server laufen auf Debian(etch), verwendete Programmiersprache PHP5 mit Pear. 

Danke...


----------



## port29 (12. Mai 2008)

Ja, 

nur wie willst du den zweiten Server loadbalancen? Oder willst du dir jetzt noch einen Server holen und dann anschließend zwischen zwei Storage Servern loadbalancen?


----------



## kalle123456 (12. Mai 2008)

port29 hat gesagt.:


> Ja,
> 
> nur wie willst du den zweiten Server loadbalancen? Oder willst du dir jetzt noch einen Server holen und dann anschließend zwischen zwei Storage Servern loadbalancen?



Genau das möchte ich, also noch einen Storageserver dazu. Stelle mir das so vor Server2 ist ausgelastet von der Bandbreite, also kommen alle weiteren Uploads von Server3, Server1 sollte der Controller dann sein.


----------



## port29 (12. Mai 2008)

Okay! Ich gehe jetzt mal davon aus, dass die Downloads von dem LAMP Server initiiert werden, also dass der LAMP Server die Links zu den Downloads gespeichert hält. 

In so einem Fall würde ich es persönlich folgendermaßen regeln:

Bei so einer Seite wird es Videos geben, die sehr stark und andere, die nur gelegentlich abgerufen werden. Deshalb brauchst du eine Statistik darüber, welche Videos oft und welche nur gelegentlich abgerufen werden. Dann verteilst du die Videos einfach zwischen den zwei Storage Servern und trägst den Storage Server des Videos bei dem LAMP Server ein. Dadurch schaffst du dir einen statischen Load Balancer. 

Der Vorteil gegenüber eines dynamischen Load Balancers liegt auf der Hand, das ganze macht weniger Aufwand. Klar, es ist recht einfach eine Anfrage von einem Storage Server verarbeiten zu lassen und die andere von dem anderen. Aber dadurch schafft man sich nicht wirklich einen Loadbalancer. Denn da spielen viele Dinge eine Rolle. Einerseits ist es eben die Häufigkeit, wie oft ein File heruntergelanden wird. Andererseits ist es auch die Datenmenge und der Download Speed des Clients.


----------



## kalle123456 (12. Mai 2008)

Der Aufwand ist erstmal egal, ich dachte an Direct Routing siehe Grafik.



Nur leider ist es mir momentan nicht möglich ein internes Netz aufzubauen. Die Server sind zwar beim selben Provider, nur kenne ich seine Netzwerkstruktur nicht. Serverhousing ist geplant, aber erst nächsten Jahr. Bis dahin muss ich eine Möglichkeit finden die Spitzen irgendwie abzufangen.

Nachtrag: denke das wird erstmal die Lösung sein.


----------

