Corrigir quedas de replicação e um loop infinito de full resync (backlog, buffer da réplica)
RedisReplicaçãoComando
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"O que faz
Mostra o estado do vínculo, a diferença de offset e os contadores de sync parcial/completo no master e na réplica; aumenta o replication backlog para que desconexões curtas não virem full syncs e o limite do output buffer da réplica para que um full sync não seja cortado no meio.
Quando usar
Quando uma réplica fica em loop em 'MASTER <-> REPLICA sync started', o contador sync_full cresce ou o log do master mostra 'scheduled to be closed ASAP for overcoming of output buffer limits'.
Atenção
Todo full sync significa um fork + geração de RDB no master; o loop sobrecarrega a memória e o disco do master. repl-backlog-size é alocado da memória do master. Aumentar o limite do buffer da réplica significa que o master pode usar essa quantidade extra de memória durante um full sync; inclua isso no cálculo do maxmemory. É necessário CONFIG REWRITE ou redis.conf para tornar as mudanças persistentes.