Seite wählen

FastCGI und Icinga-web

von | Nov 24, 2011 | Icinga, Development

PHP skaliert in Standardinstallationen relativ schlecht. Grund dafür ist, daß der Webserver jedes mal eine neue Interpreterinstanz erstellen muss und danach wieder zerstört. Das kostet Zeit und eine Menge Performance / Nerven. Besser funktioniert es mit FastCGI. Hier werden die Interpreterinstanzen unabhängig vom Webserver gestartet und stehen fertig geladen bereit wenn der Request beim Webserver eintrifft. Leider ist die Konfiguration etwas schwieriger da es für FastCGI keine richtige Standardlösung gibt. Je nach Webserver werden eigene Wrapper benötigt die gestartet werden müssen. Weshalb ein solches Konstrukt oft auf wackeligen Beinen steht und anfällig für Bedienfehler ist.
Mit PHP 5.3 führt die Interpretersprache einen eigenen Manager für FastCGI Prozesse ein: FPM – FastCGI Process Manager. Mit ihm ist es auf einfache Art möglich Gruppen von Applikationen anzulegen, Skalierung einzustellen und dadurch den Überblick über kritische oder schwer gewichtige Webapplikationen zu behalten.
Ich habe mal versucht den FPM mit Apache2 (mpm-worker) unter Ubuntu am Beispiel von Icinga-web zum laufen zu bekommen. Ausgangssituation ist ein installierter Apache2 und eine Standard Icinga-web Installation aus den Tutorials oder den Quickstart Guides.
1) Installation der benötigten Pakete und aktivieren der benötigten Module:

# aptitude install libapache2-mod-fastcgi php5-fpm
# a2enmod fastcgi actions rewrite
Enabling module fastcgi.
Enabling module actions.
Enabling module rewrite.

2) Vorbereiten der Konfiguration für FPM

# pwd
/etc/php5/fpm
# cat pool.d/icinga-web.conf
[icinga-web]
listen = 127.0.0.1:9000
user = www-data
group = www-data
pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 50
;pm.max_requests = 500
chroot =
chdir = /usr/local/icinga-web/pub

Ich habe die Standardkonfiguration für „www“ vorher deaktiviert. Ansonsten würden sich die Sockets auf Port 9000 einen Strich durch die Rechnung machen.
3) Fehlt noch eine Apache Konfiguration (Icinga-web Standard mit FastCGI Erweiterung):

# pwd
/etc/apache2/sites-available
# cat fcgi-test
	FastCgiExternalServer /var/www/php5.external -host 127.0.0.1:9000
	DocumentRoot /var/www
	AddHandler php5-fcgi .php
	Action php5-fcgi /usr/lib/cgi-bin/php5.external
	Alias /usr/lib/cgi-bin/ /var/www/
	AliasMatch /icinga-web/modules/([A-Za-z0-9]*)/resources/styles/([A-Za-z0-9]*\.css)$ /usr/local/icinga-web/app/modules/$1/pub/styles/$2
	AliasMatch /icinga-web/modules/([A-Za-z0-9]*)/resources/images/([A-Za-z_\-0-9]*\.(png|gif|jpg))$ /usr/local/icinga-web/app/modules/$1/pub/images/$2
	Alias /icinga-web/js/ext3 /usr/local/icinga-web/lib/ext3
	Alias /icinga-web /usr/local/icinga-web/pub
	        Order allow,deny
	        Allow from all
	        Order allow,deny
	        Allow from all
	        Order allow,deny
	        Allow from all
	        DirectoryIndex index.php
	        Options FollowSymLinks
	        AllowOverride all
	        Order allow,deny
	        Allow from all
# a2ensite  fcgi-test
Enabling site fcgi-test.

4) Apachen neu laden und den FPM Pool starten:

# ps aux | grep fpm | head -3
root      5213  0.0  0.0 145792  4872 ?        Ss   13:18   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data  5214  0.1  0.4 173028 34312 ?        S    13:18   0:00 php-fpm: pool icinga-web
www-data  5215  0.3  0.4 175140 36824 ?        S    13:18   0:00 php-fpm: pool icinga-web

Das ganze ist zwar nur rudimentär getestet und icinga-web nicht optimiert für FastCGI, bietet aber Potential für mehr: Persistenter Agavi Cache, Connection Pooling für die Datenbank, usw.

Marius Hein
Marius Hein
Head of IT Service Management

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert und viele Jahre in der Softwareentwicklung gearbeitet. Mittlerweile ist er Herr über die interne IT und als Leiter von ITSM zuständig für die technische Schnittmenge der Abteilungen der NETWAYS Gruppe. Wenn er nicht gerade IPv6 IPSec Tunnel bohrt, sitzt er daheim am Schlagzeug und treibt seine Nachbarn in den Wahnsinn.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Icinga | Development