使用redis-py连接Redis Sentinel集群时出现MasterNotFoundError错误

4

当我按照此处的部署指南链接: https://docs.bitnami.com/tutorials/deploy-redis-sentinel-production-cluster/ 尝试连接到主 Redis Sentinel 节点时,我遇到了 MasterNotFoundError 错误。

我的连接到主 Redis Sentinel 节点的代码如下:

from redis.sentinel import Sentinel

redis_host = 'redis.default.svc.cluster.local'
redis_port = 26379
sentinel = Sentinel([(redis_host, redis_port)], socket_timeout=0.1, password='abc')
redis_client = sentinel.master_for('mymaster', password='abc')

在他们的GitHub存储库中,我看到sentinel.masterSet的配置默认设置为mymaster。但是,当我尝试使用下面的代码递增时:

redis_client.incr('counter', 1)

我遇到了redis.sentinel.MasterNotFoundError: No master found for 'mymaster'的错误。

我应该如何解决这个问题?谢谢。

2个回答

3
根据此处的报道,将socket_timeout设置得太低可能会导致MasterNotFound错误,因为每个实例都被轮询但未能及时响应。您可以增加超时时间或将其删除以查看是否修复了该问题。

1
如果您正在执行这段代码,您需要设置服务为LoadBalancerIP,以便从集群外部进行连接。在执行代码之前,您是否已经测试过与该主机的直接连接?例如使用ping命令。在此处,您可以查看如何将sentinel服务部署为LoadBalancer: https://github.com/bitnami/charts/tree/master/bitnami/redis。您需要将sentinel.service.type设置为LoadBalancerIP。希望这能帮到您。

我正在集群内的一个 Pod 中执行代码。 - phatasma-coder
@phatasma-coder,你是否正在使用“values-production.yaml”来部署图表?如果是这种情况,请注意它启用了一个“networkPolicy”,限制了对Redis pod的访问。请参见https://github.com/bitnami/charts/blob/master/bitnami/redis/values-production.yaml#L141正如在NOTES.txt中所解释的那样(https://github.com/bitnami/charts/blob/master/bitnami/redis/templates/NOTES.txt#L57),您的POD必须具有特殊标签,以便网络策略允许其访问Redis。 - Juan Ariza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接