Выберите продукт

DNS TTL и propagation: как спланировать cutover без split-brain при миграции

Разбираем DNS TTL и propagation на практике: где именно кэшируется DNS, как заранее «вымыть» высокий TTL, спланировать окно cutover и пережить смешанный трафик без split-brain. Внутри — стратегия значений TTL, dig-команды, чеклист и частые ошибки A/AAAA/CNAME.
DNS TTL и propagation: как спланировать cutover без split-brain при миграции

Зачем думать про DNS TTL перед миграцией

Почти любая миграция (смена IP, переезд в другой датацентр, новый балансировщик, разделение фронта и API, вынос части сервисов на отдельные поддомены) упирается не в копирование данных, а в то, как разные резолверы и кэши принимают изменения в DNS.

Вы меняете запись, а часть пользователей продолжает ходить на старый адрес. Отсюда типовые симптомы: «DNS не обновился», «у меня всё работает, а у клиента нет», «половина трафика ещё улетает на старый сервер».

В этой точке важны три термина: DNS TTL, DNS propagation и cutover. TTL задаёт время жизни ответа в кэше. Propagation на практике — это сумма задержек из-за кэширования на разных уровнях. Cutover — управляемый момент переключения, который вы хотите сделать предсказуемым и обратимым.

Плохой сценарий выглядит так: TTL оставили 86400, запись поменяли «в день Х», а затем сутки ловят смесь трафика на старом и новом окружениях. Хороший сценарий: заранее управлять TTL, подготовить совместимость двух площадок и сделать переключение контролируемым.

Как реально работает TTL и почему «propagation» — это про кэши

TTL — число секунд, которое авторитетный DNS сообщает кэширующим резолверам: «можешь хранить мой ответ столько-то». Важно понимать, что цепочка резолвинга длиннее, чем кажется, и кэширование происходит в нескольких местах.

Где кэшируется DNS

  • Рекурсивные резолверы провайдеров/корпоративных сетей: основной источник ситуации «часть аудитории видит старое».
  • Локальные резолверы на хостах и в контейнерной инфраструктуре (systemd-resolved, dnsmasq и аналоги): особенно заметно в CI/CD и при долгоживущих сервисах.
  • Кэши приложений: некоторые рантаймы и библиотеки кэшируют резолвинг дольше ожидаемого.
  • ОС/клиенты: локальные DNS-кэши встречаются, но чаще это не главный фактор.

Поэтому DNS propagation лучше воспринимать как вопрос: «когда конкретный резолвер перестанет отдавать закэшированный ответ и пойдёт за новым». TTL задаёт ориентир, но не гарантирует идеального поведения во всех сетях, особенно при ошибках и нестандартных настройках.

Negative caching: почему «удалил — добавил» может дать простой

Отдельная ловушка — negative caching: кэширование отсутствия записи (NXDOMAIN или NOERROR/NODATA). Длительность такого кэша задаётся параметрами SOA зоны и настройками резолвера. Типичный анти-паттерн во время миграции: «сначала удалим запись, потом добавим» — а в результате часть пользователей продолжает получать “записи нет” даже после добавления.

Если нужно «переопределить» запись, обычно безопаснее менять значение существующей записи, чем удалять её и создавать заново: так вы уменьшаете риск отрицательного кэша и непредсказуемых пауз.

Схема цепочки DNS-резолвинга: авторитетный сервер, рекурсивный резолвер и кэш с TTL

TTL как инструмент: что снижать, когда и до каких значений

TTL — не кнопка «поставь 60 и будет счастье». Низкий TTL увеличивает частоту запросов к авторитетным серверам и может сделать инфраструктуру чувствительнее к проблемам DNS. Но на время миграции управляемый TTL сильно повышает предсказуемость cutover.

Практичная стратегия TTL перед cutover

  1. За 24–48 часов снизить TTL на целевых записях (обычно A/AAAA/CNAME) до 300–600 секунд. Если текущий TTL высокий (например, 86400), снижение нужно делать заранее: иначе «старый высокий TTL» уже закэширован, и ускорения не будет.
  2. За 1–2 часа до переключения убедиться, что большинство проверяемых резолверов уже видят короткий TTL (то есть обновление TTL «вымыто»).
  3. После успешного переключения вернуть TTL к рабочему (например, 3600–14400), когда уверены, что откат не потребуется.

Комфортный компромисс на время миграции — TTL 300. Для небольших проектов можно опускаться до 60–120, но смысл появляется только если вы реально готовы быстро откатывать и внимательно мониторите метрики/логи.

Снижение TTL сработает только после истечения предыдущего TTL в кэше. Поэтому «снизили TTL за 10 минут до переезда» в большинстве случаев равно «не снизили».

FastFox VDS
Регистрация доменов от 99 руб.
Каждый проект заслуживает идеального доменного имени, выберите один из сотни, чтобы начать работу!

Записи A/AAAA/CNAME и ловушки миграции

В миграциях чаще всего меняют A и AAAA (IPv4/IPv6), иногда CNAME. Важно понимать, как эти записи ведут себя в период смешанного трафика.

A и AAAA: двойной стек и неожиданные маршруты

Если домен доступен по IPv6, у него есть AAAA. Ошибка «переехали только A» встречается постоянно: часть клиентов предпочитает IPv6 (механики вроде Happy Eyeballs), и они продолжают ходить на старый IPv6-адрес, даже если IPv4 уже обновлён.

Практика: в день миграции воспринимайте A/AAAA как единый комплект. На старом и новом окружении временно держите одинаковую версию сайта/API, чтобы смешанный трафик не ломал сессии и не приводил к расхождению данных.

CNAME: цепочки и кэш на разных звеньях

CNAME удобен для маршрутизации, но резолвер кэширует не только конечный A/AAAA, но и сам CNAME. В итоге вы ожидаете «TTL 300», а один элемент цепочки живёт дольше. Чем больше звеньев, тем меньше предсказуемость.

Если миграция делается через смену CNAME на другой таргет, уменьшайте TTL и на CNAME, и на целевых A/AAAA (если они под вашим контролем). Параллельно проверьте, что новая цель корректно обслуживает все нужные имена: SNI/сертификаты, виртуальные хосты, редиректы.

Если в процессе вы трогаете доменную инфраструктуру целиком (смена NS, перенос зоны), полезно заранее пройтись по рискам и регламенту: перенос домена и DNS: EPP-код, сроки и что проверить.

Split-brain при DNS cutover: что это и почему случается

Split-brain в контексте DNS-миграции — ситуация, когда разные пользователи (или один пользователь в разное время) попадают то на старую, то на новую инфраструктуру, а системы при этом работают как независимые. Самое опасное — когда оба окружения принимают запись данных: заказы, платежи, письма, изменения профиля.

Причины обычно приземлённые:

  • Длинный TTL и неизбежный период смешанного трафика.
  • Несогласованность A и AAAA (или забытый IPv6).
  • Старый сервер продолжает обслуживать «боевую» запись в свою локальную БД.
  • Сессии/кэш привязаны к конкретному узлу, нет общей точки истины.
  • Непредсказуемый кэш в приложении (особенно у long-running процессов).

Как безопасно пережить период смешанного трафика

Полностью избежать смешанного трафика в интернете обычно нельзя. Задача — сделать так, чтобы смешанный трафик не был опасен.

  1. Один источник истины для данных на время cutover: общая БД, репликация, режим read-only на старой стороне или проксирование записи.
  2. Сессии и кэш вынести из локального узла (общий стор), либо включить липкие сессии на балансировщике, если архитектура это допускает.
  3. Старый фронтенд в режиме «ограждения»: можно отдавать информ-страницу или редирект, но помните, что редирект не «лечит» DNS сам по себе: клиент всё равно резолвит старый IP, пока жив кэш.
  4. Фича-флаг на опасные операции: временно ограничить редкие, но критичные изменения состояния, если вы не уверены в консистентности.

Если вы не умеете синхронизировать состояние между старым и новым окружением, планируйте миграцию так, будто split-brain неизбежен: и заранее закладывайте read-only или единый backend для записи.

FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

Пошаговый план cutover: от подготовки до стабилизации

Ниже сценарий, который обычно работает для сайтов и API и помогает провести переключение с понятным уровнем риска.

1) Подготовка за 2–7 дней

  • Соберите инвентарь DNS: A/AAAA/CNAME, поддомены, записи для API/админки, служебные записи для верификаций.
  • Определите, что именно переключаете: A/AAAA, CNAME или NS (перенос зоны).
  • Проверьте готовность нового окружения: все имена обслуживаются, верные редиректы, health checks, корректные виртуальные хосты, сертификаты.
  • Подготовьте мониторинг: коды ответов, latency, 4xx/5xx, ошибки приложения, метрики БД и очередей.

2) Снижение TTL (обычно за 24–48 часов)

Снизьте TTL на записях, которые будете менять. Если меняются и A и AAAA — снижайте обе. Если миграция через CNAME — снижайте TTL и на CNAME, и на цели, если контролируете.

Дальше ключевое — дождаться, пока старый высокий TTL реально истечёт в кэшах.

3) Проверка «как видят мир» разные резолверы

Проверяйте не только «у себя», а через несколько сетей. Для диагностики чаще всего достаточно dig. Смотрите TTL прямо в ответе.

dig A example.com +noall +answer

dig AAAA example.com +noall +answer

dig CNAME www.example.com +noall +answer

Если вы ожидаете TTL 300, а видите тысячи, значит, либо кэш ещё не вымыт, либо вы смотрите через резолвер, который недавно закэшировал старое значение.

4) Момент переключения

Делайте cutover в заранее выбранное окно, когда команда на связи и есть план отката.

  • Обновите DNS записи (A/AAAA/CNAME) на новые значения.
  • Если состояние синхронизировать нельзя: переведите старую систему в read-only до переключения, чтобы не плодить расхождения.
  • Держите старую инфраструктуру живой минимум 1–2 TTL-окна после переключения (часто это несколько часов), чтобы клиенты со старым кэшем не получали ошибку подключения.

5) Стабилизация и возврат TTL

Когда трафик стабильно пришёл на новую площадку, ошибки не растут, данные консистентны — возвращайте TTL к рабочему значению. Старую площадку не выключайте «в ноль» мгновенно: она полезна как страховка и как источник логов для понимания, кто ещё «сидит» на старом резолве.

Таймлайн миграции: снижение TTL, окно cutover, период смешанного трафика и точка возврата TTL

DNS migration checklist: что проверить, чтобы DNS не стал точкой отказа

Перед снижением TTL

  • Зафиксировали текущие значения A/AAAA/CNAME и TTL (для быстрого отката).
  • Проверили, есть ли IPv6, и что будет с AAAA.
  • Нашли забытые зависимости: отдельные поддомены под API, callback-адреса, интеграции.

Перед cutover

  • TTL на нужных записях уже короткий и «вымытый» из большинства проверяемых кэшей.
  • Новая площадка корректно отвечает по всем хостнеймам (включая www/без www, API, админку).
  • HTTPS готов: сертификаты, SNI, цепочка, редиректы.
  • Есть план против split-brain: где запись данных, что с сессиями, как ограничиваем старую сторону.

После cutover

  • Проверили A/AAAA на нескольких резолверах и в разных сетях.
  • Смотрим логи старого сервера: есть ли ещё запросы, какие сети «застряли».
  • Вернули TTL к норме только после уверенности, что откат не нужен.

Типовые вопросы и быстрые ответы

Почему у меня TTL 300, а «обновляется» дольше?

Потому что 300 — это максимум времени хранения ответа после последнего запроса на конкретном резолвере. Если резолвер получил ответ час назад с TTL 3600, он будет держать его до истечения 3600. Плюс возможны дополнительные кэши на стороне приложений.

Можно ли сделать мгновенный cutover только DNS-ом?

Для широкой аудитории — практически нет. DNS даёт «постепенное переключение» через кэши. Почти мгновенный cutover достигают архитектурой (балансировщики, Anycast, глобальные прокси/CDN, L7-маршрутизация), но это отдельная тема.

Как минимизировать split-brain, если часть трафика всё равно пойдёт на старое?

Сведите к нулю расхождения состояния: общий стор для данных/сессий, read-only на старом, совместимые версии приложения по обе стороны и понятный план отката.

Итоги

DNS TTL — управляемый рычаг, который помогает сделать миграцию предсказуемой. Но сам по себе TTL не отменяет кэширование на разных уровнях и не гарантирует мгновенного переключения. Планируйте снижение TTL заранее, учитывайте A/AAAA, не усложняйте CNAME-цепочки и относитесь к периоду смешанного трафика как к норме.

Если воспринимать DNS как часть релиза (с проверками, окном, откатом и мониторингом), то даже сложный cutover превращается в понятную операцию, а «DNS propagation» перестаёт быть лотереей.

Поделиться статьей

Вам будет интересно

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину

Ошибка mount: wrong fs type, bad option, bad superblock в Debian/Ubuntu может означать и простую опечатку в имени раздела, и пробл ...
Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление

Если XFS-раздел внезапно стал доступен только для чтения, а сервер ушёл в emergency mode, главное — не спешить. Разберём безопасны ...
Debian/Ubuntu: как исправить Failed to fetch при apt update OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить Failed to fetch при apt update

Ошибка Failed to fetch при apt update в Debian и Ubuntu обычно связана не с самим APT, а с DNS, сетью, зеркалом, прокси, временем ...