web-dev-qa-db-fra.com

redis Slave ne sera pas synchronisé avec le maître

L'esclave Redis ne sera pas synchronisé avec le maître.

Connectivité:

Je peux me connecter au maître quand je publie

Host_NAME=fakehost
redis-cli -h $Host_NAME

et vérifiez l’état du maître à l’aide d’une commande telle que INFO. La connectivité n’est donc pas un problème.

Réglages:

De la boîte à esclaves, j'ai émis

SLAVEOF $Host_NAME 6379

Et a reçu une OK.

Quand j'émets la commande INFO sur l'esclave, je reçois

# Replication
role:slave
master_Host:<removed>
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
master_link_down_since_seconds:1379450797
slave_priority:100
slave_read_only:1
connected_slaves:0

Sur la boîte principale, je publie info et reçois

# Replication
role:master
connected_slaves:0

Donc, évidemment, je ne suis pas connecté.

Les journaux

[11225] 17 Sep 14:31:33.225 * Connecting to MASTER...
[11225] 17 Sep 14:31:33.226 * MASTER <-> SLAVE sync started
[11225] 17 Sep 14:31:33.226 * Non blocking connect for SYNC fired the event.
[11225] 17 Sep 14:31:33.226 * Master replied to PING, replication can continue...
[11225] 17 Sep 14:31:33.227 # MASTER aborted replication with an error: ERR Unable to perform background save

Des tests

Testez que dump.rdb est créé sur BGSAVE

BGSAVE
> OK

Testez que dump.rdb est créé sur SAVE

SAVE
> OK

Merci d'avance.

18
timsabat

J'ai rencontré une situation similaire aujourd'hui. Il semble que pour les systèmes qui utilisent sysctl, vous pourriez avoir à faire:

sysctl vm.overcommit_memory=1

et redémarrez le serveur redis esclave. Ce lien pourrait aider.

10
yanhan

Ce problème un peu délicat, 

la raison pour laquelle l'esclave ne peut pas se synchroniser est dans le maître lui-même,

faites attention à la sortie du journal: MA&ICIRC;TREréplication interrompue avec une erreur: ERR impossible d'effectuer sauvegarde en arrière-plan

cela signifie que le maître ne peut pas sauvegarder d'arrière-plan en raison d'une faible réserve de mémoire sur la machine principale, 

pour résoudre ce problème, j’ai redémarré le serveur redis maître, puis tous les esclaves ont été synchronisés par eux-mêmes.

9
Tal Laitner

J'ai rencontré le même problème, et la raison en est que mes deux serveurs n'utilisent pas le même redis version. Vérifions votre version sur les deux serveurs:

127.0.0.1:6379> info server
# Server
redis_version:3.2.8
4
Justin

Pour moi, c’est parce que j’avais requirepass défini, mais je n’ai pas défini de paramètre masterauth.

2
K0D4

les paramètres par défaut dans redis.conf activent requirepass, l'exécution de "masterauth [passwordOfMaster]" dans le terminal de l'esclave avant que "SLAVEOF" résolve ce problème.

2
何德福

Dans mon cas, il s'agissait d'un problème lié à SELINUX. Le passage en mode permissif a résolu le problème.

0
glm

Je l'ai corrigé comme suit :

Sudo -i
service redis-server stop
apt remove --purge redis-server
rm /var/lib/redis/dump.rdb
apt install redis-server
systemctl enable redis-server
service redis-server start

# i have not tried, but it is possible this is enough
service redis-server stop
rm /var/lib/redis/dump.rdb
service redis-server start
0
Patrik Laszlo