Comment installer et configurer memcached

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.

Comment installer et configurer memcached

Comment installer et configurer memcached et php-memcache

Attention, il y a deux librairies PHP php-memcache et php-memcached, donc selon le driver utilisé par votre application PHP, il faut installer le bon.

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
Vérifier que le module php-memcached est bien chargé avec phpinfo

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 :

Tags: