Я пытаюсь решить возникшую у меня проблему DNS с моим веб-приложением.
Он делает несколько запросов к различным, но фиксированным внешним доменам. Я не могу разместить домены в хосте по очевидным причинам, облачному интерфейсу / балансировке нагрузки и другим изменениям ip.
Я обнаружил, что, несмотря на тайм-ауты и обработку устаревших исходящих подключений, я обнаружил, что имитация сбоев DNS воспроизводит сбои, которые я наблюдаю в своем веб-приложении.
Поэтому я думаю, что мне следует реализовать локальный кеш DNS. Я выбрал ресурс powerdns для обработки исходящих запросов. Он будет обрабатывать 500-1000 запросов в секунду к тем же 8 или около того доменам.
Я надеюсь достичь уменьшения количества отказов DNS, ошибок связи, медленных ответов DNS или неудачных ответов DNS. Хотите верьте, хотите нет, мы раньше использовали googles dns, и иногда он не отвечал, и это приводило к сбою нашего приложения, а в часы пик действительно заставляло наши потоки зависать и потреблять ресурсы.
Итак, я правильно понял, запускать локальный рекурсивный DNS?
Я думаю о запуске локального вместе с google в моем resolv.cond с включенным вращением вместе с другой конфигурацией.
Я не уверен в том, как powerdns на самом деле разрешает запросы, я не установил никаких зон пересылки, но он все равно будет возвращать копание в течение 30 мс и все последующие результаты из кеша.
Можете ли вы найти дыры в моей логике, и если это хорошее решение для моей надежности DNS?
Спасибо
Я просто хотел добавить, что вы можете поставить
options single-request
в ваш файл resolv.conf, если вы не используете локальный DNS-сервер.
В более новых системах (RHEL 6), если у вас включен IPv6, он будет пытаться искать записи A и AAA параллельно. Я видел, как некоторые DNS-серверы рассматривают это как злоупотребление (слишком много запросов в секунду) и начинают отбрасывать DNS-запросы.
Вы не упомянули свой веб-сервер, но некоторые веб-серверы (Nginx) имеют внутреннее кэширование DNS. Известно, что они кешируют плохие результаты, поэтому вы можете отключить любые внутренние кеши во время отладки.
Ваш план звучит хорошо, но проверьте записи TTL в RR для небольшого набора доменов, который вам нужно разрешить. Если у них действительно короткие TTL (например, менее примерно 20 секунд), ваш локальный кеш не так сильно поможет, потому что он все равно будет запрашивать их один раз за интервал TTL. Очень короткие TTL иногда наблюдаются с балансировщиками нагрузки и т.п. Чем длиннее TTL, тем эффективнее будет ваш кеш.
Вы также можете рассмотреть программное обеспечение, предназначенное для рекурсивного распознавания, такое как Unbound. Unbound имеет приятную функцию, с помощью которой он может запрашивать домены из своего кеша, срок действия которых истекает, чтобы предотвратить их истечение. Это может немного повысить отказоустойчивость.
Нет веских причин указывать и ваш новый локальный кеш, и внешний сервер в /etc/resolv.conf
. Если у вас есть nameserver 127.0.0.1
в этом файле это все, что вам действительно нужно.