微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据不会从 Redis 主节点复制到从节点

如何解决数据不会从 Redis 主节点复制到从节点

我正在连接到一个由 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) 都归主控
  2. 所有的从站都连接到主站
  3. 一切都在同步

所以我不明白为什么我会被重定向到 master。奴隶不应该有副本吗?

我知道我可以连接 -c 以便自动跟踪重定向,但复制的重点应该是不需要重定向

解决方法

通常从节点会将客户端重定向到给定命令中涉及的哈希槽的权威主节点,但是客户端可以使用从节点来使用 READONLY 命令扩展读取。

您可以阅读它here

如果您想从副本中读取数据,您必须对其执行 READONLY 命令。要恢复到旧行为,有一个命令 READWRITE

,

当您尝试获取时,只需使用 export const visualise = (output,context) => { var image = new ImageData(output.segmentationMap,ctx.canvas.width,ctx.canvas.height); ctx.drawImage(image,0) }

GET key1

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。