2010-10-08 3 views
2

У меня есть веб-сервис C# на IIS, действующий как прокси. Моя проблема заключается в том, что при изменении IP-адреса одного из серверов backend DNS-кеш Windows корректно обновляется (проверяется с помощью nslookup), но служба продолжает выполнять некоторые запросы на старый IP в течение примерно 40 минут.DNS failover требует времени

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

Любая идея?

Заранее спасибо.

+0

Как вы просматриваете записи DNS в своем веб-сервисе? В общем, вы не хотите, чтобы каждый DNS-сервер попадал в DNS-серверы, поэтому это может быть не лучший способ выполнить переход на другой ресурс. Что вызывает изменение IP-адреса серверных серверов? –

+0

Я согласен с вами, использование DNS для отказоустойчивости - плохая идея. К сожалению, это так, как это делается на сервере backend, и я не контролирую его. IP-адрес изменяется, потому что сервер backend перемещается из одного центра обработки данных в другой. – benfle

+0

Можете ли вы опубликовать код, который неправильно разрешает IP? –

ответ

0

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

В Windows XP, вы установите его в реестре:

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ DNSCache \ Parameters DWORD: MaxNegativeCacheTtl Значение: 0

Не играл с этим в Vista или Windows 7.

Мне любопытно увидеть код, который не позволяет решить адрес сервера backend ... интересно, что что-то из самого кода поддерживает старый IP-адрес.

+1

отрицательный кеш - как долго хранить ответы _negative_ (т. Е. Отсутствующие). он не влияет на ответы _changed_. – Alnitak

+0

Вы правы, моя ошибка –

0

Если вы используете что-то, построенное на компонентах http-компонентов Windows, вы обнаружите, что компонент зависает с разрешенным ip как оптимизацией производительности. Как только он будет иметь имя/ip, он будет висеть на нем буквально DAYS. Он полностью игнорирует TTL.

Единственная причина, по которой вы преодолеваете это с задержкой на простоя, состоит в том, что компонент используется в вашем конкретном использовании.

Это известная проблема. Менеджер MS-программы «своего рода» признает это. Но это никогда не было исправлено.

Мы написали нашу собственную замену.

+0

Я подозреваю что-то вроде этого и желаю, чтобы кто-то помог мне указать на это. Так что я не могу избежать «грязного» патча ...? – benfle

2

установка это на сервере Web.config Try:

<configuration> 
    <system.webServer> 
     <httpProtocol allowKeepAlive="false" /> 
    </system.webServer> 
</configuration> 

Это говорит серверу, что it can't send back the Connection: Keep-Alive header. Новые соединения создаются для каждого запроса, и это как-то заставляет его обновлять новый IP. Когда Keep Alive остается включенным, он будет продолжать совместное соединение с старым IP в течение длительного времени.