Corregir caídas de replicación y un bucle infinito de full resync (backlog, buffer de réplica)
RedisReplicaciónComando
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"Qué hace
Muestra el estado del enlace, la diferencia de offset y los contadores de sincronización parcial/completa en el master y la réplica; hace crecer el replication backlog para que las desconexiones cortas no se conviertan en sincronizaciones completas, y el límite del output buffer de réplica para que una sincronización completa no se corte a mitad.
Cuándo usarlo
Cuando una réplica entra en bucle con 'MASTER <-> REPLICA sync started', el contador sync_full crece o el log del master muestra 'scheduled to be closed ASAP for overcoming of output buffer limits'.
Precaución
Cada sincronización completa supone un fork + generación de RDB en el master; el bucle castiga la memoria y el disco del master. repl-backlog-size se asigna de la memoria del master. Subir el límite del buffer de réplica significa que el master puede usar esa memoria adicional durante una sincronización completa; inclúyala en el cálculo de maxmemory. Hace falta CONFIG REWRITE o redis.conf para hacer persistentes los cambios.