Django-redis/uWSGI- Ошибки закрытия соединения после установки таймаута в 0

Я использую Nautobot (приложение на основе Django), которое использует Redis и Celery для асинхронного выполнения задач.

Случайно при обращении к странице заданий я получаю следующую ошибку, говорящую о том, что соединение с сервером Redis было закрыто.

enter image description here

Изначально я использовал Redis в контейнере, а затем перешел на Google MemoryStore в рамках устранения неполадок. На обеих платформах возникла одна и та же проблема.

Я попробовал обновить конфигурацию redis на обоих, чтобы отключить таймауты:

timeout 0

А также настройка конфигурации в Django, но проблема продолжается.

# CACHE Configuration
CACHE_RETRY = Retry(ExponentialBackoff(), 3)
CACHES = {
    "default": {
        "BACKEND": "django_prometheus.cache.backends.redis.RedisCache",
        "LOCATION": f"{os.getenv('CACHE_BROKER_URL', 'redis://127.0.0.1:6379')}/0",
        "TIMEOUT": 300,
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": f"{os.getenv('CACHE_AUTH_STRING', '')}",
            "SOCKET_CONNECT_TIMEOUT": 10,
            "SOCKET_TIMEOUT": 0,
            "CONNECTION_POOL_KWARGS": {
                "ssl_cert_reqs": os.getenv('CACHE_CERT_REQUIRED', 'None'),
                "retry": CACHE_RETRY,
                "retry_on_timeout": True
            }
        },
    }
}

CONTENT_TYPE_CACHE_TIMEOUT = int(os.getenv("CACHE_CONTENT_TYPE_TIMEOUT", "0"))
REDIS_LOCK_TIMEOUT = int(os.getenv("CACHE_LOCK_TIMEOUT", "0"))
CELERY_BROKER_URL = os.getenv("CACHE_BROKER_URL", "redis://127.0.0.1:6379")
CELERY_TASK_SOFT_TIME_LIMIT = int(os.getenv("CACHE_TASK_SOFT_TIME_LIMIT", str(5 * 60)))
CELERY_TASK_TIME_LIMIT = int(os.getenv("CACHE_TASK_TIME_LIMIT", str(10 * 60)))
CELERY_BROKER_TRANSPORT_OPTIONS = {
    "ssl": {
        "ssl_cert_reqs": os.getenv('CACHE_CERT_REQUIRED', 'None')
    }
}
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = {
    "ssl": {
        "ssl_cert_reqs": os.getenv('CACHE_CERT_REQUIRED', 'None')
    }
}

if os.getenv('CACHE_CERT_REQUIRED', 'None') == 'required':
    CACHES['default']['OPTIONS']['CONNECTION_POOL_KWARGS']['ssl_ca_certs'] = os.getenv('CACHE_CERT_LOCATION', '')
    CELERY_BROKER_TRANSPORT_OPTIONS['ssl']['ssl_ca_certs'] = os.getenv('CACHE_CERT_LOCATION', '')
    CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS['ssl']['ssl_ca_certs'] = os.getenv('CACHE_CERT_LOCATION', '')

    # Construct the new URL for Celery
    schema, host = os.getenv("CACHE_BROKER_URL", "redis://127.0.0.1:6379").split('://')
    CELERY_BROKER_URL = f"{schema}://:{os.getenv('CACHE_AUTH_STRING', '')}@{host}"

Мы не наблюдаем никаких проблем с подключением между хостами, они работали на одной машине до перехода на Memorystore.

Версии:

django-redis==5.4.0
redis==5.0.8
uwsgi==2.0.25.1-r1

Приложение запущено в k8s, и я использую Istio Service Mesh для работы в качестве "веб-сервера", в то время как uWSGI обслуживает приложение.

Вернуться на верх