Flower 无法监控使用 Redis Sentinel 作为代理而不仅仅是 Redis 的 Celery 队列
Flower fails to monitor Celery queues that are using Redis Sentinel as a broker instead of just Redis
为了提高弹性,我将独立的 Redis 部署转换为由三个 Redis sentinel 组成的集群。通过修改我的 Celery 配置以包含
,我能够将 Celery 连接到 Redis Sentinel 设置
BROKER_URL = 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 32400, 'master_name': 'mymaster'}
让 Celery 连接的关键是添加 BROKER_TRANSPORT_OPTIONS 并定义 master_name,因为它是在我的 redis 配置中设置的。
我也在使用 Flower 来监控我的 Celery 队列,方法是 运行 像这样:
celery flower --basic_auth=user1:pass123 --port=5555 --broker=redis://localhost:6379/0
但是现在我有一个 Redis Sentinel 部署,我想我需要一种方法来传递它连接成功的传输选项,否则如果我这样做:
celery flower --basic_auth=user1:pass123 --port=5555 -b 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0' --debug
它只是挂起:
[I 200427 13:01:36 command:139] Visit me at http://localhost:5555
[I 200427 13:01:36 command:144] Broker: sentinel://10.1.1.1:26379/0
[I 200427 13:01:36 command:147] Registered tasks:
[u'celery.accumulate',
u'celery.backend_cleanup',
u'celery.chain',
u'celery.chord',
u'celery.chord_unlock',
u'celery.chunks',
u'celery.group',
u'celery.map',
u'celery.starmap']
[D 200427 13:01:36 command:149] Settings: {'cookie_secret': 'W0UNu/+hQLCUYD2smFhIBMo9nrJqn0ZimgrxxroGeSI=',
'debug': True,
'login_url': '/login',
'static_path': '/usr/local/lib/python2.7/dist-packages/flower/static',
'static_url_prefix': '/static/',
'template_path': '/usr/local/lib/python2.7/dist-packages/flower/templates'}
[D 200427 13:01:36 control:29] Updating all worker's cache...
我知道 BROKER_TRANSPORT_OPTIONS 是 celery 概念而不是 flower,我尝试使用 --conf 选项通过 TRANSPORT 配置传递配置,但它似乎没有接收到它。
如有任何帮助,我们将不胜感激。我搜索了 celery 和 flower 文档,看看我如何解决这个问题。
我通过我的 Django 目录中的 运行 flower 解决了这个问题,在该目录中启动了 celery 和 flower,然后我能够在我的 flower 命令行中使用 -A 这样:
芹菜花--basic_auth=user1:pass123 --port=5555 -b 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0' --debug -A myappname
一旦我这样做了,Flower 就可以连接到我的哨兵,我可以看到我的任务和队列。
为了提高弹性,我将独立的 Redis 部署转换为由三个 Redis sentinel 组成的集群。通过修改我的 Celery 配置以包含
,我能够将 Celery 连接到 Redis Sentinel 设置BROKER_URL = 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 32400, 'master_name': 'mymaster'}
让 Celery 连接的关键是添加 BROKER_TRANSPORT_OPTIONS 并定义 master_name,因为它是在我的 redis 配置中设置的。
我也在使用 Flower 来监控我的 Celery 队列,方法是 运行 像这样:
celery flower --basic_auth=user1:pass123 --port=5555 --broker=redis://localhost:6379/0
但是现在我有一个 Redis Sentinel 部署,我想我需要一种方法来传递它连接成功的传输选项,否则如果我这样做:
celery flower --basic_auth=user1:pass123 --port=5555 -b 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0' --debug
它只是挂起:
[I 200427 13:01:36 command:139] Visit me at http://localhost:5555
[I 200427 13:01:36 command:144] Broker: sentinel://10.1.1.1:26379/0
[I 200427 13:01:36 command:147] Registered tasks:
[u'celery.accumulate',
u'celery.backend_cleanup',
u'celery.chain',
u'celery.chord',
u'celery.chord_unlock',
u'celery.chunks',
u'celery.group',
u'celery.map',
u'celery.starmap']
[D 200427 13:01:36 command:149] Settings: {'cookie_secret': 'W0UNu/+hQLCUYD2smFhIBMo9nrJqn0ZimgrxxroGeSI=',
'debug': True,
'login_url': '/login',
'static_path': '/usr/local/lib/python2.7/dist-packages/flower/static',
'static_url_prefix': '/static/',
'template_path': '/usr/local/lib/python2.7/dist-packages/flower/templates'}
[D 200427 13:01:36 control:29] Updating all worker's cache...
我知道 BROKER_TRANSPORT_OPTIONS 是 celery 概念而不是 flower,我尝试使用 --conf 选项通过 TRANSPORT 配置传递配置,但它似乎没有接收到它。
如有任何帮助,我们将不胜感激。我搜索了 celery 和 flower 文档,看看我如何解决这个问题。
我通过我的 Django 目录中的 运行 flower 解决了这个问题,在该目录中启动了 celery 和 flower,然后我能够在我的 flower 命令行中使用 -A 这样:
芹菜花--basic_auth=user1:pass123 --port=5555 -b 'sentinel://10.1.1.1:26379/0;sentinel://10.1.1.2:26379/0;sentinel://10.1.1.3:26379/0' --debug -A myappname
一旦我这样做了,Flower 就可以连接到我的哨兵,我可以看到我的任务和队列。