Сельдерей аварийно завершает работу, когда PgBouncer закрывает простаивающие соединения (включены таймауты простоя)Python

Программы на Python
Ответить
Anonymous
 Сельдерей аварийно завершает работу, когда PgBouncer закрывает простаивающие соединения (включены таймауты простоя)

Сообщение Anonymous »

Я столкнулся с проблемой при запуске Celery с PgBouncer и PostgreSQL после включения таймаутов простоя соединения.
Мой стек включает в себя:
  • Django (обслуживается через Tornado)
  • Celery (рабочие + тактовые)
  • PostgreSQL
  • PgBouncer (перед PostgreSQL)
Из-за большого количества неактивных подключений к базе данных, вызванных Tornado + Django, я ввел настройки времени ожидания простоя, чтобы защитить PostgreSQL от исчерпания соединений.
PgBouncer

Код: Выделить всё

idle_transaction_timeout=240 (4mins)
client_idle_timeout=240
PostgreSQL

Код: Выделить всё

idle_in_transaction_session_timeout=300000 (5mins)
idle_session_timeout=300000 (5mins)
Проблема:
После применения этих настроек Celery иногда вылетает со следующей ошибкой:

Код: Выделить всё

[2025-12-16 06:12:01,578: ERROR/MainProcess] Unrecoverable error: DatabaseError('client_idle_timeout\nserver closed the connection unexpectedly\n\tThis probably means the server terminated abnormally\n\tbefore or while processing the request.\n',)
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/celery/worker/__init__.py", line 351, in start
component.start()
File "/usr/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 393, in start
self.consume_messages()
File "/usr/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 885, in consume_messages
self.connection.drain_events(timeout=10.0)
File "/usr/local/lib/python2.7/site-packages/kombu/connection.py", line 276, in drain_events
return self.transport.drain_events(self.connection, **kwargs)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 760, in drain_events
item, channel = get(timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/scheduling.py", line 39, in get
return self.fun(resource, **kwargs), resource
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 780, in _drain_channel
return channel.drain_events(timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 578, in drain_events
return self._poll(self.cycle, timeout=timeout)
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/__init__.py", line 287, in _poll
return cycle.get()
File "/usr/local/lib/python2.7/site-packages/kombu/transport/virtual/scheduling.py", line 39, in get
return self.fun(resource, **kwargs), resource
File "/usr/local/lib/python2.7/site-packages/djkombu/transport.py", line 31, in _get
m = Queue.objects.fetch(queue)
File "/usr/local/lib/python2.7/site-packages/djkombu/managers.py", line 18, in fetch
queue = self.get(name=queue_name)
File "/usr/local/lib/python2.7/site-packages/django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 344, in get
num = len(clone)
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 82, in __len__
self._result_cache = list(self.iterator())
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
for row in compiler.results_iter():
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
for rows in self.execute_sql(MULTI):
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
return self.cursor.execute(query, args)
DatabaseError: client_idle_timeout
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

[2025-12-16 06:12:02,291: INFO/MainProcess] Celerybeat:  Shutting down...
Вопросы:
  • Известна ли это проблема при использовании Celery с таймаутами простоя PgBouncer?
  • Эти значения таймаута несовместимы с долго работающими рабочими процессами Celery?
  • Каков рекомендуемый способ настройки PgBouncer/PostgreSQL тайм-ауты простоя при использовании Celery?
Будем очень признательны за любые рекомендации или передовой опыт. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... ts-enabled
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»