Apache und Anzahl der virtual Hosts
Thomas Schmieder
- webserver
0 xwolf0 Thomas0 Michael Schröpl0 xwolf
0 Peter Squentz
Hallo Serverspezialisten,
nun bin ich ganz happy, dass die neue Internetanbindung läuft und wir unseren Apache-Server umbuffen können. Bei der Gelegenheit haben wir auch gleich alle konnektierten Domains eingetragen als virtual Hosts.
So bis ca. 240 Stück hat er das auch anstandslos unterstützt. Es sind aber 370. Der Apache fährt hoch und schaltet dann wieder in den unused Mode zurück.
Wer kann da helfen? Kann man ihn durch Konfigurationsänderung dazu bewegen, alle Virtual Domains zu bedienen oder kann es sein, dass er zuwenig Arbeitsspeicher hat? Es handelt sich um ein LAMP-System.
Die Anzahl der Instanzen des Apache hat doch aber eigentlich nichts mit der Anzahl der virtual Hosts zu tun, oder?
Wäre schön, wenn mir eine(r) von Euch helfen könnte.
Liebe Grüße
Tom
Hi,
nun bin ich ganz happy, dass die neue Internetanbindung läuft und wir unseren Apache-Server umbuffen können. Bei der Gelegenheit haben wir auch gleich alle konnektierten Domains eingetragen als virtual Hosts.
So bis ca. 240 Stück hat er das auch anstandslos unterstützt. Es sind aber 370. Der Apache fährt hoch und schaltet dann wieder in den unused Mode zurück.
Ja, das Problem kenn ich auch :)
Vorallem ist es saugut dokumentiert :((
Wer kann da helfen? Kann man ihn durch Konfigurationsänderung dazu bewegen, alle Virtual Domains zu bedienen oder kann es sein, dass er zuwenig Arbeitsspeicher hat? Es handelt sich um ein LAMP-System.
Die Anzahl der Instanzen des Apache hat doch aber eigentlich nichts mit der Anzahl der virtual Hosts zu tun, oder?
Also...der Hintergrund liegt im Kern von Apache:
Dort wird bei der Ueberpruefung ob eine Datei lesbar ist, noch immer fopen()
verwendet.
Dies hat zur Folge, dass du dann ab ca. 240 Hosts Probleme bekommst, weil nicht mehr genug Filehandles zur Verfuegung stehen.
In der Log erkennst du das an den Fehlermeldungen beim File access, die mit den internen Errorcode (2) beginnen.
In dem Bugmeldesystem von Apache ist dieses problem bereit seit der Version 1.3.12 notiert.
Vgl: http://bugs.apache.org/index.cgi/full/7251 und
http://bugs.apache.org/index.cgi/full/8741
Eine Loesung findet sich in der FAQ, in der das Problem auch bekannt ist:
http://httpd.apache.org/docs/misc/FAQ.html#fdlim
(Aber saubloed zu finden, weil die Suchmaschine bei Apache igendwie selbst ein Bug ist >:))
Mir ist auch ein Patch bekannt (ich hab diesen vorgestern mit Google gefunden, hab ihn aber leide rnicht mehr zur Hand), bei der stand, wie man den entsprechenden Code umaendern muss.
Allerdings hab ich in meinen fall selbst davon abgesehen - ich verwalte ja auch ein paar viele Webauftritte mit entsprechend vielen virt. Hosts (> 200), aber die Abwaegung ist die folgende:
1. Nach jedem Apache-Update muesste der gerade anwesende Kollege den Patch einbauen. Wenn ein andere Spezi und ich mal in urlaub sind, macht dies Probleme, weil nicht jeder daran denken wird.
2. Alternative waere ab ca. 240 Hosts eine zusaetzliche Kiste hinzustellen.
ich hab mich fuer den Weg 2 entscheiden, da ein Server *bei guten Zugriffszahlen* (wir haben derzeit etwa 20 Millionen/Monat) und mit diversen Erweiterungen, sowieso schon bei etwa 200 virt. Hosts an die Grenzen zu stossen beginnt.
Ausserdem ist es nicht so kritisch, wenn mal ein hardwaredefekt auftritt, wenn nur eine von X Kisten ausfaellt auf der nur wenig Auftritte sind, als wenn unsere Monsterkiste ausfaellt, auf der alle Auftritte sind.
Letzlich kommt auch noch ein anderes oekonomisches Argument hinzu:
Bei mehr als X Auftritten, bei denen CGI, PHP, FastCGI, ... laeuft, braucht man schon mehr als ein Standard-PC.
Je mehr du auf der Kiste drauf haben willst, um so leistungsfaehiger muss die aber sein und um so teurer wird die.
Da der Preis aber nicht unbedingt linear steigt, ist es guenstiger X+1 Kisten (mind. 1 wegen Redundanz) zu kaufen, die relativ guenstig sind, als wenn du 2 (1 wegen Redundanz) Kleiderschrankformate kaufst, die um einiges mehr kosten.
Meine Empfehlung:
Fuer jeweils 240 Hosts eine mittelpraechtige Kiste (nicht dicker als eine Sun
Enterprise 450 oder eine SunBlade) von Sun plus 1 zur Redundanz.
Ciao,
Wolfgang
Hi Wolfgang,
erstmal danke,
ich werde es sofort ausprobieren und Medizin drauf tun...
Gruß
Tom
Hallo Wolfgang,
- Nach jedem Apache-Update muesste der gerade anwesende Kollege
den Patch einbauen. Wenn ein andere Spezi und ich mal in urlaub
sind, macht dies Probleme, weil nicht jeder daran denken wird.- Alternative waere ab ca. 240 Hosts eine zusaetzliche Kiste
hinzustellen.
esoterischer Vorschlag:
Was ist mit einem Proxy auf derselben Maschine und einer Aufteilung
der 370 Virtual Hosts auf _zwei_ Apaches (mit unterschiedlichen Ports)?
Die Proxy-Konfiguration könnte man ja ggf. per Skript aus den beiden
Apache-Konfigurationen generieren ...
Viele Grüße
Michael
(der natürlich bei solchen Zahlen auch zu mehr Hardware raten würde)
Hi,
esoterischer Vorschlag:
Was ist mit einem Proxy auf derselben Maschine und einer Aufteilung
der 370 Virtual Hosts auf _zwei_ Apaches (mit unterschiedlichen Ports)?
Waere moeglich :)
Waere aber zu umstaendlich eben wegen dem Portmapping.
In dem Fall waere dann eher schon gleich eine Umrüstung auf einen
IPv6-Mapper sinnvoll.
Aber das waere alles ziemlich experimentell und du musst bedenken, dass bei der Zahl von Hosts sehr viele "Kunden" und Einzelwebmaster da sind, die keine Lust für Experimente haben.
Ein Zusatzproblem ist auch unerwaehnt: Skripten, die nicht per suexec auf User-Ownership gestellt werden koennen (insbes. PHP), die aber sensible Informationen (Accountdaten für DB-Zugriffe) enthalten.
Und da laut Statistik die Mehrheit aller Sicherheitsvorfälle nicht durch Externe geschahen, sondern durch eigene Mitarbeiter und User, muss man da auch noch was machen...
Bei Solaris kann man hier mit netid/NIS-Maps arbeiten. So machen wir es bei uns gerade...Leider ist das aber ne ziemlich wacklige Geschichte...
Die Proxy-Konfiguration könnte man ja ggf. per Skript aus den beiden
Apache-Konfigurationen generieren ...
Hm..
ich wuerde eher empfehlen, eine eigene Kiste für den proxy bereitzustellen; Zumal wenn du den Proxy innerhalb des nationalen Proxyverbundes aufgenommen hast...
Ciao,
Wolfgang
Was sagt denn das ErrorLog?
Peter