EQVPS
Tableau de bordCommencer

Installer Redis sur un VPS : limite de mémoire, persistance et un mot de passe qui tient

Installer Redis sur Ubuntu 24.04, plafonner sa mémoire pour qu'il ne prenne pas tout le serveur, activer le fichier AOF sans effacer vos données et définir un mot de passe qui survit aux redémarrages. Deux de ces étapes cachent des pièges dans lesquels nous sommes tombés sur notre propre serveur de test.

Redis garde les données en mémoire et répond en une milliseconde environ, c'est pourquoi il se trouve derrière tant d'applications, comme cache, file d'attente ou stockage de sessions. L'installation tient en une commande. Le travail est dans les réglages par défaut : pas de limite de mémoire, des instantanés qui peuvent perdre les écritures récentes, et deux erreurs faciles qui effacent vos données ou désactivent votre mot de passe sans bruit. Ce guide couvre tout cela sur Ubuntu 24.04. Nous avons exécuté chaque étape sur notre image ; les chiffres viennent d'un serveur Micro (2 vCPU, 2 Go).

Il vous faut un utilisateur avec sudo. Le guide de configuration d'Ubuntu en crée un.

1. Installer

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

L'installation a pris 13 secondes et nous a donné Redis 7.0.15. Il démarre aussitôt et à chaque boot, répond PONG et n'écoute que sur le serveur lui-même : 127.0.0.1:6379 et [::1]:6379, avec protected-mode yes. Sans données, il utilisait 13,5 Mo de RAM.

Le journal contenait déjà un avertissement :

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis enregistre sur le disque depuis une copie de lui-même créée par fork, et avec le réglage par défaut du noyau ce fork peut échouer quand la mémoire manque. Corrigez-le une fois pour toutes :

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

Après le redémarrage, l'avertissement avait disparu.

2. Limiter sa mémoire

D'origine, maxmemory vaut 0, c'est-à-dire aucune limite, et la politique est noeviction. Redis prendra de la RAM jusqu'à ce que le serveur en manque. Fixez un plafond et décidez de ce qui se passe quand il est atteint :

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Nous avons testé les deux politiques avec une limite de 64 Mo et 400 000 écritures :

  • noeviction (par défaut) : la mémoire s'est arrêtée à 63 Mo et les nouvelles écritures ont échoué avec OOM command not allowed when used memory > 'maxmemory'. Le bon choix pour une file d'attente ou tout ce que vous ne pouvez pas perdre.
  • allkeys-lru : Redis a supprimé les clés les moins récemment utilisées, 48 606 au total, et toutes les écritures sont passées. Le bon choix pour un cache.

CONFIG REWRITE enregistre les réglages en cours dans /etc/redis/redis.conf, pour qu'ils survivent à un redémarrage. Il ajoute aussi une ligne qu'il faut connaître avant l'étape 4.

3. Choisir comment il enregistre sur le disque

Par défaut, Redis écrit un instantané (/var/lib/redis/dump.rdb) après 1 modification en une heure, 100 en cinq minutes ou 10 000 en une minute. Nous avons testé trois façons de l'arrêter :

Comment Redis s'est arrêtéInstantanés seuls (par défaut)Avec le fichier AOF
systemctl restartRien de perdu : il enregistre à l'arrêtRien de perdu
Tué avec kill -9La clé écrite après le dernier instantané avait disparuUne clé écrite 2 secondes avant l'arrêt était là

Dans les deux cas, systemd a relancé Redis tout seul en quelques secondes.

Si Redis contient des données qui vous manqueraient, activez le fichier AOF (append-only file). Il consigne chaque écriture et la vide sur le disque une fois par seconde. Faites-le sur le serveur en marche, pas en modifiant le fichier :

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Nous avons d'abord essayé l'autre méthode, et elle nous a coûté nos données. Nous avons remplacé appendonly no par appendonly yes dans redis.conf puis redémarré. Redis est revenu avec un AOF vide et n'a rien chargé depuis l'instantané : toutes les clés existantes avaient disparu. Au moment de s'arrêter ensuite, il a aussi écrit son nouveau contenu, sans les anciennes clés, par-dessus dump.rdb. CONFIG SET évite cela : Redis écrit d'abord l'AOF à partir des données en mémoire. Après un redémarrage, toutes nos clés étaient là.

Si Redis n'est qu'un cache qui peut repartir vide, faites l'inverse et désactivez l'enregistrement avec redis-cli CONFIG SET save "".

4. Définir un mot de passe

Voici le second piège. Après n'importe quel CONFIG REWRITE, Redis 7 ajoute cette ligne à la fin de redis.conf :

user default on nopass ~* &* +@all

Elle signifie « l'utilisateur par défaut n'a pas besoin de mot de passe ». Nous avons ensuite ajouté requirepass plus haut dans le fichier et redémarré. Redis répondait toujours PONG sans mot de passe, car la ligne user l'emporte. Définissez plutôt le mot de passe via Redis :

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Gardez le mot de passe en lieu sûr. Redis le stocke désormais sous forme de hachage SHA-256 dans cette même ligne user default. Après un redémarrage, redis-cli ping a répondu NOAUTH Authentication required. et seul le mot de passe fonctionnait. Transmettez-le à redis-cli par la variable REDISCLI_AUTH. Avec -a, il apparaît dans la liste des processus, et redis-cli vous en avertit. Dans votre application, placez-le dans l'URL Redis : redis://:PASSWORD@127.0.0.1:6379/0.

5. Y accéder depuis votre ordinateur

Laissez Redis sur 127.0.0.1 et passez par un tunnel SSH. Utilisez le port SSH de votre serveur, qui sur les offres NAT est votre port personnel :

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Tant que cela tourne, redis-cli -p 6380 et les outils de bureau de votre ordinateur parlent au Redis du serveur. Rien de nouveau n'est ouvert sur internet. Le guide des clés SSH permet au tunnel de se connecter sans mot de passe.

Quelle vitesse

Sur le serveur de test Micro, redis-benchmark avec 50 clients nous a donné :

TestRequêtes par secondeLatence médiane
SET30 3031,0 ms
GET35 1490,9 ms
SET, 16 commandes par aller-retour272 1092,4 ms
GET, 16 commandes par aller-retour414 9381,3 ms

Pour le cache ou la file de tâches d'une application web, c'est bien plus que nécessaire. Le surplus de vitesse vient de l'envoi des commandes par lots (pipelining).

Quelle offre

Redis a besoin de RAM pour vos données et de peu d'autre chose. Nano (2 vCPU, 1 Go, $3/mois) fait tourner Redis à côté d'une petite application avec maxmemory 256mb. Micro (2 Go, $5/mois) laisse de la place pour un cache plus grand et l'application. Si autre chose doit se connecter directement à Redis, prenez votre propre IPv4 (à partir de Nano-IP à $8/mois) et n'autorisez que cette adresse dans le pare-feu. Toutes les offres sont sur la page VPS, et le paiement se fait en USDT, USDC ou ETH sur Base, Ethereum ou Polygon.

FAQ

De combien de RAM Redis a-t-il besoin ?

Redis lui-même est minuscule : 13,5 Mo juste après l'installation sur notre serveur. Ce qu'il lui faut, c'est de la place pour vos données, qui vivent en mémoire. Réglez maxmemory selon ce que le serveur peut céder, par exemple 256 Mo sur un serveur de 1 Go, et choisissez ce qui se passe quand c'est plein.

Redis ou Valkey ?

Valkey est un fork de Redis parti de Redis 7.2 et parle le même protocole, donc la plupart des clients fonctionnent avec les deux. Ubuntu 24.04 ne fournit que Redis 7.0.15. Debian 13 propose Redis 8.0 et Valkey 8.1, et Debian 12 obtient Valkey 8.0 via les backports. Les étapes de ce guide valent pour les deux.

Pourquoi Redis perd-il des données après un plantage ?

Par défaut, Redis enregistre un instantané sur le disque toutes les quelques minutes, selon le nombre de clés modifiées. Quand nous avons tué le processus, la clé écrite après le dernier instantané avait disparu. Activez le fichier AOF, qui écrit chaque seconde, et un plantage vous coûtera au plus une seconde d'écritures environ.

J'ai ajouté requirepass dans redis.conf, pourquoi Redis accepte-t-il encore des commandes sans mot de passe ?

Sans doute parce que CONFIG REWRITE a été exécuté à un moment donné. Sous Redis 7, il ajoute la ligne user default on nopass ~* &* +@all à la fin de redis.conf, et cette ligne annule un requirepass placé plus haut. Définissez le mot de passe avec CONFIG SET requirepass puis CONFIG REWRITE : Redis l'enregistre alors dans cette ligne.

Puis-je ouvrir le port 6379 sur internet ?

Non. Les ports Redis ouverts sont scannés en permanence et sont une porte d'entrée courante vers les serveurs. Accédez à Redis depuis votre ordinateur par un tunnel SSH, ou gardez-le sur le même serveur que l'application qui l'utilise.

Commentaires

Pas encore de commentaires. Soyez le premier.

Laisser un commentaire

Les commentaires sont modérés avant leur publication.