数据不会从 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
没有碎片,据我所知:
- 所有插槽 (0-16383) 都归 master 所有
- 所有的slave都连接到master
- 一切同步
所以我不明白为什么我会被重定向到 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
我正在连接到一个由 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
没有碎片,据我所知:
- 所有插槽 (0-16383) 都归 master 所有
- 所有的slave都连接到master
- 一切同步
所以我不明白为什么我会被重定向到 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