Запуск рекурсивного DNS на моем веб-сервере

Я пытаюсь решить проблему с DNS, которую я имел с моим веб-приложением.

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

Я обнаружил, что, несмотря на тайм-ауты и обработку устаревших исходящих соединений, симуляция сбоев DNS воспроизводит сбои, которые я вижу в своем веб-приложении.

Поэтому я думаю, что я должен реализовать локальный кэш DNS. Я выбрал PowerDNS для обработки исходящих запросов. Он будет обрабатывать 500-1000 запросов в секунду на все те же 8 или около того доменов.

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

Так у меня есть правильная идея, запуск локального рекурсивного DNS?

Я думаю о запуске локального вместе с Google в моей resolv.cond с включенным вращением вместе с другой конфигурацией.

В чем я не уверен, так это в том, как powerdns на самом деле разрешает запросы, я не устанавливал зоны пересылки, но он все равно будет возвращать данные в течение 30 мс и все последующие результаты из кэша.

Можете ли вы пробить дыры с моей логикой, и если это хорошее решение для моей надежности DNS?

Спасибо

2 ответа

Решение

Ваш план звучит хорошо, но проверьте записи TTL на RR для небольшого набора доменов, которые вам нужно разрешить. Если у них действительно короткие TTL (например, менее чем приблизительно 20 секунд), ваш локальный кеш не сильно поможет, потому что он все равно будет запрашивать их один раз за интервал TTL. Очень короткие TTL иногда появляются с балансировщиками нагрузки и тому подобным. Чем длиннее TTL, тем эффективнее будет ваш кеш.

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

Нет веских причин перечислять как ваш новый локальный кеш, так и внешний сервер в /etc/resolv.conf, Если у вас есть nameserver 127.0.0.1 в этом файле это все, что вам действительно нужно.

Я просто хотел добавить, что вы можете поставить

options single-request

в ваш файл resolv.conf, если вы не используете локальный DNS-сервер.

В более новых системах (RHEL 6), если у вас включен IPv6, он будет пытаться искать записи A и AAA параллельно. Я видел, как некоторые DNS-серверы воспринимают это как злоупотребление (слишком много запросов в секунду) и начинают отбрасывать DNS-запросы.

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

Другие вопросы по тегам