Вопрос или проблема
Я продолжаю получать эту ошибку очень часто:
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. Это может произойти по ряду причин, и сосредоточив внимание на вашей ситуации, мы можем выделить несколько основных аспектов, на которые стоит обратить внимание.
Последствия проблемы
-
Частота возникновения ошибки: Как вы указываете, данная ошибка возникает часто и требует перезагрузки сервера для устранения. Это не оптимально для сервера с высоким tрафиком, который обрабатывает миллионы запросов ежедневно.
-
Среда выполнения: Вы используете Ubuntu 18.04 и подключаетесь к кластерам Aurora на AWS с сервера EC2. Эти факторы важны для диагностики проблемы, поскольку взаимодействие между этими компонентами может способствовать возникновению ошибки.
Возможные причины и диагностика
-
DNS-запросы и пределы пакетов: Как вы упомянули, существует вероятность того, что вы могли бы добиться 22 DNS-запросов в секунду (PPS). Однако, учитывая предоставленную вами информацию, ваши мониторинги не показывают постоянного превышения этого порога. Это указывает на то, что данная проблема может возникнуть не только из-за конфликтов в запросах DNS.
-
Программные ошибки в приложении: Если ваше приложение совершает слишком много одновременных запросов к DNS, это может усилить проблему. Часто стоит проверить и оптимизировать код, который отвечает за соединение с базой данных.
-
Аварийные ситуации на уровне системы: Как это упоминают участники на форумах AWS, проблема может быть вызвана аппаратными сбоями на физическом хосте, на котором размещен ваш экземпляр EC2. Такие ситуации могут приводить к нестабильной работе.
-
Проблемы с DHCP: Хотя вы упомянули о возможном влиянии «сбоя DHCP-сервера», в EC2 это маловероятно, так как AWS управляет DHCP-серверами автоматически в рамках VPC. Однако стоит проверить конфигурацию сети и правила маршрутизации.
Рекомендации по устранению проблемы
-
Мониторинг здоровья экземпляра EC2: Настройте CloudWatch для мониторинга статуса и производительности вашего экземпляра EC2. Если проблема носит аппаратный характер, вы можете заметить логи ошибок или отклонения в производительности.
-
Рассмотрите возможность создания нескольких экземпляров: Если ваши нагрузки по запросам существенно колеблются, подумайте о создании нескольких экземпляров с балансировкой нагрузки, чтобы справляться с высоким трафиком и уменьшить давление на один сервер.
-
Периодические перезапуски: Хотя перезапуск сервера не является оптимальным решением, это может временно облегчить ситуацию. Вы можете создать автоматизированные процессы для перезапуска сервера в непиковые часы.
-
Оптимизация кода: Проверьте, как ваши скрипты обрабатывают подключения к базе данных. Возможно, стоит использовать кэширование DNS-запросов или подключений для уменьшения нагрузки.
Заключение
Несмотря на то, что решение вашей проблемы может быть сложным, последовательный анализ и отладка вашей системы, а также мониторинг запросов DNS среди других метрик, помогут вам выявить и устранить корень проблемы. Рассмотрите возможность обращения в техподдержку AWS для получения дополнительной информации о состоянии вашего приложения и инстанса. Профессиональный подход к диагностике и устранению неисправностей поможет вам обеспечить стабильность работы вашего сервиса.