redis slave不会与master同步

时间:2013-09-17 20:58:09

标签: redis replication

redis slave不会与master同步。

连接:

我可以在发出

时连接到主人
HOST_NAME=fakehost
redis-cli -h $HOST_NAME

并使用INFO之类的命令检查主状态,因此连接不是问题。

设定:

从奴隶盒子里,我发了

SLAVEOF $HOST_NAME 6379

并收到OK

当我在奴隶上发出INFO命令时,我得到了

# 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

在主框上,我发出info并获取

# Replication
role:master
connected_slaves:0

显然我没有联系。

日志

[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

测试

测试在BGSAVE上创建dump.rdb

BGSAVE
> OK

测试在SAVE上创建dump.rdb

SAVE
> OK

提前致谢。

9 个答案:

答案 0 :(得分:10)

我今天遇到了类似的情况。似乎对于使用sysctl的系统,您可能必须这样做:

sysctl vm.overcommit_memory=1

并重新启动slave redis服务器。 This link可能有帮助。

答案 1 :(得分:9)

这个问题有点棘手,

从机无法同步的原因在于主机本身,

注意Log输出:   MASTER 中止复制并显示错误:ERR无法执行后台保存

这意味着由于主机上的内存储备不足,主机无法进行后台保存,

解决此问题我重新启动了主redis服务器, 那么所有的奴隶都是自己同步的。

答案 2 :(得分:4)

我遇到了同样的问题,我的理由是我的两台服务器都没有使用相同的redis version。让我们检查两个服务器上的版本:

127.0.0.1:6379> info server
# Server
redis_version:3.2.8

答案 3 :(得分:3)

对我而言,原因是我设置了try{ User.findOne({ _id: 444, User }) .then(obj => { console.log(obj.inviteCount); return (obj.inviteCount); }) } catch(err) { console.log(err) } ,但没有设置requirepass设置。

答案 4 :(得分:2)

我在redis.conf中的默认设置启用了requirepass,在slave的终端中执行“masterauth [passwordOfMaster]”,之后“SLAVEOF”将解决此问题。

答案 5 :(得分:0)

在我的情况下,它与SELINUX有关,将其更改为许可模式解决了问题。

答案 6 :(得分:0)

我已修复以下问题

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

答案 7 :(得分:0)

当我尝试使用Redis 5.0.5进行设置时,我发现保护模式已打开。当我在其eth0接口(而不是回送或UNIX套接字)上登录假定的主服务器时,当我尝试运行“ INFO”时收到此消息:

IP_ADDRESS_REDACTED:6379> info
DENIED Redis is running in protected mode because protected mode is
enabled, no bind address was specified, no authentication password
is requested to clients. In this mode connections are only accepted
from the loopback interface. If you want to connect from external
computers to Redis you may adopt one of the following solutions:
1) Just disable protected mode sending the command 'CONFIG SET 
protected-mode no' from the loopback interface by connecting to Redis
from the same host the server is running, however MAKE SURE Redis is
not publicly accessible from internet if you do so. Use CONFIG REWRITE 
to make this change permanent. 2) Alternatively you can just disable
the protected mode by editing the Redis configuration file, and
setting the protected mode option to 'no', and then restarting the
server. 3) If you started the server manually just for testing,
restart it with the '--protected-mode no' option. 4) Setup a bind
address or an authentication password. NOTE: You only need to do one
of the above things in order for the server to start accepting
connections from the outside.

我按照说明进行操作,并且立即连接了从站。

答案 8 :(得分:0)

可能的解决方法:

确保所有服务器(主服务器/从服务器)上的 masterauth requirepass 值都相同。

注意:masterauth值基本上是向尝试连接的从属服务器询问进入主机的身份验证密码,因此与主机本身并不完全相关,而是在尝试与主机同步时与从属计算机相关。这就是requirepass(您在Master机器上的redis配置中设置的)的目的-即您在Master上为requirepass设置的值,是您需要在redis上的masterauth参数前面放置的值配置从属机器。最好在Mater机器上也这样做,以免造成进一步的混乱(尽管这与Master无关)。

您可以在其中一台从属机器的redis日志文件中检查更多线索:

Linux命令: tail -f path-to-redis.log