L'esclave Redis ne sera pas synchronisé avec le maître.
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.
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é.
[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
Testez que dump.rdb est créé sur BGSAVE
BGSAVE
> OK
Testez que dump.rdb est créé sur SAVE
SAVE
> OK
Merci d'avance.
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.
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.
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
Pour moi, c’est parce que j’avais requirepass
défini, mais je n’ai pas défini de paramètre masterauth
.
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.
Dans mon cas, il s'agissait d'un problème lié à SELINUX. Le passage en mode permissif a résolu le problème.
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