DBAtlas · Atlas d'exploitation des bases de données

Corriger les coupures de réplication et une boucle sans fin de full resync (backlog, buffer des réplicas)

RedisRéplication

Commande

INFO replication
# Master: connected_slaves, slaveN:...,state=online,offset=,lag=  Replica: master_link_status, master_last_io_seconds_ago, master_sync_in_progress
INFO stats
# sync_full / sync_partial_ok / sync_partial_err: repeated full syncs = backlog too small
CONFIG GET repl-backlog-size
CONFIG SET repl-backlog-size 256mb
# If the replica buffer exceeds its limit during a full sync, the link drops and sync starts over:
CONFIG GET client-output-buffer-limit
CONFIG SET client-output-buffer-limit "replica 1gb 512mb 120"

Ce que fait la commande

Affiche l'état du lien, l'écart d'offset et les compteurs de synchronisation partielle/complète sur le master et le réplica ; agrandit le replication backlog pour que les courtes déconnexions ne se transforment pas en synchronisations complètes, et la limite de l'output buffer des réplicas pour qu'une synchronisation complète ne soit pas coupée en cours de route.

Quand l'utiliser

Quand un réplica tourne en boucle sur 'MASTER <-> REPLICA sync started', que le compteur sync_full croît, ou que le log du master affiche 'scheduled to be closed ASAP for overcoming of output buffer limits'.

Attention

Chaque synchronisation complète implique un fork + la génération d'un RDB sur le master ; la boucle sollicite la mémoire et le disque du master. repl-backlog-size est alloué sur la mémoire du master. Relever la limite du buffer des réplicas signifie que le master peut utiliser autant de mémoire supplémentaire pendant une synchronisation complète ; incluez-la dans le calcul de maxmemory. CONFIG REWRITE ou redis.conf est nécessaire pour rendre les modifications persistantes.

Ouvrir dans DBAtlas →

Voir aussi