我正在连接一个由AWS托管的小型Redis集群,它没有分片,只有一个主节点和3个从节点。我一直在复制方面遇到困难,这是我尝试过的简单复制。
我的群集:
172.28.52.18:6379> CLUSTER NODES
cc378ecb71d02c2495e219ce7043ea343eb91c1f 172.28.52.18:6379@1122 myself,slave 6ce7214224036cc42ba272486d9e8fe5d1b11875 0 1610811475000 2 connected
1e17d7794741c7db491a888dc2bca76590b52e64 172.28.53.83:6379@1122 slave 6ce7214224036cc42ba272486d9e8fe5d1b11875 0 1610811476195 2 connected
6ce7214224036cc42ba272486d9e8fe5d1b11875 172.28.53.213:6379@1122 master - 0 1610811474182 2 connected 0-16383
d780dfbb4d33275e50c098032d1cceb1cd368a65 172.28.52.180:6379@1122 slave 6ce7214224036cc42ba272486d9e8fe5d1b11875 0 1610811475189 2 connected
直接连接到主机(上面输出中的172.28.53.213)并设置一些数据:
$ redis-cli -h 172.28.53.213
172.28.53.213:6379> SET key1 value1
OK
然后连接到其中一个从属服务器:
$ redis-cli -h 172.28.52.180
172.28.52.180:6379> GET key1 value1
(error) MOVED 9189 172.28.53.213:6379
没有碎片,在我看来:
1.所有插槽(0-16383)均归主设备所有
1.所有从机都连接到主机
1.一切同步
所以我不明白为什么我会被重定向到主服务器。从服务器不应该有一个副本吗?
我知道我可以连接-c
,这样重定向就可以自动执行,但是复制的全部要点应该是重定向是不必要的!
2条答案
按热度按时间yyhrrdl81#
通常,从节点会将客户端重定向到给定命令中涉及的散列槽的授权主节点,但是客户端可以使用从节点,以便使用READONLY命令扩展读取。
你可以在这里读到它。
如果你想读取一个副本,你必须在它上面执行READONLY命令。要恢复旧的行为,有一个命令READWRITE。
2ledvvac2#
作为一个Redis新手,我也遇到过类似的问题,所以就来了这个帖子。但是答案并没有告诉我为什么。最后,我在阅读了从节点的redis服务器日志(在config中由
logfile
指定)后,才发现了这个问题,希望我的答案能有所帮助。在我的例子中,根本原因是slave配置文件没有启用
masterauth <password>
,而主节点启用了requirepass <password>
。在集群模式下,当发生故障切换时,从节点将被提升为主节点。当发生故障的原主节点恢复时,它将成为从节点。因此,如果原从节点启用了
requirepass <password>
,请记住在原主节点配置中也启用masterauth <password>
。否则,在故障切换后,从新主节点到新从节点的复制仍然失败。而且我学到的另一件事是,在编辑配置文件后,我需要重新启动Redis节点。