ip_hash => cookie_hash

Alexandre Snarskii snar на snar.spb.ru
Пт Апр 15 20:37:07 MSD 2011


On Thu, Apr 14, 2011 at 12:17:42AM +0300, Vasil Mikhalenya wrote:
>     > все правильно, допустим, у вас 10 бекендов. приходит клиент. без куки.
>     его
>     > куда-то отправляют (скажем на бекенд1), там он получает куку JSESSIONID,
>     > второй раз приходит уже с кукой. мы берем ее как ключ и считаем хеш.
>     попадем
>     > ли мы по этому хешу на бекенд1 (который нас знает и который нам выдал
>     куку)
> 
>     Если бэкэнды не используют shared sessions storage то ССЗБ
> 
>  
> Если бы сессия была доступна на всех нодах, то данного вопроса не возникло бы в
> принципе.

Возможно, вам имеет смысл посмотреть на haproxy (http://haproxy.1wt.eu/),
у него с всякими cookie-based persistense на порядок лучше. 

Если кроме JSESSIONID вы можете добавлять еще какие-нибудь куки
(или добавлять в JSESSIONID указание "куда его проксировать") - 
можете попробовать примерно такой подход: 

upstream serverone { 
  server serverone.domain.tld;
  server servertwo.domain.tld backup;
}
upstream servertwo { 
  server serverone.domain.tld backup;
  server servertwo.domain.tld;
}
upstream serverpool { 
  server serverone.domain.tld;
  server servertwo.domain.tld;
}

location / { 
  if($cookie_ADVICE = "ONE") {  # if($cookie_JSESSIONID ~* "#ONE$") 
     proxy_pass http://serverone;
     break;
  };
  if($cookie_ADVICE = "TWO") { 
     proxy_pass http://servertwo;
     break;
  };
  # by default balance requests among pool members 
  proxy_pass http://serverpool;
};

-- 
In theory, there is no difference between theory and practice. 
But, in practice, there is. 



Подробная информация о списке рассылки nginx-ru