Celery连接Redis Sentinel时指定master_name仍找不到主节点报错问题
Celery连接Redis Sentinel报No master found for None的解决方案
核心原因
你遇到的报错提示No master found for None说明Celery底层的消息传输组件kombu根本没有读取到你配置的master名称,和Sentinel集群本身的连通性无关,属于配置兼容性问题。
具体解决方法
- 兼容性问题修复(优先级最高)
低于4.6.8版本的kombu(Celery的依赖组件)存在已知问题,无法正确读取broker_transport_options中的master_name参数,有两种修复方案可选:- 直接将master名称写入broker_url的路径段,所有支持Sentinel的Celery版本都兼容该写法:
app.conf.broker_url = "sentinel://192.168.29.11:26379/mymaster" app.conf.broker_transport_options = {"master_name": "mymaster"}- 升级kombu到4.6.8及以上版本,原有配置无需修改即可生效。
- 后续连通性排查
完成上述配置后如果还有报错,可以通过以下命令验证Sentinel服务的可用性:
正常返回master节点的IP和端口则说明Sentinel服务正常,否则需要检查Sentinel配置、服务器防火墙/安全组规则。redis-cli -h 192.168.29.11 -p 26379 SENTINEL get-master-addr-by-name mymaster - 结果后端配置检查
如果你同时配置了Redis Sentinel作为结果后端,需要同步配置结果后端的master参数,否则也会触发同类报错:app.conf.result_backend = "sentinel://192.168.29.11:26379/mymaster" app.conf.result_backend_transport_options = {"master_name": "mymaster"}
内容的提问来源于stack exchange,提问作者iam.mattevans
相关产品推荐
相关产品推荐

