Сервер Apache2 и Superset, ошибка прокси 502, чтение ошибок с удаленного сервера при загрузке панелей мониторинга

Краткое введение

У меня есть сервер Apache Superset и Apache2, расположенный на одном экземпляре EC2. Apache2 действует как прокси-сервер. Он принимает запросы HTTPS и передает их в Apache Superset. Apache Superset запускается с использованием gunicorn.

Проблема

Запросы к механизму данных Apache Dremio могли занять некоторое время (‹60 секунд). При доступе к панелям мониторинга в Superset, используя DNS-имя с SSL, с настройкой прокси-сервера некоторые части (запросы) панелей управления не работают со следующей ошибкой:

Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request
Reason: Error reading from remote server

Как ни странно, эти ошибки могут появиться в считанные секунды, несмотря на то, что значение по умолчанию для ProxyTimeout довольно велико.

Проблема не возникает, если доступ к Superset осуществляется по IP-адресу.

Сообщение об ошибке в apache2/error.log:

(20014) Internal error (specific information not available): [client 10.4.26.3:6969] AH01102: error reading status line from remote server localhost:8088, referer: ...

Что пытались решить проблему

Проблема может заключаться в тайм-ауте прокси-сервера или в том, что веб-сервер Superset разрывает некоторые соединения. Моя конфигурация Apache2:

<VirtualHost *:443>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName dash.domain.com
  ServerAlias dash.domain.com

  SSLEngine on
  SSLCertificateFile /etc/ssl/private/cert.crt
  SSLCertificateChainFile /etc/ssl/certs/cert2.crt
  SSLCertificateKeyFile /etc/ssl/private/key.key

  ProxyPass / http://localhost:8088/ connectiontimeout=3600 timeout=3600
  ProxyPassReverse / http://localhost:8088/

  # things tried
  # SetEnv force-proxy-request-1.0 1
  # SetEnv proxy-nokeepalive 1
  # SetEnv proxy-initial-not-pooled 1
  # ProxyTimeout 3600
  # TimeOut 3600
</VirtualHost>

Вещи проверены (и не работают):

  1. Timeout и ProxyTimeout
  2. connectiontimeout и timeout (как показано выше)
  3. Keepalive=On для ProxyPass
  4. другой SetEnv
  5. superset_config.py - ›ENABLE_PROXY_FIX, SUPERSET_WEBSERVER_TIMEOUT

Кроме того, аналогичная настройка прокси была построена с использованием nginx, ошибка аналогична описанной здесь.

Любая помощь или идеи будут оценены. Большое спасибо!

Полезная информация

Версия Apache Superset: 0.37.2

Версия Apache Dremio: 4.1.0

Версия сервера Apache2: 2.4.29

Тип экземпляра EC2: t3.medium

Версия ОС: Ubuntu 18.04


person Vladyslav Moisieienkov    schedule 04.11.2020    source источник
comment
Какая у вас настройка DNS?   -  person ximaera    schedule 09.11.2020
comment
DNS работает нормально. Я не знаю, что вы имеете в виду под настройкой DNS.   -  person Vladyslav Moisieienkov    schedule 10.11.2020
comment
Проблема не возникает, если доступ к Superset осуществляется по IP-адресу. Учитывая, что та же проблема возникает с Nginx, DNS может не работать нормально.   -  person ximaera    schedule 10.11.2020
comment
Но я все еще могу получить доступ к информационным панелям, и они частично работают. При доступе по IP-адресу я использую не прокси-сервер Apache, а напрямую Superset.   -  person Vladyslav Moisieienkov    schedule 10.11.2020


Ответы (1)


Проблема заключалась в умирании асинхронных работников Gunicorn. Из графиков поступало слишком много запросов, и работники не могли их обработать. Изменение типа воркера с асинхронного на синхронизацию (тип стрельбы по умолчанию) решило проблему с прокси.

Я до сих пор не знаю, почему прямой доступ по IP не приводил к ошибке прокси 502.

Извините за то, что не включили в вопрос информацию о gunicorn.

P.S Рекомендуемый тип воркеров для Apache Superset из их документации - async, но в моем случае sync были лучшим решением. Теоретически рабочие процессы синхронизации работают медленнее по сравнению с асинхронными (в контексте надмножества).

person Vladyslav Moisieienkov    schedule 12.11.2020