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