在linux配置文件中,访问redis集群url的常用符号是什么?一个普通的这样的url看起来像
url = redis://<password>@<ip>:<port>
举个例子
url = redis://secret@1.2.3.4:6379
在一个集群上尝试这一点会得到一些神秘的错误
redis.exceptions.ResponseError: MOVED 6553 <newip>:<port>
tooz.ToozError
但是我在互联网上的任何地方都找不到如果你有多个节点该怎么办。文档提到了一种叫做“sentinel”的东西,并建议做一些类似的事情;
url = redis://<ip>:<sentinel port>?sentinel=<master name>&sentinel_fallback=<ip2>:<sentinel port>&<sentinel_fallback>=<ip3>:<sentinel port>
这显然是荒谬的。密码在哪里(提示:这只会产生'许可被拒绝')在世界上什么是“主人的名字”?这没有任何意义。有n个示例(n=xy,其中x是我们的副本数,x>=2,y是碎片数,y>=3),结果n>=6。至少有3个节点,所以至少有3个哨兵。每个示例都有自己的“名称”,因此有6个主名称。疯狂的猜测可以被@代替,而使用它会让我犯更多的神秘错误。
tooz.coordination.ToozConnectionError: No master found for <name>
1条答案
按热度按时间vawmfj5a1#
tooz redis驱动程序只支持redis sentinel。
实际的驱动程序源代码说明:
您正在尝试使用redis cluster,在这种情况下,您只能将主服务器作为连接的主机。
你收到的错误信息
MOVED 6553
表示您尝试访问的密钥位于另一个主分区(在另一个分片中)。redis集群客户端通常只需要一个host:port to 他们用
CLUSTER SLOTS
命令以发现群集拓扑。这在tooz驱动程序中没有实现。如果必须使用tooz并且需要高可用性,可以考虑切换到redis sentinel。
这里有更多关于redis sentinel和集群的信息