2 Webserver - Round Robin - gemeinsames Laufwerk für Session

Apache, Lighttpd, nginx, Cherokee
Post Reply
energy2
Posts: 16
Joined: 2003-04-07 19:16
 

2 Webserver - Round Robin - gemeinsames Laufwerk für Session

Post by energy2 »

Hallo erstmal!

Ich betreibe ein kleines Portal in Ã?sterreich, mit ca. 20.000 User 1,5 Mio PageImpression an den besseren Tage in der Woche. Wir haben schon zahlreiche Maßnahmen durchführen müssen um ein schnelles Service zu gewährleisten. Derzeit haben wir drei Server im Einsatz: Am ersten Server sind die skripte und Images (Webserver), der zweite dient als mySQL Server, der dritte als Fileserver für Fotos und Downloads.

Nun haben wir kürzlich beim Webserver etwas aufgerüstet, und zwar anstatt einen einfach 3,0 Ghz mit 2 GB Speicher einen mit einem Dual-Prozessor, 4 GB Speicher. Leider haben wir an den Spitzentagen dennoch das Problem das der Load vom Webserver stark in die Höhe steigt. Schuld sind vermutlich die PHP Skripte und vielen PIs. DB Server läuft einwandfrei, Load < 2, Fileserver natürlich auch super.

Nun zu meinen Fragen:

1.) Wär es grundsätzlich möglich 2 Webserver mittels Round Robin parallel zu installieren und das Session-Verzeichnis mittels NFS für beide Server auf einen zusammenzulegen. Ein gemeinsames Session-Verzeichnis aus dem Grund weil es ja möglich sein könnte dass zwischen den einzelnen Aufrufen auf den anderen Server ausweicht. Oder bleibt er beim gleichen Webserver wenn das RR-Verfahren eingesetzt wird? Uploads würden mittels NFS auf den Filesserver gespielt.


2.) Welche Möglichkeiten gibt es PHP etwas performanter zu installieren. Derzeit ist php 4.3 im Einsatz, würde der Umstieg auf php 5 etwas bringen? (Die Skripte an sich wurden soweit durchgesehen und verbessert, hier sehen wir nur mehr wenig möglichkeiten)


besten Dank für euere Hilfe
energy
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen
 

Re: 2 Webserver - Round Robin - gemeinsames Laufwerk für Ses

Post by andreask2 »

Um PHP schneller zu bekommen gibt es einige Dinge, kommt drauf an was Du schon gemacht hast, aber erwarte keine Wunder. Je nach Script erreicht man das meiste sicherlich mit Hilfe eins Profilers(z.B. xdebug), mit dem man die Entgpässe finden und ggfs. beheben kann. Dann natürlich cachen, cachen und nochmal cachen. Das fängt an in der Datenbank, die Querys... cachen kann, geht über PHP-Scripte die "teure" Berechnungen cachen können (PEAR::Cache), PHP-Scripte die per Opcode-Cache im RAM gehalten werden (z.B. mit PECL::APC), auf HTTP-Ebene cachen, versuchen die Anzahl der Requests zu reduzieren (indem Seiten z.B. für einige Sekunden oder besser Minuten vom Client gecached werden können - wo es möglich ist)...

Einen guten Artikel zum Thema findest Du hier: http://aktuell.de.selfhtml.org/artikel/ ... index.html, der ist auch im Linux-Magazin erschienen.

Dann würde ich für statische und dynamische Inhalte 2 verschiedene Apachen verwenden, beide für den jeweiligen Zweck optimiert, mit so wenig Modulen wie möglich, entsprechend auch PHP mit so wenig Modulen wie möglch, PHP mit --prefer-non-pic kompilieren...

Und natürlich die Last der PHP-Scripte auf die 2 Rechner verteilen. Das Problem mit den Sessions kannst Du entweder so wie Du es beschreibst lösen, oder die Session ebenfalls über ein DB-Backend laufen lassen. Auf der anderen Seite - so oft sollte es bei DNS Round Robin ja nicht vorkommen dass während einer Session der DNS-Server neu abgefragt wird (wobei einige Mozilla-Versionen hier ein Problem haben...). Evtl. könntest Du einen Mechanismus einbauen, entweder prüfen ob es zu einer Session-ID eine Session gibt, und wenn nicht auf den anderen Server leiten(aber hier einen paramter mitgeben, nicht dass das endlos so geht...) oder aber, Du leitest den Rechner direkt am Anfang der Session auf einen Alias-Hostnamen um, der per DNS immer auf dieselbe IP zeigt, also z.B.:

http://www.example.com

Auf Server 1 richtest Du einen alias für "www1.example.com" ein, und leitest jeden Request an "www.example.com" direkt an "www1.example.com" weiter, entsprechend mit "www2.example.com" beim 2. Server. Wenn Du dann im HTML-Code nur relative Links einsetzt, bleibt jeder auf seinem Server, und Du sparst Dir den Overhead der Netzwerkübertragung.

speziell für PHP sind vielleicht folgende Artikel/Präsentation interessant:
http://talks.php.net/show/perf-oscom4/
http://phplens.com/phpeverywhere/node/view/8
http://phplens.com/lens/php-book/optimi ... ng-php.php

Oder verwende einen Webserver der speziell für diesen Zweck entwickelt wurde: http://www.incremental.de/products/lighttpd/
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: 2 Webserver - Round Robin - gemeinsames Laufwerk für Session

Post by Joe User »

Auch wenn es auf den ersten Blick nicht so aussehen mag, so finden sich dennoch einige grundlegende Denkansätze beispielsweise in folgendem Thread: http://www.phpbb.com/phpBB/viewtopic.php?t=135383
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
energy2
Posts: 16
Joined: 2003-04-07 19:16
 

Re: 2 Webserver - Round Robin - gemeinsames Laufwerk für Session

Post by energy2 »

erstmals herzlichen dank für die vielen ansätze und links, muss mich jetzt mal tiefer in die einzelnen punkte einarbeiten. Nachdem ich das Portal total neu überarbeite kann ich von anfang an ein Caching usw. einplanen.
Post Reply