Понятно, спасибо. В принципе, вариант не плохой - но вопрос в том, как балансировать не случайно, а равномерно между дисками с минимальными трудозатратами (насколько я понимаю, 255 if'ов - это неоптимально с точки зрения конфигурации, да и стыдно будет, если кто увидит :), даже если уместить все это в 7 if'ов, все равно будет, наверно, криво).<br>
Свой модуль писать страшно, как на perle организовать последовательный балансинг а не псевдорандом - не знаю. Разве что по остатку деления номера секунды на 7... Так все равно псевдорандом, нагрузка на диски будет приходиться пиками. <br>
<br><br><br><div class="gmail_quote">8 января 2009 г. 3:00 пользователь Maxim Dounin <span dir="ltr"><<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello!<br>
<div class="Ih2E3d"><br>
On Thu, Jan 08, 2009 at 01:18:52AM +0300, Борис Долгов wrote:<br>
<br>
> Добрый день!<br>
> Хотелось бы как-нибудь хитро заставить nginx балансировать нагрузку между<br>
> несколькими жесткими дисками (между несколькими document_root)<br>
> Вижу несколько решений:<br>
> 1. Поднять еще 7 nginx'ов на разных портах, сделать балансинг по tcp.<br>
> Наверно, плохо.<br>
> 2. Поднять еще 7 server'ов в одном nginx'e, сделать баланскинг по tcp.<br>
> Наверно, плохо.<br>
> 3. Написать что-то легкое на fastcgi, которое будет отдавать<br>
> X-Accel-Redirect. Наверно, плохо?<br>
> 4. Написать что-то на встроенном perl'e. Хорошо ли? Как сделать равномерную<br>
> балансировку при его использовании, не прибегая к внешним средствам.<br>
> 5. Написать модуль, который будет сам менять document_root. Наверно, не<br>
> осилю.<br>
><br>
> Есть ли какие-то другие способы? Что из вышеперечисленного посоветуете?<br>
> Файлы небольшие, не больше 7 мегабайт.<br>
<br>
</div>Я бы попробовал что-нибудь вроде<br>
<br>
root /path/to/$disk;<br>
<br>
и заставил переменную $disk принимать [[псевдо]случайные] значения<br>
от 0 до 6 соответственно. С особым цинизмом это можно сделать<br>
rewrite'ом, как нибудь так:<br>
<br>
set $disk 0;<br>
if ($remote_addr ~ /\.1$/) { set $disk 0; }<br>
if ($remote_addr ~ /\.2$/) { set $disk 1; }<br>
...<br>
if ($remote_addr ~ /\.255$/) { set $disk N; }<br>
<br>
(главное - Игорю не показывать :)). Ну соответственно варианты<br>
оптимизации - выставлять переменную встроенным перлом, сделать<br>
модуль выставляющий переменную.<br>
<font color="#888888"><br>
Maxim Dounin<br>
<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>С уважением, Борис Долгов.<br>icq 77556665<br>e-mail <a href="mailto:boris@dolgov.name">boris@dolgov.name</a><br>