memcached PHP Sessions
+
Par Remi le dimanche 2 septembre 2007, 18:53 - HowTo - 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.
Commentaires
Merci de m'avoir dépatouillé de ce soucis. J'ai du intervenir sur un serveur sous CentOs et comme je suis plutôt Debian / Ubuntu ... je n'avais pas les bons réflexes ;)
Bien que le paquet php-pecl-memcache ne soit plus dans la CentOs, un remplacement par pecl install memcache et l'édition manuelle de php.ini pour y changer les session.save_* et le tour est joué.
Donc, un grand merci, pour cet article qui n'est plus tout jeune mais m'a rendu un fier service
@CoRpO
> Bien que le paquet php-pecl-memcache ne soit plus dans la CentOs
php-pecl-memcache-2.2.3 (pour php-5.1.x standard) est dispo dans EPEL.
php-pecl-memcache-3.0.4 (pour php-5.2.x) est dispo dans le dépôt remi
php-pecl-memcache-3.0.4 (pour php-5.3.x) est dispo dans le dépôt remi-test.
+
P.S. le problème de la commande "pecl install", c'est qu'elle oblige à installer les outils de développement (gcc, php-devel, ...) ce qui n'est généralement pas conseillé sur un serveur de prod.
Bonjour à vous Remi :)
Avant tout merci pour votre blog, il m'a souvent été très utile.
J'ai un petit soucis dans le cas de ce tutoriel (ma connaissance de Linux est disons...niveau moyen)
A la tentative de démarrage du daemon, voila la réponse :
"Starting memcached: /etc/init.d/memcached: Usage: daemon [+/-nicelevel] {program}"
Ma config : Centos4
Et merci encore pour votre travail sur RedHat & Co !
@Nagamé
Effectivement, il y a un problème dans le script de gestion du service. J'ai mis à disposition un peu vite le paquet (rétro-portage de la version Fedora car absent des dépôts officiels)
A re-tester avec la version memcached-0-1.2.8-1.el4.remi.1.
Merci de m'avoir signalé le problème.
+
Merci, ca marche pas encore parfaitement mais j'avance beaucoup grâce a ce tuto !