python - 调整 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 上似乎都没有提到这个问题。
你能帮忙吗?
解决方案
推荐阅读
- javascript - Vue CLI “index.html” 内容
- angular - 打开第二个模态,然后关闭第一个模态
- tensorflow - 没有 CUDA 的 TensorFlow 支持 GPU
- ionic3 - 在“ion-fab-list”元素中,一些按钮显示而其他按钮不显示
- python - 如何删除matplotlib中保存的图像周围的空白?
- javascript - 有没有办法使用 ajax get 请求和返回的 json 数据动态创建表的内容?
- c# - Asp.Net Core 不同用户模型派生自 ApplicationUser
- java - 使用 Mysql 和 IntelliJ IDEA java 项目的数据库连接问题
- django - 可以正常使用应用程序特定的静态文件,无法获取项目根目录下的静态文件加载
- api - 带有自定义中间件的 Redux 授权句柄