ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



Понятно, спасибо. В принципе, вариант не плохой - но вопрос в том, как балансировать не случайно, а равномерно между дисками с минимальными трудозатратами (насколько я понимаю, 255 if'ов - это неоптимально с точки зрения конфигурации, да и стыдно будет, если кто увидит :), даже если уместить все это в 7 if'ов, все равно будет, наверно, криво).
Свой модуль писать страшно, как на perle организовать последовательный балансинг а не псевдорандом - не знаю. Разве что по остатку деления номера секунды на 7... Так все равно псевдорандом, нагрузка на диски будет приходиться пиками.



8 января 2009 г. 3:00 пользователь Maxim Dounin <mdounin@xxxxxxxxxx> написал:
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@xxxxxxxxxxx


 




Copyright © Lexa Software, 1996-2009.