Maison > base de données > Redis > le corps du texte

Une brève discussion sur les défauts des modes de persistance RDB et AOF dans Redis

青灯夜游
Libérer: 2021-08-10 10:05:09
avant
2091 Les gens l'ont consulté

Cet article vous présentera les lacunes des deux modes de persistance de Redis (RDB et AOF). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur les défauts des modes de persistance RDB et AOF dans Redis

[Recommandations associées : Tutoriel vidéo Redis]

Défauts du mode de persistance RDB

1. Description du problème :

200 canaux simultanés, simulant une écriture continue sur Redis. Après 4 heures, un grand nombre d'appels d'interface ont commencé à échouer :

{"data":{"sendResult":null},"base":{"returncode":"99999","returndesc":"系统异常:MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error."},"qrybase":{"total":0,"count":0,"start":0}}
Copier après la connexion
<. 🎜>2. Analyse de la raison :

J'ai interprété le message d'erreur et j'ai pensé qu'il était dû à un espace disque insuffisant. Il s'est avéré qu'il restait 42 % du disque, comme indiqué ci-dessous :

Une brève discussion sur les défauts des modes de persistance RDB et AOF dans Redis

Donc, sur la base du message d'erreur, il vous invite à activer le journal Redis et à poursuivre le test de stress. L'interface signale toujours une erreur, mais elle peut être vue à partir des informations du journal Redis. par le processus principal de Redis comme suit : occupant près de 55%*4G de mémoire

Raison spécifique : Afin d'éviter que le processus principal suspende l'animation lorsque Redis enregistre les données dans le disque dur, il doit créer une copie. Le processus principal termine ensuite l'opération de sauvegarde des données sur le disque dur dans le processus Fork. Si le processus principal utilise 2,2 Go de mémoire, 2,2 Go supplémentaires sont nécessaires lors du Fork du processus enfant. À ce stade, la mémoire n'est pas suffisante, Fork échoue et les données sont également enregistrées.

3. Plan d'atténuation (ne peut pas fondamentalement résoudre le problème) : Une brève discussion sur les défauts des modes de persistance RDB et AOF dans Redis

3.1 Modifier l'élément de configuration stop-writes-on-bgsave-error no dans le fichier redis.conf (la valeur par défaut est oui), c'est-à-dire lorsqu'une erreur se produit lors de l'opération d'instantané bgsave, arrêtez d'écrire des données sur le disque. De cette manière, toute erreur d'écriture ultérieure échouera. Afin de ne pas affecter les opérations d'écriture ultérieures, la valeur de cet élément doit être. changé en méthode no

3.2 Modifier les paramètres du noyau (3 ci-dessous)), mais nécessite les autorisations root :

(1)	编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
Copier après la connexion

2. Défauts du mode de persistance AOF

1. Description du problème 1 :

Redis maître-esclave Tous les nœuds sont activés en mode AOF, avec 200 connexions simultanées, simulant une écriture continue sur Redis. Après 15 minutes, un grand nombre d'appels d'interface ont commencé à échouer et. le serveur virtuel Linux sur lequel se trouvait Redis était bloqué.

L'erreur d'interface est la suivante :

{"data":null,"base":{"returndesc":"系统异常","returncode":"999999"},"qrybase":null}
Biz(dubbo)接口报错如下:
2015-06-05 11:28:28.760 [DubboServerHandler-X.X.X.X:20882-thread-173] ERROR  - error while validate jedis!
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
Copier après la connexion

Analyse des causes :

À en juger par le message d'erreur de l'interface Dubbo, cela est dû au délai d'attente Redis de l'opération de l'API de l'interface. À en juger par les journaux système et la surveillance des E/S, il est démontré que les problèmes ci-dessus sont causés par des goulots d'étranglement des E/S (les E/S du système sont trop occupées), comme indiqué ci-dessous :

Une brève discussion sur les défauts des modes de persistance RDB et AOF dans RedisIl ressort également du journal système que le temps de blocage des E/S dépasse 120 secondes et que la machine se bloque en raison du mécanisme de sécurité du système.

RésuméUne brève discussion sur les défauts des modes de persistance RDB et AOF dans Redis

Les résultats des tests prouvent que le mode AOF présente le défaut le plus évident, c'est-à-dire que les IO deviendront un goulot d'étranglement des performances lorsque la pression d'accès est élevée, entraînant une indisponibilité du service.

3. Solution d'atténuation (ne peut pas fondamentalement résoudre le problème)

Modifiez /etc/sysctl.conf et ajoutez la configuration suivante :

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
Copier après la connexion
Ensuite, sysctl -p effectue la configuration le fichier prend effet.

Description du problème 2 :

Indépendamment du mode AOF ou RDB (mode instantané), lorsque la taille des deux fichiers (.aof ou .rdb) dépasse 80% de la mémoire système, le processus Redis sera interrompu par la panne du système, ce qui rendra le service indisponible.

Résumé

Les problèmes ci-dessus montrent que nous devons planifier la capacité de la mémoire système à l'avance lors de l'utilisation de Redis, car une fois Redis en panne, une grande quantité de données sera perdue et irrécupérable. .

Pour plus de connaissances sur la programmation, veuillez visiter :

Vidéo de programmation

 ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!