我有一个包含3个主人的Redis群集。 我对数据持久性不感兴趣,因为这是一个缓存解决方案。 我在Windows上运行v3.2。 当我手动停止其中一个服务器以查看我是否仍然可以访问数据库时,我得到了“群集关闭”群集已关闭错误'。 即使这样做,我也必须连接到仍在工作的其中一个实例。 我不知道这是如何实现高可用性的解决方案。 我希望我错过了一些东西。 当其中一个节点关闭时我无法访问群集的任何想法? 谢谢。
群集创建命令:ruby.exe redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
答案 0 :(得分:4)
正如您所说,您在Redis群集中使用了3个主节点,因此可以清楚地看到,如果其中一个节点将关闭,那么您将获得CLUSTERDOWN
错误。
为了避免这些类型的错误并获得高可用性,最好将从属服务器附加到主节点上(如官方Redis群集教程here中所示)。
有一个理由让奴隶与你的主人联系以获得更高的可用性。为此,您可以阅读上面Redis集群教程链接中提到的这些行。
Redis群集中有16384个散列槽,为了计算给定密钥的散列槽,我们只需将密钥的CRC16取为16384。
Redis群集中的每个节点都负责哈希槽的子集,所以你有一个包含3个节点的群集,其中:
1)节点A包含从0到5500的散列槽。
2)节点B包含从5501到11000的散列槽。
3)节点C包含11001到16383之间的散列槽。
因此,每当您使用SET
Redis集群中的密钥时,它会计算该密钥的散列槽值,并相应地在其中一个节点中保存密钥。
这就是必须让所有节点(至少是主节点或其一个从节点)在Redis集群中处于活动状态的原因。
如果您将每个主节点至少连接一个从站连接到Redis群集,那么您将获得更好的Redis群集可用性。将从站与主节点连接后,可以通过手动关闭任何主节点来测试设置以获得更高的可用性。