Рейтинг:0

Временный сбой в разрешении имен PHP-Ubuntu

флаг in

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

Серьезность: Предупреждение --> mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: временный сбой в разрешении имен

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

[ОТРЕДАКТИРОВАНО] Я использую Ubuntu 18.04 и подключаюсь к кластеру Aurora на AWS, а внутренний код находится на EC2.

флаг in
Здесь недостаточно информации, чтобы дать какие-либо полезные советы, кроме общих советов, которые можно найти на первой странице Google. Не могли бы вы [отредактировать] свой вопрос, включив в него: (1) версию Ubuntu, которую вы используете (2) имя хоста, которое вы используете для подключения к MySQL
cyberrspiritt avatar
флаг in
обновлено @matigo
Рейтинг:2
флаг in

Принимая во внимание следующие детали:

  1. миллионы запросов ежедневно
  2. Кластер Aurora на AWS

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

Одним из выдающихся пунктов документации по квоте является следующее:

Каждый инстанс Amazon EC2 ограничивает количество пакетов, которые могут быть отправлены на предоставленный Amazon DNS-сервер. максимум 1024 пакета в секунду на сетевой интерфейс. Эта квота не может быть увеличена. Количество DNS-запросов в секунду, поддерживаемое DNS-сервером Amazon, зависит от типа запроса, размера ответа и используемого протокола. Дополнительные сведения и рекомендации по масштабируемой архитектуре DNS см. в техническом документе «Решения гибридного облака DNS для Amazon VPC».

При достижении квоты Amazon Route 53 Resolver отклоняет [...]

Примечание: Акцент мой.

Бит «максимум 1024 пакета в секунду» важен, потому что действительный количество пакетов на запрос может варьироваться, и обычно на запрос DNS приходится несколько пакетов.

Если ваши серверы получают миллионы запросов в день, то существует высокая вероятность того, что ваш сервер (серверы) достигает максимума этого пакета:

  • 1 000 000 запросов / 86 400 секунд = 11 574 запросов в секунду
  • 11,574 * 4 пакета¹ = 46 пакетов в секунду
  • 1024/46 = 22,26 DNS-вызова в секунду

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


¹ Столкнувшись с этой проблемой в прошлом, я измерил, что для многих DNS-запросов требуется в среднем 4 пакета на вызов.

cyberrspiritt avatar
флаг in
Спасибо за ваш ответ. Я знаю об этом. Если я получаю максимальное количество запросов в секунду, как мне это решить? Обычно проблема решается перезапуском сервера. Каковы обходные пути, чтобы избежать этого ограничения?
флаг in
Я не нашел хорошего, безопасного для высокой доступности способа решения проблемы.Я делал такие вещи, как гибридный DNS и тому подобное, но, если кластер выходит из строя, локальный DNS может привести к сбоям соединения в течение нескольких секунд/минут, пока не истечет локальный TTL… что не очень хорошо. Как правило, мне приходилось заглядывать в код приложения и искать SQL-запросы, которые без необходимости дублируются или являются излишне близорукими.
cyberrspiritt avatar
флаг in
поможет ли использование служб nscd или dnsmasq не достичь предела? так как они будут кэшировать запросы NS в течение некоторого времени?
флаг in
Да, при условии, что кластеру никогда не придется переключаться на другой экземпляр. В противном случае вы все еще ждете локального TTL.
cyberrspiritt avatar
флаг in
Я попытался отладить это с помощью статьи AWS: https://aws.amazon.com/premiumsupport/knowledge-center/vpc-find-cause-of-failed-dns-queries/ Максимальное количество пакетов в секунду, которое я смог найти, было 26. Но когда я снова столкнулся с этой ошибкой php сегодня, количество пакетов за это время было меньше 15.
флаг pn
Я столкнулся с похожими проблемами и написал о своем решении здесь: https://manuel.kiessling.net/2022/01/27/getting-rid-of-temporary-failures-in-name-resolution-on-aws. -ec2/

Ответить или комментировать

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