我有一个包含 3 个主节点的 Redis 集群。 我对数据持久性不感兴趣,因为这是一个缓存解决方案。 我在 Windows 上运行 v3.2。 当我手动停止其中一台服务器以查看是否仍然可以访问数据库时,我收到“CLUSTERDOWN 集群已关闭错误”。 即使要做到这一点,我也必须连接到仍在工作的实例之一。 我不明白这是如何实现高可用性的解决方案。 我希望我错过了一些东西。 有什么想法为什么当其中一个节点关闭时我无法访问集群吗? 谢谢。
集群创建命令:ruby.exe redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
最佳答案
正如您所说,您在 Redis 集群中使用 3 个主节点,因此很明显,如果其中一个节点发生故障,那么您将得到 CLUSTERDOWN
错误。
为了避免此类错误并获得高可用性,最好将从属节点附加到主节点(如官方 Redis 集群教程 here 所示)。
有理由将从属设备连接到您的主控设备以获得更高的可用性。为此,您可以阅读上面的 Redis 集群教程链接中提到的这些行。
There are 16384 hash slots in Redis Cluster, and to compute what is the hash slot of a given key, we simply take the CRC16 of the key modulo 16384.
Every node in a Redis Cluster is responsible for a subset of the hash slots, so for example you have a cluster with 3 nodes, where:
1) Node A contains hash slots from 0 to 5500.
2) Node B contains hash slots from 5501 to 11000.
3) Node C contains hash slots from 11001 to 16383.
因此,每当您在 Redis 集群中SET
一个键时,它都会计算该键的哈希槽值,并将键相应地保存在一个节点中。
这就是 Redis 集群中所有节点(至少是主节点或其一个从节点)必须处于事件状态的原因。
休息一下,如果您将每个主节点至少附加 1 个从属节点到 Redis 集群中,您将获得更好的 Redis 集群可用性。将从属节点与主节点连接后,您可以通过手动关闭任何主节点来测试您的设置是否具有更高的可用性。
关于redis - 如何测试redis集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806296/