php_network_getaddresses: getaddrinfo не удалось: Временная ошибка разрешения имени

Вопрос или проблема

Я продолжаю получать эту ошибку очень часто:

Severity: Warning --> mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

Эта проблема решается только после перезагрузки сервера. Учитывая, что это происходит на живом сервере, который получает миллионы запросов ежедневно, перезагрузка не является лучшим вариантом.

[ИЗМЕНЕНО]

Я использую Ubuntu 18.04 и соединяюсь с кластером Aurora на AWS, а бекенд-код находится на EC2

@matigo на Askubuntu считает, что я, возможно, превышаю лимит:

https://askubuntu.com/a/1363447/135086

Поэтому я провел отладку, чтобы понять, превышаю ли я фактический лимит 1024 PPS. К счастью, была статья AWS, которая помогла мне это понять,

https://aws.amazon.com/premiumsupport/knowledge-center/vpc-find-cause-of-failed-dns-queries/

Я выполнил команды, чтобы понять PPS, который я сейчас достигаю, и мониторил до тех пор, пока не нашел ошибку.

ERROR - 2021-09-20 12:14:31.547863 --> Severity: Warning --> mysqli::real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

К моему удивлению, следующий вывод команды, упомянутой в статье AWS

tcpdump  -r <file_name.pcap> -nn dst port 53 | awk -F " " '{ print $1 }' | cut -d"." -f1 | uniq -c


  2 06:44:22
  6 06:44:24
  4 06:44:26
  2 06:44:28
  4 06:44:30
  7 06:44:34
  2 06:44:38
  7 06:44:39
  9 06:44:44
  6 06:44:46
  4 06:44:49
  6 06:44:50

Учитывая часовой пояс +05:30, ошибка в 12:14:31 IST должна иметь запись для DNS в 06:44:31 UTC.

Если мы примем средний размер пакета за 4 пакета на вызов, ссылаясь на ответ @matigo, я не превышаю 22 вызова DNS в секунду. Поэтому, далее изучая журналы,

  4 06:39:06
 26 06:39:09
  4 06:39:10
  2 06:39:13
  6 06:39:16
 16 06:39:17

Некоторые записи превысили лимит 22 вызова DNS в секунду, и мы не столкнулись с ошибкой php_network_getaddresses.

Так что я не уверен, в чем здесь проблема.

Кто-то также сказал, что это может быть вызвано неполадками DHCP-сервера в локальной сети, не знаю, как это идентифицировать, или возможно ли это на EC2, когда единственные сконфигурированные DNS – это AWS Route53 Resolver.

На этот момент я запутался, является ли это проблемой лимита PPS или чем-то другим.

У меня была та же ошибка с экземпляром, который не достигал лимита. Через некоторое время я наткнулся на тему поддержки AWS, в которой говорилось, что это может быть проблема с оборудованием.

Физический хост вашего экземпляра (i-3d124c6d), похоже, время от времени испытывает проблемы, некоторые из которых определенно могли вызвать перерывы в работе сервиса.

Не могли бы вы попробовать остановить и перезапустить этот экземпляр? Это приведет к запуску на новом оборудовании, и тогда мы могли бы использовать вашу службу pingdom, чтобы проверить, возникнут ли дальнейшие проблемы.

из: https://forums.aws.amazon.com/thread.jspa?threadID=171805.

Остановка и перезапуск экземпляра решили проблему для меня.

Ответ или решение

Ошибка php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution, с которой вы сталкиваетесь, связана с временной невозможностью разрешения DNS. Это может произойти по ряду причин, и сосредоточив внимание на вашей ситуации, мы можем выделить несколько основных аспектов, на которые стоит обратить внимание.

Последствия проблемы

  1. Частота возникновения ошибки: Как вы указываете, данная ошибка возникает часто и требует перезагрузки сервера для устранения. Это не оптимально для сервера с высоким tрафиком, который обрабатывает миллионы запросов ежедневно.

  2. Среда выполнения: Вы используете Ubuntu 18.04 и подключаетесь к кластерам Aurora на AWS с сервера EC2. Эти факторы важны для диагностики проблемы, поскольку взаимодействие между этими компонентами может способствовать возникновению ошибки.

Возможные причины и диагностика

  1. DNS-запросы и пределы пакетов: Как вы упомянули, существует вероятность того, что вы могли бы добиться 22 DNS-запросов в секунду (PPS). Однако, учитывая предоставленную вами информацию, ваши мониторинги не показывают постоянного превышения этого порога. Это указывает на то, что данная проблема может возникнуть не только из-за конфликтов в запросах DNS.

  2. Программные ошибки в приложении: Если ваше приложение совершает слишком много одновременных запросов к DNS, это может усилить проблему. Часто стоит проверить и оптимизировать код, который отвечает за соединение с базой данных.

  3. Аварийные ситуации на уровне системы: Как это упоминают участники на форумах AWS, проблема может быть вызвана аппаратными сбоями на физическом хосте, на котором размещен ваш экземпляр EC2. Такие ситуации могут приводить к нестабильной работе.

  4. Проблемы с DHCP: Хотя вы упомянули о возможном влиянии «сбоя DHCP-сервера», в EC2 это маловероятно, так как AWS управляет DHCP-серверами автоматически в рамках VPC. Однако стоит проверить конфигурацию сети и правила маршрутизации.

Рекомендации по устранению проблемы

  1. Мониторинг здоровья экземпляра EC2: Настройте CloudWatch для мониторинга статуса и производительности вашего экземпляра EC2. Если проблема носит аппаратный характер, вы можете заметить логи ошибок или отклонения в производительности.

  2. Рассмотрите возможность создания нескольких экземпляров: Если ваши нагрузки по запросам существенно колеблются, подумайте о создании нескольких экземпляров с балансировкой нагрузки, чтобы справляться с высоким трафиком и уменьшить давление на один сервер.

  3. Периодические перезапуски: Хотя перезапуск сервера не является оптимальным решением, это может временно облегчить ситуацию. Вы можете создать автоматизированные процессы для перезапуска сервера в непиковые часы.

  4. Оптимизация кода: Проверьте, как ваши скрипты обрабатывают подключения к базе данных. Возможно, стоит использовать кэширование DNS-запросов или подключений для уменьшения нагрузки.

Заключение

Несмотря на то, что решение вашей проблемы может быть сложным, последовательный анализ и отладка вашей системы, а также мониторинг запросов DNS среди других метрик, помогут вам выявить и устранить корень проблемы. Рассмотрите возможность обращения в техподдержку AWS для получения дополнительной информации о состоянии вашего приложения и инстанса. Профессиональный подход к диагностике и устранению неисправностей поможет вам обеспечить стабильность работы вашего сервиса.

Оцените материал
Добавить комментарий

Капча загружается...