2009-05-14 5 views
6

У меня есть два сервера IIS, работающих с использованием NLB. К сожалению, я не могу использовать общий сеанс-сервер, поэтому каждый сервер использует свой собственный сеанс. Как я могу гарантировать, что все запросы от одного и того же пользователя перенаправляются на один и тот же сервер IIS?Как сохранить запросы пользователей на одном сервере при использовании NLB IIS?

ответ

3

Я думаю, что вы ищете липкие сессии. Однако липкие сеансы реализованы вашим балансиром нагрузки. Вероятно, вам необходимо настроить внешний балансировщик нагрузки (BIG-IP, HAProxy и т. Д.), Которые могут выполнять липкие сеансы.

+0

Я думаю, что это возможно без внешнего балансировщика нагрузки, просто переконфигурировав кластер NLB. Он должен работать даже для AOL-пользователей с прокси-сервером (если они все еще существуют ;-)) – Christian

+2

В последнее время я не получил никаких дисков AOL по почте, не так ли? – Min

+0

Учитывая другие комментарии Сергея, я думаю, что это единственный путь. – NotMe

0

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

+0

Чтобы иметь отдельный сервер, как я знаю, мне нужно отметить объекты, которые хранятся в сеансе, как сериализуемые. Я не могу сделать это прямо сейчас, потому что я перемещаю устаревшую систему в архитектуру NLB. – Sergejus

0

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

Я знаю (от его использования таким образом) Cherokee поддерживает прошивку IPHash, но я уверен, что есть еще много.

+0

Я добавлю: это заменит вашу встроенную балансировку нагрузки. – Oli

+0

Но имеет ли IIS эту функциональность? – Sergejus

+0

Возможно ... Прочитайте это: http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/77cb4318-75f8-4310-a05f-3605b5768007.mspx?mfr=true – Oli

0

Чтобы добавить к ответу Ллойда, вы все равно должны избегать использования сеанса в сбалансированной по нагрузке среде. Вся цель использования сеанса заключается в том, чтобы избежать запросов к базе данных; если вы в конечном итоге сохраняете данные сеанса в базе данных, вы обычно ничего не получаете.

Причина в том, что 1. вам нужно сделать 2 вызова базы данных для каждой загрузки (извлечения и хранения) и 2. эти данные теперь должны проходить через границы сериализации/десериализации. В большинстве случаев это становится более дорогой операцией, чем просто получение данных, с которых вы хотели начать.

Теперь, на ваш вопрос. У вас есть возможность хранить данные сеанса в состоянии просмотра. При желании вы можете отказаться от сеанса и вместо этого использовать файлы cookie. Если вы идете по этому маршруту, обязательно зашифровывайте их на выходе и расшифровывайте их при их получении.

+0

Я согласен с вопросом о базе данных , мы используем MemCached для хранения информации 'session', потому что мы хотели удалить взаимодействие с базой данных, а MemCached намного быстрее при доставке информации. – Lloyd

+0

Я вижу, что вы говорите, но в моем случае у меня есть система устаревания, которую я не могу трогать. Итак, теперь мне нужно найти наиболее подходящий способ введения NLB. – Sergejus

+0

Сбалансированная балансировка среды должна адаптироваться к памяти сеанса, а не наоборот. – Karlth

1

Вы можете сделать это легко, пока ни один из ваших клиентов используют распределенную систему прокси:

В разделе protieries кластера NLB, вкладка «правила порта» вы можете выбрать «режим фильтрации» и сродство : Вы не можете выбрать «none», потому что у вас нет центральных сеансов. Но «простой» перенаправляет каждого пользователя на тот же сервер, пока ip остается неизменным. Если вы, например, Прокси-серверы со стабилизатором AIO, тогда «класс C» может быть безопасным выбором (хотя, возможно, немного уменьшить балансировку нагрузки), поскольку тот же класс C net переходит на один и тот же сервер.

Я предполагаю, что это легко реализовать MS так, что оба узла знают, какой ip четный или нечетный, или какой триплет сети класса C является четным или нечетным, и распределять нагрузку всегда одинаково в зависимости от IP-адреса -адрес

15

Нашел и решил поделиться с другими:

Используйте функцию сродством клиента. Когда клиентская привязка включена, балансировка сетевой нагрузки направляет все TCP-соединения на один и тот же узел кластера. Это позволяет поддерживать состояние сеанса в памяти хоста. Вы можете включить сближение клиентов в диалоговом окне «Добавить/редактировать правила порта» в диспетчере балансировки сетевой нагрузки. Выберите Single или Class C, чтобы гарантировать, что только один хост кластера будет обрабатывать все подключения, входящие в один и тот же сеанс клиента. Это важно, если серверное приложение, запущенное на узле кластера, поддерживает состояние сеанса (например, куки сервера) между соединениями. Дополнительные сведения об аффинности балансировки сетевой нагрузки см. В справке в оснастке «Балансировка сетевой нагрузки».

+1

Тогда сделайте это принятым ответом – Christian

+0

Я смогу сделать это только через 48 часов ... – Sergejus

+0

Кстати, это та же концепция, что и липкие сессии. – NotMe

 Смежные вопросы

  • Нет связанных вопросов^_^