SQLAlchemy и Kubernetes - OperationalError 2013 - «Потерянное соединение с MYSQL сервером во время запроса» - PullRequest
0 голосов
/ 06 февраля 2020

Проблема

Прерывистая операционная ошибка 2013 - Потеря соединения во время запроса ... много раз в день, за исключением того, что оно ведет себя нормально.


Инфра. Обзор:

Мы используем кластер K8s (созданный с использованием kops) для развертывания наших приложений, но наш основной сервер БД еще не перенесен в kubernetes, что означает, что он все еще находится в отдельном экземпляре EC2 вне кластера kubernetes. ,

Мы используем Flask_SQLAlchemy для подключения нашего приложения flask к MySQL.

Я создал службу mysql в своем пространстве имен с конечной точкой, указывающей на частный IP-адрес Mysql. Экземпляр EC2.


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

  • sqlalchemy_pool_recycle = <way-less-than-servers-wait_timeout> / / 900 (mysql = 28800)
  • sqlalchemy's pre_ping установлено в true
  • ядра nf_conntrack_tcp_timeout_close_wait = 3600 (но пул будет переработан в 900)

  • Flask_sqlAlchemy - v2.1
  • SqlAlchemy - v1.3.12
  • Flask - v0.11
  • Kops - v. 1.15.1
  • kubernetes - 1.15.7
  • Mysql - 8.x

Пожалуйста, помогите мне понять это глубже. Предложения приветствуются.

1 Ответ

0 голосов
/ 11 марта 2020

его flask проблема конфигурации приложения. Вы можете обновить в настройках приложения следующие параметры, которые должны решить проблему.

SQLALCHEMY_POOL_SIZE = 50 # scale app for pool size # default 10

SQLALCHEMY_POOL_RECYCLE = 250 # pool recycle time in seconds 

У Flask_sqlAlchemy есть проблема, чтобы закрыть сеанс, вам также необходимо обновить в конфигурации mysql.

[mysql]
lock_wait_timeout=300

Он должен быть меньше SQLALCHEMY_POOL_RECYCLE, как указано в документации flask здесь: - https://flask-sqlalchemy.palletsprojects.com/en/2.x/config/#timeouts

"рекомендуется установить для SQLALCHEMY_POOL_RECYCLE значение меньше времени ожидания вашего бэкэнда ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...