Re: балансинг по жестким дискам

Борис Долгов boris at dolgov.name
Sat Jan 10 17:46:40 MSK 2009


Ага, это именно оно :)
Думал, что переменная будет жить только во время запроса, но все оказалось
хитрее :)

9 января 2009 г. 3:36 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:

> Hello!
>
> On Thu, Jan 08, 2009 at 03:45:29PM +0300, Борис Долгов wrote:
>
> > Это неплохо, а как во встроенном перле завести счетчик, который будет
> > действовать на протяжении всей жизни воркера, а не только обработки
> запроса?
>
> Как это делается обычно в перле - через глобальную переменную.
>
> http {
>    perl_set  $disk  'sub { our $c; return ($c++ % 7); }';
>    ...
>
>    server {
>        root  /path/to/$disk;
>        ...
>    }
> }
>
> В принципе объявление 'our $c' можно вообще опустить (ибо use
> strict никто не делал), но мне религия не позволяет. ;)
>
> Maxim Dounin
>
> >
> > 8 января 2009 г. 13:14 пользователь Maxim Dounin <mdounin at mdounin.ru
> >написал:
> >
> > > Hello!
> > >
> > > On Thu, Jan 08, 2009 at 03:31:14AM +0300, Борис Долгов wrote:
> > >
> > > > Понятно, спасибо. В принципе, вариант не плохой - но вопрос в том,
> как
> > > > балансировать не случайно, а равномерно между дисками с минимальными
> > > > трудозатратами (насколько я понимаю, 255 if'ов - это неоптимально с
> точки
> > > > зрения конфигурации, да и стыдно будет, если кто увидит :), даже если
> > > > уместить все это в 7 if'ов, все равно будет, наверно, криво).
> > >
> > > Ну я ж говорю - не показывать. :)
> > >
> > > > Свой модуль писать страшно, как на perle организовать
> последовательный
> > > > балансинг а не псевдорандом - не знаю. Разве что по остатку деления
> > > номера
> > > > секунды на 7... Так все равно псевдорандом, нагрузка на диски будет
> > > > приходиться пиками.
> > >
> > > А кто мешает завести счётчик запросов внутри перла и делать
> > > round-robin по этому счётчику?  Разделять между воркерами его не
> > > надо, обнуление при реконфигурации - тоже не велика беда.
> > >
> > > Maxim Dounin
> > >
> > > >
> > > >
> > > >
> > > > 8 января 2009 г. 3:00 пользователь Maxim Dounin <mdounin at mdounin.ru
> > > >написал:
> > > >
> > > > > Hello!
> > > > >
> > > > > On Thu, Jan 08, 2009 at 01:18:52AM +0300, Борис Долгов wrote:
> > > > >
> > > > > > Добрый день!
> > > > > > Хотелось бы как-нибудь хитро заставить nginx балансировать
> нагрузку
> > > между
> > > > > > несколькими жесткими дисками (между несколькими document_root)
> > > > > > Вижу несколько решений:
> > > > > > 1. Поднять еще 7 nginx'ов на разных портах, сделать балансинг по
> tcp.
> > > > > > Наверно, плохо.
> > > > > > 2. Поднять еще 7 server'ов в одном nginx'e, сделать баланскинг по
> > > tcp.
> > > > > > Наверно, плохо.
> > > > > > 3. Написать что-то легкое на fastcgi, которое будет отдавать
> > > > > > X-Accel-Redirect. Наверно, плохо?
> > > > > > 4. Написать что-то на встроенном perl'e. Хорошо ли? Как сделать
> > > > > равномерную
> > > > > > балансировку при его использовании, не прибегая к внешним
> средствам.
> > > > > > 5. Написать модуль, который будет сам менять document_root.
> Наверно,
> > >  не
> > > > > > осилю.
> > > > > >
> > > > > > Есть ли какие-то другие способы? Что из вышеперечисленного
> > > посоветуете?
> > > > > > Файлы небольшие, не больше 7 мегабайт.
> > > > >
> > > > > Я бы попробовал что-нибудь вроде
> > > > >
> > > > >    root  /path/to/$disk;
> > > > >
> > > > > и заставил переменную $disk принимать [[псевдо]случайные] значения
> > > > > от 0 до 6 соответственно.  С особым цинизмом это можно сделать
> > > > > rewrite'ом, как нибудь так:
> > > > >
> > > > >   set $disk 0;
> > > > >   if ($remote_addr ~ /\.1$/) { set $disk 0; }
> > > > >   if ($remote_addr ~ /\.2$/) { set $disk 1; }
> > > > >   ...
> > > > >   if ($remote_addr ~ /\.255$/) { set $disk N; }
> > > > >
> > > > > (главное - Игорю не показывать :)).  Ну соответственно варианты
> > > > > оптимизации - выставлять переменную встроенным перлом, сделать
> > > > > модуль выставляющий переменную.
> > > > >
> > > > > Maxim Dounin
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > С уважением, Борис Долгов.
> > > > icq 77556665
> > > > e-mail boris at dolgov.name
> > >
> > >
> >
> >
> > --
> > С уважением, Борис Долгов.
> > icq 77556665
> > e-mail boris at dolgov.name
>
>


-- 
С уважением, Борис Долгов.
icq 77556665
e-mail boris at dolgov.name
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20090110/70386236/attachment.html>


More information about the nginx-ru mailing list