Предположим, я установил пару DNS-серверов anycasted в моей внутренней сети, используя Bird, и они просто передают OSPF моим основным маршрутизаторам. я обнаружил этот в Интернете и сделали это возможным.
Если я настрою один путь с более высокой стоимостью, чем другой, сладко, я просто сделал красивый способ выполнить аварийное переключение, не вызывая у моих клиентов каких-либо тайм-аутов при переключении с одного хоста в их resolv.conf на другой преобразователь в их resolv.conf.
Но для меня этого недостаточно. Я хочу распределить нагрузку между своими DNS-серверами. Поэтому я установил одинаковую стоимость для обоих, поэтому маршрутизаторы теперь должны выполнять ECMP и отправлять 50% запросов одному и 50% запросов другому.
Но оказывается, что мое предприятие использует TCP для значительной части нашего DNS - допустим, у нас есть огромные SRV-записи, и мы используем DNSSEC, потому что мы классные.
Теперь, как мне настроить мою умную настройку Anycast, чтобы справиться с тем фактом, что для TCP-запросов требуется 3 или 4 пакета для выполнения запроса, и теперь один из этих 3 пакетов всегда будет идти на неправильный маршрутизатор и получать TCP-соединение сброс.
Просто используйте OSPF ECMP для каждого потока, а не для каждого пакета, и все будет в порядке, как и сказано в презентации NANOG.
Anycast для TCP является потенциальной проблемой только для долгоживущих сеансов TCP, и почти каждая реализация DNS, о которой я знаю, использует только очень короткие сеансы TCP.
Что ж, в такой схеме вы можете просто заблокировать ответы RST за недопустимую сессию, не так ли? :) или (что еще лучше) в сервис не сдавать:
- недействительное состояние?
- нет, попробуй другой!
П.С. Да, мне очень нравится презентация »TCP Anycast - не верьте FUD - nanog"по ссылке, которую я вам дал в комментариях.;)