首页 > 解决方案 > 调整 DO celery 集群的大小后,Celery 工作人员无法启动

问题描述

今天早上,由于内存使用量增加,我们在 DO 上调整了 celery 集群的大小。

[2021-03-30 09:38:05,741: CRITICAL/MainProcess] Unrecoverable error: OperationalError('this user has no permissions to access one of the channels used as arguments')Traceback (most recent call last):  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 454, in _reraise_as_library_errors    yield  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 533, in _ensured    return fun(*args, **kwargs)  File "/usr/local/lib/python3.8/site-packages/kombu/messaging.py", line 200, in _publish    return channel.basic_publish(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/virtual/base.py", line 604, in basic_publish    return self.typeof(exchange).deliver(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/virtual/exchange.py", line 150, in deliver    self.channel._put_fanout(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/redis.py", line 794, in _put_fanout    client.publish(  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 3098, in publish    return self.execute_command('PUBLISH', channel, message)  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 901, in execute_command    return self.parse_response(conn, command_name, **options)  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 915, in parse_response    response = connection.read_response()  File "/usr/local/lib/python3.8/site-packages/redis/connection.py", line 756, in read_response    raise responseredis.exceptions.NoPermissionError: this user has no permissions to access one of the channels used as arguments
During handling of the above exception, another exception occurred:
Traceback (most recent call last):  File "/usr/local/lib/python3.8/site-packages/celery/worker/worker.py", line 208, in start    self.blueprint.start(self)  File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 119, in start    step.start(parent)  File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 369, in start    return self.obj.start()  File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 318, in start    blueprint.start(self)  File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 119, in start    step.start(parent)  File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/mingle.py", line 40, in start    self.sync(c)  File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/mingle.py", line 44, in sync    replies = self.send_hello(c)  File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/mingle.py", line 57, in send_hello    replies = inspect.hello(c.hostname, our_revoked._data) or {}  File "/usr/local/lib/python3.8/site-packages/celery/app/control.py", line 156, in hello    return self._request('hello', from_node=from_node, revoked=revoked)  File "/usr/local/lib/python3.8/site-packages/celery/app/control.py", line 98, in _request    return self._prepare(self.app.control.broadcast(  File "/usr/local/lib/python3.8/site-packages/celery/app/control.py", line 478, in broadcast    return self.mailbox(conn)._broadcast(  File "/usr/local/lib/python3.8/site-packages/kombu/pidbox.py", line 340, in _broadcast    self._publish(command, arguments, destination=destination,  File "/usr/local/lib/python3.8/site-packages/kombu/pidbox.py", line 308, in _publish    producer.publish(  File "/usr/local/lib/python3.8/site-packages/kombu/messaging.py", line 178, in publish    return _publish(  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 566, in _ensured    errback and errback(exc, 0)  File "/usr/local/lib/python3.8/contextlib.py", line 131, in __exit__    self.gen.throw(type, value, traceback)  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 458, in _reraise_as_library_errors    reraise(ConnectionError, ConnectionError(text_t(exc)),  File "/usr/local/lib/python3.8/site-packages/vine/five.py", line 194, in reraise    raise value.with_traceback(tb)  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 454, in _reraise_as_library_errors    yield  File "/usr/local/lib/python3.8/site-packages/kombu/connection.py", line 533, in _ensured    return fun(*args, **kwargs)  File "/usr/local/lib/python3.8/site-packages/kombu/messaging.py", line 200, in _publish    return channel.basic_publish(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/virtual/base.py", line 604, in basic_publish    return self.typeof(exchange).deliver(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/virtual/exchange.py", line 150, in deliver    self.channel._put_fanout(  File "/usr/local/lib/python3.8/site-packages/kombu/transport/redis.py", line 794, in _put_fanout    client.publish(  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 3098, in publish    return self.execute_command('PUBLISH', channel, message)  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 901, in execute_command    return self.parse_response(conn, command_name, **options)  File "/usr/local/lib/python3.8/site-packages/redis/client.py", line 915, in parse_response    response = connection.read_response()  File "/usr/local/lib/python3.8/site-packages/redis/connection.py", line 756, in read_response    raise responsekombu.exceptions.OperationalError: this user has no permissions to access one of the channels used as arguments

我们运行工人的方式是:

adduser --disabled-password --gecos '' celery_user
NEW_RELIC_CONFIG_FILE=./newrelic-celery.ini newrelic-admin run-program celery worker -A nexchange -E -n get_tickers -Q get_tickers --uid=celery_user -l info -c 4 &

互联网上的任何地方(通过谷歌搜索错误判断)或 SO 上似乎都没有提到这个问题。

你能帮忙吗?

标签: pythonpython-3.xdjangorediscelery

解决方案


推荐阅读