memcached est un cache pour objet pour les serveurs distribués.
Il permet de stocker des objets sous la forme clé/valeur.
Vous pouvez installer memcached sur n’importe quel VPS, serveur dédié (OVH, Dedibox, IONIS 1&1) car la plupart des distributions Linux le proposent.
memcached peut aussi fonctionner sur un pool de serveurs pour du load balancing par exemple pour vos serveurs WEB à travers les librairies PHP.
Dans ce tutoriel, je vous montre comment installer memcached sur un serveur dédié ou sur des serveurs partagés pour du load balancing.
Enfin quelques configurations memcached pour des applications PHP telles que WordPress, Google PageSpeed ou phpBB.
Table des matières
Comment installer et configurer memcached et php-memcache
Sur les distributions Linux Redhat, CentOS, le paquet est php-pecl-memcached.
Sur un serveur dédié
- Installez memcached avec APT :
apt-get install php-memcache memcached
- Sur un serveur dédié seul, vous pouvez faire écouter memcached sur le localhost.
- Pour cela, éditez le fichier /etc/memcached.conf puis décommentez le paramètre -l.
-l 127.0.0.1
- Puis éditez le fichier de configuration de PHP /etc/php/7.3/mods-available/memcache.ini :
session.save_handler = memcache
session.save_path = 'tcp://127.0.0.1:11211'
- On peut aussi ajouter des paramètres par exemple :
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
- Enfin redémarrez les services :
/etc/init.d/php-fpm restart
/etc/init.d/memcached restart
Sur plusieurs de serveurs pour du load balancing
L’utilisation de sessions PHP peut être un problème lorsque vos applications PHP sont équilibrées en charge sur de nombreux serveurs Web.
Vous pouvez les stocker sur un export NFS ou recoder le session_set_save_handler en utilisant un backend SQL par exemple. Mais il n’y a pas de solution plus efficace, plus évolutive, plus performante et plus facile à déployer que d’utiliser memcache.
- Installez memcached avec APT :
apt-get install php-memcache memcached
- puis éditez le fichier éditez le fichier /etc/memcached.conf pour commencer la ligne -l.
- Ainsi memcached va écouter sur toutes les interfaces réseaux.
- Il est possible de spécifier les adresses IP en les séparant par des virgules mais dans mon cas cela ne fonctionnait pas.
-l 127.0.0.1, IP1, IP2
- Ensuite éditez le fichier /etc/php/7.3/mods-available/memcache.ini et ajoutez les lignes suivantes.
- memcache.session_redundancy doit être réglé sur nb serveur + 1. Ici il est à 4 pour un pool de trois serveurs.
memcache.allow_failover=1
memcache.session_redundancy=4
- Enfin pour stocker la session PHP avec memcached, éditez le fichier /etc/php/7.3/mods-available/memcache.ini.
- Puis modifiez les variables suivantes :
session.save_handler = memcache
session.save_path = 'tcp://IP1:11211,tcp://IP2:11211,tcp://IP2:11211'
- Ensuite il convient de protéger l’accès avec iptables par exemple.
- Inspirez vous de ces règles pour autoriser le port 11211 sur chaque serveur en remplaçant IP1, IP2 par l’adresse IP des serveurs du pool
iptables -A INPUT -s IP1 -i eth1 -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
iptables -A INPUT -s IP2 -i eth1 -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
- Pour tester la connexion memcached, vous pouvez utiliser memcping disponible dans libmemcached-tools
memcping --server=IP1,IP2 --verbose
- Enfin redémarrez les services :
/etc/init.d/php-fpm restart
/etc/init.d/memcached restart
Comment savoir si memcached est installé
Si vous rencontrez des problèmes memcached, voici comment vérifier votre installation.
Vérifier que le service memcached est actif
Commencez par vérifier que memcached est en cours de fonctionnement.
Pour cela il faut vérifier que le service (daemon) est bien actif.
systemctl status memcached
ou plus général à toutes les distributions Linux :
/etc/init.d/memcached status
Lorsque le service est actif, Active retourne active (running).
● memcached.service - memcached daemon
Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-07-02 13:21:23 UTC; 3h 7min ago
Docs: man:memcached(1)
Main PID: 26864 (memcached)
Tasks: 10 (limit: 4915)
Memory: 41.8M
CGroup: /system.slice/memcached.service
└─26864 /usr/bin/memcached -m 2048 -p 11211 -u memcache -P /var/run/memcached/memcached.pid
Autre méthode avec ps pour vérifier que le processus memcached est en cours de fonctionnement:
ps -ef|grep memcached
Enfin vérifiez avec netstat que memcached est bien en écoute (LISTENING) :
netstat -lp|grep memcached
avec phpinfo
Ensuite il faut vérifier que le module memcached de PHP est bien actif.
La solution la plus simple est de consulter la configuration PHP avec phpinfo.
- Créez une page PHP avec :
<?php
phpinfo();
?>
- Puis consultez la page depuis votre navigateur internet.
- La liste des modules se charge, vérifiez que memcached est bien présent
Enfin pensez à supprimer la page de test par sécurité.
Comment configurer memcached
Ensuite vous devez configurer votre application PHP (ou autre) à utiliser memcached.
Il faut modifier la configuration, en général un fichier config.php.
Utiliser memcached avec WordPress
Il faut passer par une extension de cache telle que Total Cache ou WP Super Cache.
A partir de là, on active memcached dans la configuration de l’extension.
Il est aussi possible de passer par Batcache.
Cela nécessite
- D’uploader le fichier advanced-cache.php dans le dossier /wp-content/ de WordPress
- Puis de modifier le fichier de configuration de WordPress wp-config.php pour ajouter :
define(‘WP_CACHE’, true);
Utiliser memcached avec phpBB
Modifiez le fichier config.php de phpBB en remplaçant la variable acm_type de cette manière :
//$acm_type = 'phpbb\\cache\\driver\\file';
$acm_type = 'phpbb\\cache\\driver\\memcache';
Si vous avez besoin d’indiquer l’adresse memcached :
define('PHPBB_ACM_MEMCACHE_HOST', 'localhost'); // Memcache server hostname
define('PHPBB_ACM_MEMCACHE_PORT', 11211); // Memcache server port
define('PHPBB_ACM_MEMCACHE_COMPRESS', false); // Compress stored data
Utiliser memcached avec Google PageSpeed
Google PageSpeed est un module pour Apache ou Nginx pour optimiser vos sites WEB.
Il permet notamment la mise en place d’un cache que l’on peut placer dans memcached.
Pour cela, il faut déclarer les paramètres suivants :
## Speed up PageSpeed by storing it in memcached
pagespeed MemcachedThreads 1;
pagespeed MemcachedServers "localhost:11211";
Vider ou afficher le contenu d’un serveur Memcached en ligne de commandes
Enfin pour obtenir des informations sur le contenu du serveur Memcached.
Comment interroger le contenu ou vider le cache, suivez ce tutoriel :
Liens
- Nginx : un serveur WEB rapide
- Protéger Nginx des attaques DoS et bruteforce
- Optimiser Nginx pour améliorer la vitesse des sites WEB
- Optimiser le cache de Nginx et fastcgi
- Configurer le cache FastCGI de Nginx
- Nginx : implémenter la mise en cache du navigateur avec le Cache Control
- Comment vider le cache Nginx
- Nginx : configurer un MicroCaching pour améliorer les performances
- Installer/Configurer le module Google PageSpeed pour optimiser vos sites WEB
- Comment installer PHP sur Ubuntu
- Optimiser PHP-FPM
- Comment accélérer et optimiser WordPress
- Cloudflare : comment protéger Nginx et WordPress des attaques DoS, piratages et bruteforce
- Comment fonctionne un serveur WEB