S'assurer d'avoir suffisamment de mémoire pour créer un instantané Redis - Amazon ElastiCache for Redis

S'assurer d'avoir suffisamment de mémoire pour créer un instantané Redis

Synchronisations et instantanés Redis dans la version 2.8.22 et versions ultérieures

Redis 2.8.22 présente un processus d'enregistrement sans fonction fork qui vous permet d'attribuer plus de votre mémoire pour l'utilisation de votre application sans augmenter l'utilisation de l'espace d'échange pendant les synchronisations et les enregistrements. Pour plus d’informations, consultez Implémentation de la sauvegarde et de la synchronisation.

Synchronisations et instantanés Redis antérieurs à la version 2.8.22

Lorsque vous utilisez Redis avec ElastiCache, Redis appelle une commande d'écriture en arrière-plan dans un certain nombre de cas :

  • Lorsque de la création d'un instantané pour une sauvegarde.

  • Lors de la synchronisation de réplicas avec le réplica principal dans un groupe de réplication.

  • Lorsque de l'activation de la fonctionnalité AOF (Append-Only File) pour Redis.

  • Lors la promotion d'un réplica en tant que maître (qui entraîne une synchronisation du réplica principal/réplica).

Chaque fois que Redis exécute un processus d'écriture en arrière-plan, vous devez avoir suffisamment de mémoire disponible pour supporter le traitement du processus. Si vous ne disposez pas de suffisamment de mémoire, le processus échoue. Pour cette raison, il est important de choisir un type d'instance de nœud qui a suffisamment de mémoire lors de la création de votre cluster Redis.

Processus d'écriture en arrière-plan et utilisation de la mémoire

Chaque fois qu'un processus d'écriture en arrière-plan est appelé, Redis duplique son processus à l'aide de la fonction fork (rappelez-vous que Redis est mono-thread). Un fork permet de stocker durablement vos données sur un disque dans un fichier d'instantané .rdb Redis. L'autre fork traite toutes les opérations de lecture et d'écriture. Afin de s'assurer que votre instantané est un instantané à un moment donné, l'ensemble des mises à jour et des ajouts de données sont écrits dans une zone de mémoire disponible distincte de la zone de données.

Tant que vous disposez de suffisamment de mémoire pour enregistrer toutes les opérations d'écriture pendant le stockage des données sur le disque, vous n'aurez pas de problème de mémoire insuffisante. Vous risquez d'avoir des problèmes de mémoire insuffisante si l'une des affirmations suivantes est vraie :

  • Votre application effectue de nombreuses opérations d'écriture, nécessitant une grande quantité de mémoire disponible pour accepter les données mises à jour ou nouvelles.

  • Vous disposez de très peu de mémoire disponible pour pouvoir écrire de nouvelles données ou mettre à jour des données.

  • Stocker durablement sur le disque votre jeu de données volumineux prend du temps car cela nécessite un grand nombre d'opérations d'écriture.

Le schéma suivant représente l'utilisation de la mémoire lors de l'exécution d'un processus d'écriture en arrière-plan.


					Image : Schéma d'utilisation de la mémoire lors d'un processus d'écriture en arrière-plan.

Pour obtenir des informations sur l'impact d'une sauvegarde sur les performances, consultez Impact sur les performances des sauvegardes.

Pour plus d'informations sur la façon dont Redis réalise des instantanés, consultez http://redis.io.

Pour plus d'informations sur les régions et les zones de disponibilité, consultez Choix des régions et des zones de disponibilité.

Eviter tout dépassement de mémoire lors de l'exécution d'un processus d'écriture en arrière-plan

Dès qu'un processus d'écriture en arrière-plan tel que BGSAVE ou BGREWRITEAOF est appelé, et pour éviter la mise en échec du processus, vous devez disposer d'une quantité de mémoire supérieure à celle qui sera utilisée par les opérations d'écriture au cours du processus. Le pire scénario, c'est lorsque pendant l'opération d'écriture en arrière-plan, chaque enregistrement Redis est mis à jour et que certains nouveaux enregistrements sont ajoutés au cache. Pour cette raison, nous vous recommandons de définir reserved-memory-percent à 50 (50 %) pour les versions Redis antérieures à 2.8.22 ou à 25 (25 %) pour les versions Redis 2.8.22 et ultérieures.

La valeur maxmemory indique que la mémoire dont vous disposez pour le traitement des données et la surcharge opérationnelle. Etant donné que vous ne pouvez pas modifier le paramètre reserved-memory dans le groupe de paramètres par défaut, vous devez créer un groupe de paramètres personnalisés pour le cluster. La valeur par défaut de reserved-memory est 0, ce qui permet à Redis d'utiliser la totalité de maxmemory avec des données, et laissant ainsi trop peu de mémoire disponible pour d'autres usages, tels qu'un processus d'écriture en arrière-plan. Pour les valeurs maxmemory par type d'instance de nœud, consultez Paramètres propres au type de nœud Redis.

Vous pouvez également utiliser le paramètre reserved-memory afin de réduire la quantité de mémoire que Redis utilise sur la zone.

Pour plus d'informations sur les paramètres spécifiques à Redis dans ElastiCache, veuillez consulter Paramètres spécifiques Redis.

Pour plus d'informations sur la création et la modification des groupes de paramètres, consultez Création d'un groupe de paramètres et Modification d'un groupe de paramètres.