24

redis 从站不会与主站同步。

连接性:

发出时我可以连接到主服务器

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

提前致谢。

4

9 回答 9

12

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

sysctl vm.overcommit_memory=1

并重新启动从 redis 服务器。此链接可能会有所帮助。

于 2014-01-30T06:55:40.267 回答
10

这个问题有点棘手,

slave不能同步的原因在master本身,

注意日志输出: MASTER aborted replication with an error: ERR Unable to perform background save

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

为了解决这个问题,我重新启动了主redis服务器,然后所有的从服务器都自己同步了。

于 2014-05-26T06:57:20.067 回答
8

对我来说,是因为我requirepass设置了,但没有masterauth设置。

于 2017-10-27T19:30:58.690 回答
4

我遇到了同样的问题,我的原因是我的两台服务器不使用相同的redis version. 让我们在两台服务器上检查您的版本:

127.0.0.1:6379> info server
# Server
redis_version:3.2.8
于 2017-02-27T08:13:35.037 回答
3

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

于 2018-01-09T01:09:54.897 回答
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.

我按照说明进行操作,从机立即连接。

于 2019-09-06T13:24:20.003 回答
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
于 2018-07-07T18:24:30.020 回答
0

可能的修复:

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

注意:masterauth 值基本上是向主机询问身份验证密码,用于尝试连接的从机,因此与主机本身并不完全相关,但在尝试与主机同步时与从机相关。这就是 requirepass(您在 Master 机器上的 redis 配置中设置的那个)的用途 - 即您在 Master 上为 requirepass 设置的值与您需要放在 redis 上的 masterauth 参数前面的值相同配置从机。最好在 Mater 机器上也这样做,以避免进一步混淆(尽管它与 Master 无关)。

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

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

于 2020-12-15T01:29:23.067 回答
-1

就我而言,它与 SELINUX 有关,将其更改为许可模式解决了该问题。

于 2017-10-06T16:30:37.327 回答