Уникнення таймаутів DNS, коли сервер dns не працює


17

У нас є невеликий центр обробки даних із близько сотні хостів, які вказують на 3 внутрішніх серверів dns (bind 9). Наша проблема виникає, коли один з внутрішніх серверів dns стає недоступним. У цей момент всі клієнти, які вказують на цей сервер, починають працювати дуже повільно.

Проблема, мабуть, полягає в тому, що у біржового Linux-резолера насправді не існує концепції "провалу" на іншому сервері dns. Ви можете налаштувати тайм-аут та кількість повторень, які він використовує, (і встановити поворот таким чином, щоб він працював у списку), але незалежно від того, які налаштування використовує наші сервіси, виконується набагато повільніше, якщо основний сервер dns не буде доступний. На даний момент це одне з найбільших джерел перебоїв у обслуговуванні для нас.

Моєю ідеальною відповіддю було б щось на кшталт "RTFM: tweak /etc/resolv.conf like this ...", але якщо це варіант, я цього не бачив.

Мені було цікаво, як інші люди вирішували це питання?

Я бачу 3 можливі типи рішень:

  • Використовуйте ips linux-ha / Pacemaker та failover (тому IP-адреси dns IP "завжди" доступні). На жаль, у нас немає хорошої інфраструктури для фехтування, і без фехтування пейсмейкер не дуже добре працює (на мій досвід Pacemaker знижує доступність без огородження).

  • Запустіть локальний dns-сервер на кожному вузлі та наведіть на нього адресу reslav.conf. Це працювало б, але це дало б нам набагато більше служб для моніторингу та управління ними.

  • Запустіть локальний кеш на кожному вузлі. Здається, люди вважають nscd "зламаним", але, здається, dnrd має правильний набір функцій: він позначає dns-сервери як вгору чи вниз, і не використовуватиме "down" dns-сервери.

Здається, що будь-який кастинг працює лише на рівні маршрутизації ip і залежить від оновлення маршруту для відмови сервера. Мульти-кастинг здавався, що це буде ідеальною відповіддю, але прив'язка не підтримує трансляцію чи мульти-кастинг, і документи, які я можу знайти, здаються, що вони вважають, що багатоадресна передача даних більше спрямована на виявлення сервісу та автоматичну конфігурацію, а не на регулярне вирішення dns. .

Я пропускаю очевидне рішення?


2
Я пропоную, що крім пошуку потрібного вам рішення (з яким я не можу вам допомогти), ви повинні працювати над реальною кореневою проблемою та вирішувати проблеми надійності з сервером DNS.
Джон Гарденєр

Основна проблема полягає в тому, чому ці сервери DNS опускаються так часто, щоб змусити вас турбуватися з цього приводу? Подумайте про тиражування вашого DNS за допомогою спеціалізованих служб, таких як BuddyNS . Ваша затримка різко зменшиться, і тривалість роботи не змусить вас більше не турбуватися про налаштування /etc/resolv.conf.
michele

Відповіді:


15

Пара варіантів. Обидва будуть розподіляти навантаження DNS на ваші DNS-сервери.

  • Спробуйте скористатися options rotateв резоль.conf. Це зведе до мінімуму вплив основного сервера вниз. Якщо один з інших серверів не працює, це сповільнить дії.
  • Використовуйте інше замовлення на сервер імен для різних клієнтів. Це дозволить деяким клієнтам нормально працювати, якщо основний сервер DNS не працює. Це поширює вплив сервера DNS поза службою навколо.

Ці варіанти можна комбінувати з options timeout:1 attempts:5. Збільште кількість спроб, якщо зменшити тайм-аут, щоб ви могли працювати з повільними зовнішніми серверами.

Залежно від конфігурації маршрутизатора, можливо, ви зможете налаштувати ваші DNS-сервери для отримання IP-адреси основного сервера DNS, коли він не працює. Це можна поєднувати з вищезазначеними методиками.

ПРИМІТКА. Я працюю роки без позапланових відключень DNS. Як зазначали інші, я б працював над вирішенням проблем, що призводять до відмови серверів DNS. Наведені вище кроки також допомагають неправильно налаштованим DNS-серверам із зазначенням недоступних серверів імен.


4

Ознайомтеся з "людиною резолюції.конф". Ви можете додати параметр тайм-ауту до резолюції.conf. За замовчуванням дорівнює 5, але додавання наступного до Reslav.conf має зменшити його до 1 секунди:

тайм-аут варіантів: 1


Після перечитування вашого другого абзацу я спробував вищезазначене на VPS Centos і Debian. Після збиття первинних dns, роздільну здатність виконала точно так, як очікувалося. Запускаючи tcpdump, я навіть міг бачити, як резолютор намагався перший сервер, а потім спробував наступний. Яку поведінку ви бачите?
Niall Donegan

1
Існує два великих випадки використання для вирішення: недовговічні процеси (як інструменти командного рядка) і тривалі процеси, і однакова конфігурація резолютора повинна працювати для обох. Якщо короткочасний (один пошук), встановлення короткого тайм-ауту закінчиться швидко. Але якщо ви шукаєте зовнішню адресу, яка не вирішиться за той час: ви отримаєте ім’я не знайдено, оскільки резолютор відмовиться від цього запиту, якщо він не повернеться за секунду. (поза кімнатою; докладніше у наступному коментарі)
Ніл Катін

Довгострокові процеси будуть повторювати кожен пошук, час очікування та переходити на наступний сервер. Але це, схоже, не кешує "смерть" сервера.
Ніл Катін

3

Тут є вашим другом кластерне програмне забезпечення, таке як серцебиття або кардіостимулятор / коросинхроніка. Як приклад, ми встановили кардіостимулятор / коросинхронізацію таким чином:

  • З'єднайте кожен сервер з іншим
  • На одну пару є 2 dns вітрини, як правило, по одному на кожен
  • Якщо зв'язування або сервер не вдалося, vip переміщується на інший сервер протягом мілісекунд

Виробничі години - 24x7, але ми впевнені, що кожен сервер повинен вийти з ладу, не впливаючи на клієнтів. варіант обертання - це лише обхідний шлях, я б цього не робив.


3

Запустіть локальний dns-сервер на кожному вузлі та наведіть на нього адресу reslav.conf. Це працювало б, але це дало б нам набагато більше служб для моніторингу та управління ними.

FWIW, це єдине ефективне рішення, яке я знайшов для цієї проблеми. Потрібно обмежувати сервер лише для прослуховування у localhost, але він повністю усунув користувачів, помічаючи відключення DNS у нашому середовищі.

Один із цікавих побічних ефектів полягає в тому, що якщо сервер localhost з якихось причин виходить з ладу, стандартні бібліотеки резолюцій, схоже, справляються з відмовою на наступний сервер набагато швидше, ніж у стандартному випадку.

Ми робимо це вже близько 3 років, і я не бачив жодної проблеми, яка може бути пов’язана з відмовою / відключенням dns-сервера, що працює на localhost.


2

Якщо сервер імен не працює на технічному обслуговуванні, це нормальна процедура скоротити тайм-аути в SOA для цього домену достроково, щоб, коли відбулося технічне обслуговування, змінилися (як видалення записів NS перед технічним обслуговуванням, і повернення їх після технічного обслуговування ) швидко розмножується. Зауважте, що це підхід на стороні сервера - зміна резолюцій - це підхід на стороні клієнта, і ... якщо ви не зможете поговорити з кожним своїм клієнтом і змусити їх здійснити коригування на їх машині ... правильний підхід. Ну, напевно, ви сказали, що всього сто клієнтів у центрі обробки даних використовують внутрішні сервери DNS, але чи справді ви хочете змінити конфігурацію на сто клієнтів, коли ви можете просто змінити зону?

Я б сказав вам, які значення в SOA відрегулювати, але я займався серфінгом в Інтернеті, щоб дізнатися точну інформацію, коли зіткнувся з цим питанням.


3
Ця відповідь стосується лише авторитетного DNS. Питання стосувалося рекурсивних пошуку DNS, здійснених клієнтським програмним забезпеченням.
Андрій Б

1

Можливо, ви можете розмістити ваші DNS-сервери за балансиром навантаження? Мабуть, LVS може збалансувати UDP. Очевидно, зробіть свій ЛБ високодоступним, щоб це не було жодної точки відмови.


0

Я знаю, що це може звучати банально, але як щодо створення більш стабільної, стійкої інфраструктури DNS як постійного рішення проблеми.


У нас досить еластична dns інфраструктура. Але 2 або 3 рази на рік у нас відбувається відключення, оскільки dns-сервер виходить з ладу (або перезапускається, або має оновлення ОС, або будь-що інше).
Ніл Катін

1
Ну ... перезавантаження та оновлення повинні бути заплановані на години, що не є виробництвом. Щодо решти, то, схоже, ви робите досить велику справу з того, що трапляється кілька разів на рік. Чи варто додаткові інфраструктури, час, гроші та управління витрачатися на проблему, яка виникає настільки рідко?
joeqwerty

8
Що відбувається, коли ваші виробничі години становлять 24x7? DNS повинен вийти з ладу на другому / третьому / x сервері AND кешувати помилку іншого сервера протягом періоду. 5-секундний тайм-аут за замовчуванням достатній, щоб знизити послуги залежно від завантаження.
Ryaner

0

Більш орієнтоване на мережу рішення буде використовувати два DNS-сервери з однаковим (виділеним) IP та Anycast маршрутизацією. (Я поки що не помічав цієї відповіді в цій темі, але це те, що тут використовується.)

Поки обидва працюють, використовується найближчий сервер. Якщо один знизиться, трафік для цього IP буде перенаправлений на інший вузол, поки він не з’явиться знову. Це особливо має сенс, якщо у вас є дві або більше локацій або центрів обробки даних.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.