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

Re: Кластер из 2ух компьютеров.



Vinogradov Dmitriy wrote:

> Предположим, имеется два системных блока (но, увы, один монитор). Хочется
> использовать их оба, как двухпроцессорную систему, или, если угодно,
> кластер. Физически соединить их, например, через 100Mbit Ethernet.
> Вопрос: есть ли для Linux вообще, и для Debian (или RedHat) в частности,
> нужные программки (точнее - для распределения загрузки между процессорами).
> Любые комментарии и советы приветствуются.

Хочу сразу предупредить: чудес не бывает. То есть 1 процесс дальше 1 процессора
"не прыгнет". Это большие умные дядьки доказали. Но разбросать несколько
процессов по нескольким процессорам - вполне возможно.

Советую попробовать MOSIX. Мы в конторе используем его со времен ядра 2.2.18 и
собираемся продолжать в том же духе. Берется это чудо на www.mosix.org.
Разрабатывается в каком-то израильском универе. Эта вещь состоит из двух частей:
патч для ядра и утилитки. Пересобираем ядро, ставим утилитки, прописываем узлы в
конфиге, перегружаемся и готово. Мозикс будет разбрасывать процессы по
компьютерам, балансирую нагрузку. При желании можно явно ему указать, на какой
машине процесс пускать. Процессы могут мигрировать также в процессе работы, если
мозикс так решит (только если мы явно не указали где этому процессу
исполняться). В комплекте утилиток есть монитор состояния кластера. Можно
настраивать, сколько ресурсов своей машины отдавать в кластер. Также можно
использовать распределенную файловую систему, если ты экспериментатор.


Теперь о недостатках.

Толстые процессы способны повесить не только свой компьютер, но и весь кластер.
К счастью, я этот эффект уже давно не наблюдаю, наверное пофиксили.

Лимиты на память берутся с той машины, с которой запушен процесс. Поэтому лимиты
должны быть прописаны на каждой машине. Пример неприятной ситуации. Есть машины
А с 256М памяти и машина В с 128М. На А прописан лимит 200М на юзера, на В
лимитов нет. На В запускают процесс. Он выжирает все 128М памяти, потом
мигрирует на А. На А он также выжирает всю память и не собирается
останавливаться, так как лимиты машины А не действуют на процесс с машины В.
Итог: машина А висит так мертво, что только на пинги отвечать может. Ее можно
(часто, но не всегда) отвесить, прибив этот процесс на машине В.

Иногда бывает, что чужой (или свой на чужой машине?) процесс не умер корректно и
остался в таблице процессов. Когда делаешь ps или top, команда доходит до этого
процесса и виснет. Причем прибить ее проблематично, так как PID неизвестен, так
как невозможно получить список процессов командой ps. Помогает прибить этот
top/ps только kill -9 на родительский xterm средстваим window manager'a. Когда
достигнута такая ситуация, нормально пользоваться машиной уже нельзя (ну куда в
линуксе без ps). Тут только перезагрузка, так как мозикс в таких случаях
выгружаться не желает. К счастью, ребут проходит чисто, без fsck.


К счастью, неприятности эти происходят редко. У нас кластер постоянно нагружен в
течение рабочего дня. Перегружаться самой мощной (и поэтому самой часто
падающей) машине приходится в среднем раз в неделю-две. По причине неработающей
ps обычно. Плюсов гораздо больше. Одно только make -j 6 чего стоит.   :-)




Reply to: