memcached PHP Sessions
Par Remi le dimanche, septembre 2 2007, 18:53 - Fiches explicatives - Lien permanent
A small tutorial on using Memcached as a PHP session handler with php-pecl-memcache.
Un petit didacticiel sur l'utilisation de Memcached comme gestionnaire de sessions en PHP avec php-pecl-memcache.
Contexte
La plupart des applications développées en PHP utilisent les sessions pour stocker les informations qui doivent être conservées durant la navigation.
Lors de la mise en place de plusieurs serveurs (répartition de charge, tolérance de panne, etc) il est nécessaire de partager les sessions entre les différentes machines.
J'ai longtemps utilisé la solution triviale de rediriger les sessions vers un partage NFS.
Memcached est un service distribué gérant un cache d'objets en mémoire, très performant, générique par nature, mais particulièrement bien adapté à l'accélération des applications web. Nous allons voir comment l'utiliser comme gestionnaire pour les sessions PHP.
Installer le service memcached
Sur quelle machine monter le service ? La machine doit être disponible pour l'application, une solution consiste à la mettre sur la même machine que le serveur de bases de données, lui aussi indispensable à l'application (je ne connais pas beaucoup d'application sans base de données).
Le service est peu consommateur de charge processeur, mais peut nécessiter une grande quantité de mémoire.
Installation :
yum install memcached
Configuration :
Les options sont enregistrées dans le fichier /etc/sysconfig/memcached :
Il pourra être utile d'augmenter la taille du cache, définie par défaut à 64 Mo.
Sécurité : ce service n'est pas sécurisé, on ne l'utilisera donc pas sur une machine connectée à internet sans protéger son port d'écoute par une règle de parefeu. Dans le cas d'un serveur disposant de plusieurs adresses IP, il est possible de préciser sur quelle adresse écouter en ajoutant l'option -l.
Activation :
chkconfig memcached on service memcached start
Installer le gestionnaire de session
Le client PHP est disponible en tant qu'extension PECL (voir memcache) qui depuis la version 2.1.0 fournit aussi un gestionnaire de sessions.
Le paquet est disponible pour Fedora, RHEL et CentOS dans les dépôts officiels et ici (voir : php-pecl-memcache).
Installation :
yum install php-pecl-memcache
Configuration :
Les options sont prévues (commentées) dans le fichier /etc/php.d/memcache.ini. Il suffit de les décommenter et de les adapter :
; Use memcache as a session handler session.save_handler=memcache ; Defines a comma separated of server urls to use for session storage session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
Activation :
Il suffit ensuite de relancer le serveur Apache afin de prendre en compte l'extension et sa configuration :
service httpd restart
Les informations retournées dans les informations PHP permettent de vérifier la configuration :
# php -m | grep memcache memcache # php -i | grep -i session Session Support => enabled ... session.save_handler => memcache session.save_path => tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15 ...
Conclusion
J'espère que ce petit didacticiel vous aura donné envie d'essayer ce gestionnaire de sessions alternatif. Et comme toujours, vos commentaires sont les bienvenus.