Smart load balancing
Andrey Zloy
andrey.zloy на gmail.com
Ср Янв 20 18:58:20 MSK 2010
> Вопросы:
> 1. Можно ли это реализовать? Я не очень пока понимаю - что можно
> сделать стандартными средствами, что - с использованием перла. А,
> может, что-то нельзя вообще. Вот пункт 8 - можно? А 2?
> 2. Поделитесь, пожалуйста, примерами конфигов, ну или ссылками на
> соответствующие разделы документации.
Можно. Для выбора бэкэнда можно истользовать алгоритм от мемкеша.
Требует установленного модуля перла String::CRC32 (не помню есть ли он
по дефолту)
http {
...
perl_set $serv_index 'sub {
use String::CRC32;
use nginx;
my $r = shift;
$r =~ /super_cookie=([^;]+?)/;
my $my_cookie = $1;
my $serv_index = (((crc32($my_cookie) >> 16) & 0x7fff) % 2); #
где 2 это кол-во бэкэндов
return $serv_index;
}';
....
}
server {
..
set $serv_index = $http_cookie;
if ($serv_index = 0){
proxy_pass 127.0.0.1;
}
if ($serv_index = 1){
proxy_pass 192.168.0.29;
}
...
}
Аналогично можно сделать проверку на экспайр и md5 для валидности.
Подробная информация о списке рассылки nginx-ru