Blog

Comment intégrer Redis avec Drupal

05.07.2024
drupal-redis

Drupal est l'un des systèmes de gestion de contenu (CMS) les plus robustes et flexibles disponibles aujourd'hui. Cependant, à mesure que le trafic augmente, vous pouvez rencontrer des problèmes de performance. C'est là qu'intervient Redis, une base de données en mémoire, de type clé-valeur, extrêmement rapide. Dans cet article, nous explorerons comment intégrer Redis dans Drupal pour améliorer les performances et la scalabilité de votre site.

Qu'est-ce que Redis ?

Redis, acronyme de Remote Dictionary Server, est une base de données NoSQL en mémoire, capable de stocker et de manipuler des structures de données telles que des chaînes, des listes, des ensembles, des hachages et des bitmaps. Contrairement aux bases de données traditionnelles qui écrivent les données sur disque, Redis stocke toutes les données en mémoire, ce qui permet des opérations extrêmement rapides.

Les avantages de Redis incluent :

  • Rapidité : Les opérations en mémoire sont beaucoup plus rapides que les opérations sur disque.
  • Simplicité : Redis utilise une structure de données clé-valeur simple.
  • Flexibilité : Redis supporte une variété de structures de données, ce qui le rend adaptable à de nombreux cas d'utilisation.
  • Persistance : Redis peut sauvegarder les données sur disque, offrant un compromis entre rapidité et persistance des données.

Pourquoi Intégrer Redis avec Drupal ?

Les sites Drupal peuvent bénéficier de Redis de plusieurs manières :

  • Caching : Redis peut être utilisé pour mettre en cache les pages, les blocs, les vues, et d'autres données fréquemment consultées, réduisant ainsi la charge sur la base de données principale.
  • Sessions : La gestion des sessions utilisateur dans Redis peut améliorer les performances, surtout sur les sites à fort trafic.
  • Queue de tâches : Redis peut servir de backend pour les systèmes de file d'attente, aidant à gérer les tâches asynchrones et à répartir la charge.

Installation de Redis sur votre serveur

Pour installer Redis sur un serveur Linux, vous pouvez utiliser les commandes suivantes :

sudo apt update
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server

La configuration de Redis est généralement située dans /etc/redis/redis.conf. Pour des performances optimales, vous pouvez ajuster certains paramètres comme maxmemory et maxmemory-policy.

maxmemory-policy volatile-lru
maxmemory 8gb

Afin d'éviter de surcharger les écritures disques avec les sauvegardes, vous pouvez également mettre ce paramètre : 

save ""

Installation du module Redis dans Drupal

Ensuite, installez le module Redis pour Drupal en utilisant Composer :

composer require drupal/redis

Activez ensuite le module Redis via Drush ou l'interface utilisateur de Drupal :

drush en redis

Modifiez votre fichier settings.php pour configurer Drupal afin qu'il utilise Redis. Ajoutez les lignes suivantes :

$conf['redis_cache_socket'] = '/var/run/redis/redis-server.sock';
$settings['redis.connection']['interface'] = 'PhpRedis';
$settings['redis.connection']['host']      = '127.0.0.1';
$settings['redis.connection']['port'] = '6379';
$settings['redis.connection']['base']      = 0;
$settings['cache']['default'] = 'cache.backend.redis';
$settings['cache']['bins']['bootstrap'] = 'cache.backend.chainedfast';
$settings['cache']['bins']['discovery'] = 'cache.backend.chainedfast';
$settings['cache']['bins']['config'] = 'cache.backend.chainedfast';
$settings['cache_prefix']['default'] = 'your_site_prefix';

Pour utiliser Redis pour la gestion des sessions, ajoutez également ces lignes à votre settings.php :

$settings['session_storage'] = [
 'handler' => 'redis.session.handler',
 'save_path' => 'tcp://127.0.0.1:6379',
];

Pour que Redis gère les queues dans Drupal, vous devez configurer le module Queue pour utiliser Redis comme backend. Assurez-vous d'avoir installé le module Redis et le module queue_redis :

composer require drupal/redis
composer require drupal/queue_redis

Activez les modules via Drush ou l'interface utilisateur de Drupal :

drush en redis queue_redis

Ouvrez votre fichier settings.php et ajoutez la configuration suivante :

// Configuration de la gestion des queues avec Redis
$settings['queue_default'] = 'queue_redis';
$settings['queue_redis_connection'] = [
 'interface' => 'PhpRedis',
 'host' => '127.0.0.1',
 'port' => '6379',
];

Pour vérifier que Redis est correctement configuré pour gérer les queues, vous pouvez exécuter les commandes Drush suivantes pour vérifier le statut des queues :

drush queue:list

Pour vérifier que Redis est correctement intégré avec Drupal, vous pouvez utiliser l'outil de commande Drush pour vérifier le statut de Redis :

drush redis:status

Cela devrait afficher des informations sur la connexion Redis et les caches actifs.

Utilisation de Redis en mode Maître-Esclave dans le cadre de plusieurs frontaux avec un load balancer

L'utilisation de Redis en mode maître-esclave est une technique courante pour améliorer la disponibilité et la répartition de la charge dans un environnement de production. Dans cette configuration, un serveur Redis principal (maître) gère toutes les opérations d'écriture, tandis qu'un ou plusieurs serveurs secondaires (esclaves) répliquent ces données et gèrent les opérations de lecture. 

En cas de défaillance du maître, un esclave peut être promu au rôle de maître, assurant ainsi une continuité de service sans interruption significative. La réplication des données est asynchrone, ce qui peut entraîner une légère latence, mais cela permet une gestion efficace et réactive des ressources, surtout pour les applications nécessitant un haut degré de disponibilité et de performance. De plus, cette configuration facilite les sauvegardes et la récupération en cas de panne, car les données sont constamment dupliquées sur plusieurs instances.

Configuration du serveur Maître

Rien de particulier à réaliser sur le serveur maître, il faut juste s'assurer que celui-ci est bien en cours d'exécution. Vous pouvez vérifier cela avec la commande suivante :

sudo systemctl status redis

Configuration du serveur Esclave

Sur chaque serveur esclave, installez Redis comme vous l'avez fait pour le maître. Ensuite, ouvrez le fichier de configuration Redis (/etc/redis/redis.conf) et ajoutez la ligne suivante pour spécifier le maître :

replicaof <IP_DU_MAITRE> 6379

Remplacez <IP_DU_MAITRE> par l'adresse IP du serveur maître.

Redémarrez Redis sur chaque serveur esclave pour appliquer les modifications :

sudo systemctl restart redis

Sur le serveur esclave, vous pouvez utiliser la commande suivante pour vérifier que la réplication fonctionne correctement :

redis-cli info replication

Configuration de Drupal pour Utiliser Redis en Mode Maître-Esclave
Sur chaque serveur esclave, modifiez les lignes suivantes dans le fichier settings.php de Drupal : 

$settings['redis.connection']['host'] = '<IP_DU_MAITRE>';
$settings['cache_prefix']['default'] = 'your_site_prefix';

Attention de bien remplacer <IP_DU_MAITRE> par l'IP de votre serveur Redis Maître. Le paramètre cache_prefix est également obligatoire. Effectivement, de base, Redis va mettre l'IP du serveur en prefix. Cela aura pour conséquence de doubler l'ensemble de vos clés sur le serveur maître.

Conclusion

L'intégration de Redis dans un site Drupal peut apporter des améliorations significatives en termes de performances et de scalabilité. En utilisant Redis pour le caching, la gestion des sessions et les queues de tâches, vous pouvez réduire la charge sur votre base de données principale et offrir une expérience utilisateur plus fluide et réactive. 

Un projet ? Parlons-en

Nous sommes à votre écoute pour étudier vos besoins
et vous proposer les meilleures solutions.

Autres articles

L'intégration de frameworks frontend comme React avec des systèmes de gestion de contenu (CMS) est une tendance croissante dans le développement web. Cet article vise à guider les développeurs à travers le processus d'intégration de React avec Drupal, en tirant parti des avantages de ces deux technologies.

L'une des fonctionnalités les plus couramment demandé par nos clients est l'intégration du site web avec le système de gestion de la relation client de leur entreprise. Et, dans l'univers des CRM, Salesforce fait incontestablement figure de référence.