Contexte :
Sans configuration particulière, les sesions PHP sont stockées dans un répertoire local sur le système de fichiers du serveur.
Cependant, dans le cas d’une infrastructure web composée de plusieurs serveurs derrière un load balancer, si l’utilisateur se trouve aiguillé sur un second serveur, il perd alors sa session.
Pour assurer une continuité du service, on peut utiliser un système de fichiers partagé ou un système en mémoire comme Memcached.
Memcached:
On installe le service sur chacun des frontaux web :
root@www1:~# apt -y install memcached root@www1:~# systemctl enable memcached
On configure memcache pour à minima écouter sur le réseau et naturellement il faudra redémarrer memcached après cela :
root@www1:~# cat /etc/memcached.conf -d logfile /var/log/memcached.log -m 64 -p 11211 -u memcache -l 0.0.0.0 -P /var/run/memcached/memcached.pid
PHP :
Côté PHP, on aura besoin de l’extension correspondant à la version de PHP installée.
PHP fourni deux extensions, -memcache et -memcached, plus récente. C’est bien la première que nous voulons.
Exemple :
root@www1:~# apt -y install php8.1-memcache
Ensuite, côté PHP, il faut indiquer memcache comme session handler dans le fichier php.ini.
Côté Debian, celui-ci est géré par version et par type de module (cli,mod apache, ou php-fpm) dans le répertoire /etc/php/version/install_type.
Chaque serveur memcache doit être indiqué car il faut se rappeler que les différents serveurs memcache n’opèrent pas comme un vrai cluster.
session.save_handler = memcache session.save_path = 'tcp://192.168.10.1:11211,tcp://192.168.10.2'
Enfin on va indiquer dans la configuration du module memcache (conf.d/20-memcache.ini sous Debian/Ubuntu) le mode de stockage des clés :
memcache.allow_failover=1 memcache.session_redundancy=3 memcache.hash_strategy=consistent
Le nombre de session_redundancy doit être égal au nombre de serveurs memcache + 1.