数据不会从 Redis master 复制到 slave

Data is not replicated from Redis master to slaves

我正在连接到一个由 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

直接连接master(上面输出中的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) 都归 master 所有
  2. 所有的slave都连接到master
  3. 一切同步

所以我不明白为什么我会被重定向到 master。奴隶不应该有一份吗?[=​​14=]

我知道我可以连接 -c 以便自动遵循重定向,但整个复制点应该是不需要重定向!

Normally slave nodes will redirect clients to the authoritative master for the hash slot involved in a given command, however clients can use slaves in order to scale reads using the READONLY command.

你可以阅读它 here

如果你想从一个副本中读取你必须执行READONLY command on it. And to revert to old behaviour there is a command READWRITE

当您尝试获取时,只需使用 GET key1

$ redis-cli -h 172.28.52.180
172.28.52.180:6379> GET key1 

然后它会将您重定向到实际持有存储此值的插槽的主机,您将获得正确的输出。

如果你想从备用或副本读取,恐怕 redis 备用或副本仅用于高可用性。这就是为什么您使用分片来减少每台服务器的负载。如果你有 4 个节点,最好有 2 个主节点和 2 个副本节点。对于分片,你可以查看官方文档:ref