Проблемы балансировки нагрузки.Net веб-приложения с использованием State Server
У нас есть несколько веб-серверов за балансировщиком нагрузки Netscaler. На каждом сервере (Win2008) размещается приложение ASP.Net (с использованием iis 6.1), которое настроено на использование центрального сервера, на котором запущена служба.Net StateServer, для управления состоянием сеанса.
Когда мы настраиваем балансировщик нагрузки для использования "циклического перебора" или "наименее занятой" маршрутизации, веб-приложение регулярно вылетает с ошибкой, указывающей на отсутствие чего-то ожидаемого в состоянии сеанса. Тем не менее, он не делает это ВСЕ время - только на определенных шагах, а затем примерно на 75% попыток.
Когда мы настраиваем балансировщик нагрузки на постоянство сервера (чтобы пользователь "завис" на одном сервере), проблема не возникает. (Но это не наш желаемый режим бега)
Вещи, которые мы уже проверили / сделали:
- Перезапустите все вещи
- Ключи машины одинаковы на всех серверах
- Нет проблем с подключением между веб-серверами и сервером состояний
- IIS это имена сайтов, пути и идентификаторы одинаковы на всех веб-серверах
- Ошибка не регистрируется в журналах приложения
Есть ли у кого-нибудь предложения по другим вопросам, чтобы проверить / возможные причины?
NB. У нас точно такая же настройка в другой среде - тот же тип балансировщиков нагрузки, то же веб-приложение, та же конфигурация, та же настройка сервера... и все работает отлично. Единственное отличие - это другая версия VMWare Tools, но не видите ли это причины?
1 ответ
Месяцы спустя мы обнаружили причину. Некоторые (но не все) серверы были обновлены до более новой версии.Net Framework.
Microsoft не поддерживает разные серверы, использующие один и тот же StateServer с разными версиями платформы, поэтому, когда клиенты переключаются между сервером с 4.5.1 и сервером с более ранней версией, они по существу теряют свой сеанс и происходит сбой приложения.
Если вы столкнулись с этой проблемой, я предлагаю вам проверить, какая платформа установлена на каждом сервере - они должны быть одинаковыми, чтобы они могли работать с одним и тем же StateServer.