Dans le cas ou vous avez une application PHPLangage de programmation s’exécutant côté serveur et permettant la création dynamique de pages web ou d'APIs. répliquée sur deux ou plus serveurs d’un cluster avec en amont un load balancer (NGINX par exemple) qui redistribue la charge de manière uniforme sur les noeuds (serveur, ou VM), vous pouvez avoir des problèmes pour répliquer les sessions PHP.
Le problème est que lorsque vous créé une session en PHP, PHP crée un fichier de la forme sess_**. Ce fichier sert de stockage de session, malheureusement si vous avez plusieurs serveurs, ce fichier n’est pas répliqué entre les noeuds du cluster.
Par exemple, lors d’un formulaire de connexion si vous stockez dans la session de l’utilisation des informations, lors de la réactualisation de la page, il se peut et il est fort probable que votre loadbalancer vous envoi sur un autre noeud ou ne se trouve pas votre session, le traitement ne fonctionne plus car PHP ne retrouve plus les variables de session.
Comment résoudre le problème?
Une solution efficace si votre système n’est pas trop chargé est de partager un répertoire entre vos différents noeuds du cluster et ainsi de répliquer les sessions PHP (fichier sess_****).
Nous allons voir comment procéder.
Pré-requis:
Posséder deux noeuds du cluster et un serveur de fichier (une simple machine virtuelle peut faire l’affaire).
L’objectif est de monter un répertoire du serveur de fichier vers les deux noeuds du cluster et de forcer PHP à écrire dans ce répertoire les sessions.
Le plus simple est de monter un serveur de fichier NFS.
apt-get install nfs-kerner-server
mkdir /home/session_php/
vi /etc/exports
Rajouter une ligne pour activer le partage du répertoire php_session, par exemple comme ceci. Ici nous partageons le répertoire pour tous les serveurs du sous réseau 192.168.100.0/24 (tous les noeuds du cluster)
/home/session_php 192.168.100.0/24(rw,sync,no_all_squash,anonuid=1000,anongid=1000,no_root_squash)
/etc/init.d/nfs-kernel-server restart
C’est tout pour le serveur
mkdir /php_session/
Editer le fichier /etc/fstab
vi /etc/fstab
Rajouter une ligne comme ceci (en changeant l’adresse ip par celle de votre serveur de l’étape 1)
192.168.100.21:/home/session_php /session_php nfs defaults,user,auto,noatime,intr,rw 0 0
Pour monter le fichier fstab vous pouvez effectuer
mount -a
vi /etc/php5/apache2/php.ini
et rajouter la ligne:
session.save_path = "/session_php/"
/etc/init.d/apache restart
Attention, il faut s’assurer que l’utilisation du apache existe et a les droits d’écriture sur le serveur de fichier. Par exemple www-data est bien le droit d’écriture sur le serveur NFS dans le répertoire /home/php_session/. NFS se basant sur le nom des utilisateurs ainsi que leurs GUID, il faut donc vérifer dans /etc/shadow.
C’est tout!
Vous pouvez voir les sessions se créer dans le répertoire /sessions_php/ et être corretement synchronisées entre les différents neouds du cluster.
Configuration des packages et début des développements d’un projet Symfony
Initialisation d’une API web avec le framework Spring Boot !
3 techniques pour trouver le bon développeur pour votre projet !