Перейти к основному содержанию

Envoy и DNS

Envoy

Envoy — это высокопроизводительный L4-L7 балансировщик написанный на С++.

Envoy похож на nginx и haproxy со своими отличиями, которые иногда сильно нужны и весьма предпочтительны. Envoy ориентирован на микросервисную архитектуру и обладает богатым функционалом.

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

Проблема взаимодействия Envoy и DNS

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

GPT подсказал куда копать, а именно — в документацию. Документация указывает на две опции:

  • respect_dns_ttl — по умолчанию false
  • dns_refresh_rate  — по умолчанию 5 секунд

Кластеры типа STRICT_DNS и LOGICAL_DNS по умолчанию выполняют разрешение DNS постоянно в фоновом режиме, независимо от того, есть ли трафик к этим кластерам. Это означает, что даже если сервис используется редко, Envoy все равно будет регулярно создавать DNS-запросы. Значение dns_refresh_rate по умолчанию составляет всего 5 секунд. Такой короткий интервал приводит к очень частым запросам к DNS-серверу.

При этом значения TTL записей DNS по умолчанию игнорируются: respect_dns_ttl. Кто это вообще придумал?!

https://github.com/envoyproxy/envoy/issues/20562

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

Что делать?

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

Общее количество запросов к DNS серверам снизится. Однако, если инфраструктура большая, то по мере истечения TTL, серверы Envoy могут одновременно генерировать пиковый шквал запросов (Thundering Herd) к серверам DNS. Здесь может помочь параметр dns_jitter, который предназначен для добавления случайной задержки и предотвращения штурмующих волн запросов. И он тоже почему-то по умолчанию отключен.

Теги

 

Похожие материалы

Zabbix шаблон для мониторинга RAID контроллеров LSI в Linux

Делюсь полезным шаблоном для мониторинга RAID контроллеров LSI (Broadcom, Avago). Мониторим с помощью утилиты storcli. Шаблон делал сам.

Windows 10 — конвертируем MDF в ISO

Скачал я старенькую игрушку на Windows 10, решил вспомнить молодость. А образ в формате MDF. Это запатентованный формат образа диска для известного программного продукта Alcohol 120%. Этот файл является полноценной копией лазерного диска.

Теги

mdadm — RAID10 из четырёх NVMe дисков на сервере Dell

RAID1 из двух дисков NVMe 3.84 TB KCD5XLUG3T84 прекрасно работал. Потом место кончилось. Было принято решение приобрести ещё два диска такого же объёма и сделать RAID10 из четырёх NVMe дисков.

Теги