У меня есть два сервера IIS, работающих с использованием NLB. К сожалению, я не могу использовать общий сеанс-сервер, поэтому каждый сервер использует свой собственный сеанс. Как я могу гарантировать, что все запросы от одного и того же пользователя перенаправляются на один и тот же сервер IIS?Как сохранить запросы пользователей на одном сервере при использовании NLB IIS?
ответ
Я думаю, что вы ищете липкие сессии. Однако липкие сеансы реализованы вашим балансиром нагрузки. Вероятно, вам необходимо настроить внешний балансировщик нагрузки (BIG-IP, HAProxy и т. Д.), Которые могут выполнять липкие сеансы.
Зачем вам это нужно? Если это связано с состоянием сеанса, тогда у вас должна быть база данных или сервер вне процесса, настроенный в общем месте, и все ссылки на них ссылаются.
Чтобы иметь отдельный сервер, как я знаю, мне нужно отметить объекты, которые хранятся в сеансе, как сериализуемые. Я не могу сделать это прямо сейчас, потому что я перемещаю устаревшую систему в архитектуру NLB. – Sergejus
Я бы рассмотрел обратный прокси-сервер, который находится перед сервером, и помнит, какие внешние пользователи используют серверы.
Я знаю (от его использования таким образом) Cherokee поддерживает прошивку IPHash, но я уверен, что есть еще много.
Чтобы добавить к ответу Ллойда, вы все равно должны избегать использования сеанса в сбалансированной по нагрузке среде. Вся цель использования сеанса заключается в том, чтобы избежать запросов к базе данных; если вы в конечном итоге сохраняете данные сеанса в базе данных, вы обычно ничего не получаете.
Причина в том, что 1. вам нужно сделать 2 вызова базы данных для каждой загрузки (извлечения и хранения) и 2. эти данные теперь должны проходить через границы сериализации/десериализации. В большинстве случаев это становится более дорогой операцией, чем просто получение данных, с которых вы хотели начать.
Теперь, на ваш вопрос. У вас есть возможность хранить данные сеанса в состоянии просмотра. При желании вы можете отказаться от сеанса и вместо этого использовать файлы cookie. Если вы идете по этому маршруту, обязательно зашифровывайте их на выходе и расшифровывайте их при их получении.
Я согласен с вопросом о базе данных , мы используем MemCached для хранения информации 'session', потому что мы хотели удалить взаимодействие с базой данных, а MemCached намного быстрее при доставке информации. – Lloyd
Я вижу, что вы говорите, но в моем случае у меня есть система устаревания, которую я не могу трогать. Итак, теперь мне нужно найти наиболее подходящий способ введения NLB. – Sergejus
Сбалансированная балансировка среды должна адаптироваться к памяти сеанса, а не наоборот. – Karlth
Вы можете сделать это легко, пока ни один из ваших клиентов используют распределенную систему прокси:
В разделе protieries кластера NLB, вкладка «правила порта» вы можете выбрать «режим фильтрации» и сродство : Вы не можете выбрать «none», потому что у вас нет центральных сеансов. Но «простой» перенаправляет каждого пользователя на тот же сервер, пока ip остается неизменным. Если вы, например, Прокси-серверы со стабилизатором AIO, тогда «класс C» может быть безопасным выбором (хотя, возможно, немного уменьшить балансировку нагрузки), поскольку тот же класс C net переходит на один и тот же сервер.
Я предполагаю, что это легко реализовать MS так, что оба узла знают, какой ip четный или нечетный, или какой триплет сети класса C является четным или нечетным, и распределять нагрузку всегда одинаково в зависимости от IP-адреса -адрес
Нашел и решил поделиться с другими:
Используйте функцию сродством клиента. Когда клиентская привязка включена, балансировка сетевой нагрузки направляет все TCP-соединения на один и тот же узел кластера. Это позволяет поддерживать состояние сеанса в памяти хоста. Вы можете включить сближение клиентов в диалоговом окне «Добавить/редактировать правила порта» в диспетчере балансировки сетевой нагрузки. Выберите Single или Class C, чтобы гарантировать, что только один хост кластера будет обрабатывать все подключения, входящие в один и тот же сеанс клиента. Это важно, если серверное приложение, запущенное на узле кластера, поддерживает состояние сеанса (например, куки сервера) между соединениями. Дополнительные сведения об аффинности балансировки сетевой нагрузки см. В справке в оснастке «Балансировка сетевой нагрузки».
Я думаю, что это возможно без внешнего балансировщика нагрузки, просто переконфигурировав кластер NLB. Он должен работать даже для AOL-пользователей с прокси-сервером (если они все еще существуют ;-)) – Christian
В последнее время я не получил никаких дисков AOL по почте, не так ли? – Min
Учитывая другие комментарии Сергея, я думаю, что это единственный путь. – NotMe