Serverübergreifende PHP Sessions mit memcache

linux php memcache session cluster poc

Im letzten Artikel habe ich ein minimalistisches Active/Active Clustersetup aufgebaut. Ein Problem hierbei, wenn mal der eine, mal der andere Server eine Anfrage beantwortet klappt das mit vielen PHP-Anwendungen nicht, da die ihre Session-Informationen standardmäßig im Dateisystem ablegen. Somit stehen die Sessions immer nur einem der Cluster-Nodes zur Verfügung. Abhilfe schafft hier memcached bzw. php5-memcache.

Die Installation wird wie folgt gestartet:

apt-get install memcached php5-memcache

Anschließend müssen in der php.ini die folgenden Zeilen angepasst werden:

session.save_handler = memcache
session.save_path = ‘tcp://node1:11211,tcp://node2:11211’

Außerdem muss die Datei /etc/php5/mods-available/memcache.ini mit folgenden Werten versehen werden:

; uncomment the next line to enable the module
extension=memcache.so

[memcache]
memcache.dbpath=”/var/lib/memcache”
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0
memcache.allow_failover=1
memcache.session_redundancy=3

Der Wert memcache.session_redundancy muss aufgrund eines PHP-Bugs immer n+1 sein, wobei n die Anzahl der tatsächlichen Server ist.

In der Datei /etc/memcached.conf sollten jetzt noch IP (-l) und Port (-p) geprüft und ggf. angepasst werden.

Abschließend wird der Apache neu gestartet. Die ganze Aktion muss natürlich auf allen Nodes wiederholt werden. Lohn der Mühe: Sessions werden jetzt statt im Dateisystem in Memcache abgelegt und stehen so serverübergreifend zur Verfügung.


Comments

Blog Comments powered by Disqus.

Next Post Previous Post