Кластеры в Linux: openMosix


Денис Колисниченко

Для чего тебе нужен кластер? Или тебе не хватает мощности твоего компьютера? Совсем необязательно копить деньги на очередной апгрейд. Возможно, тебе поможет кластер. Кластер нужен, если тебе не хватает производительности одного компьютера для решения какой-нибудь задачи. Кластер позволяет объединить в одно целое (для решения общей задачи) несколько компьютеров. Самое главное - это то, что ты можешь дать второй шанс стареньким машинкам на базе Pentium: кластер выжмет из него все и в то же время это сократит время решения твое задачи. Задачи могут быть разными: от нахождения значений криволинейного интеграла и подбора паролей до моделирования физических процессов - все в твоих руках.

Теория

Сначала нужно вообще разобраться что же такое кластер. Как ты догадался, сейчас пойдет сухая теория - но без нее нельзя. Я постараюсь, чтобы тебе было интересно на протяжении всей этой статьи.

Как правило, кластер состоит из узлов (отдельных компьютеров) и объединяющей их сети. Я не зануда, но для общего развития, определение кластера все-таки приведу. Кластер - это совокупность узлов (серверов, рабочих станций), накопителей, которые решают одну задачу, представляются как одна система и управляются как одна система.

Кластеры бывают трех типов: отказоустойчивые, балансировочные и высокопроизводительные. Поговорим вкратце о каждом из них.

Первый тип кластера используется для обеспечения отказоустойчивости какой-то системы, например, сервера. Для такого кластера, в принципе, достаточно 2-3 машины. Представь себе корпоративный сервер баз данных. Происходит сбой в каком-то модуле сервера и сервер нужно перезагрузить. Серьезные серверы загружаются не так, как обычные компьютеры – для его загрузки нужно от трех до пяти-семи минут. Неужели все пользователи сети будут ждать, пока сервер будет перезагружен? Обычно – да. Но если у нас будет отказоустойчивый кластер, то его функции будет выполнять второй узел кластера, а если и с ним что-то случится – тогда за дело возьмется третий и т.д. Думаю, идея отказоустойчивого кластера ясна.

Балансировочный кластер используется для равномерного распределения загрузки на все узлы кластера. Запусти xload или top: твой компьютер большую часть времени просто простаивает. Точно такая же ситуация и остальными компьютера в твоей сети. Так почему бы не использовать это драгоценное процессорное время в более полезных целях, например, для компилирования новой версии ядра? Ведь при компилировании ядра процессор загружен полностью, и работать с системой можно, но не очень приятно. А вот если у нас есть балансировочный кластер, то загрузка будет равномерно распределяться на все узлы кластера. Во-первых, процесс компиляции завершится намного быстрее, благодаря механизму миграции процессов (части твоего процесса будут выполняться на разных компьютерах), а во-вторых, пользователи этого даже и не заметят. А если у тебя выделенные под кластер компьютеры (за ними никто не работает и они предназначены только для кластера), то это вообще отлично! Кстати, балансировочный кластер также может использоваться в качестве отказоустойчивого кластера, то есть выполнять две функции. Если же привести пример с сервером баз данных, то балансировочный кластер сначала выберет наименее загруженную машину, а только затем перенаправит к ней запрос пользователя.

Высокопроизводительные кластеры используются научно-исследовательскими организациями и центрами обработки информации, которые нуждаются в большой скорости обработки информации. Организация таких кластеров – довольно дорогое удовольствие, поэтому мы их рассматривать не будем. Ради справедливости, нужно отметить, что такой кластер, несмотря на свою стоимость, все же дешевле суперкомпьютера, приобретение которого не под силу тем же центрам обработки информации.

Надоела теория? Осталось еще чуть-чуть: поговорим о кластерных технологиях – это не займет много времени, а потом сразу переходим к созданию собственного кластера. Существует несколько технологий программно-аппаратных реализаций кластера: (N)UMA, DSM, PVM, MPI.

Первая технология подразумевает использование разделяемого доступа, в которой выполняются процессы узлов кластера. В ядре Linux есть поддержка NUMA, которая позволяет получать доступ к разным областям памяти. Технология DSM чем-то похожа на UMA: она тоже используется распределяемую память, но в отличие от UMA, DSM реализована, как в программном, так и в аппаратном виде. Технология MPI – это спецификация библиотеки передачи сообщений. PVM – это родственник MPI, используемый при создании Beowulf-кластеров. Преимущество PVM заключается в том, что PVM запускается как пользовательская программа и не требует внесения изменений в ядро Linux. Любой пользователь может запустить PVM. О PVM можно прочитать в моей статье на этом сайте.

Проект OpenMosix

Программа openMosix позволяет превратить твой компьютер под управлением Linux в настоящий кластер. Ясно, что нужен хотя бы еще один компьютер. Как ты догадался, если есть openMosix, то где-то должен быть и обыкновенный Mosix. Да, он есть, но практически все бывшие пользователи (если точно 97%) проекта Mosix уже давно перешли на openMosix. И тут дело не в каких-то функциональных преимуществах, а в лицензии. Первоначально Mosix был обыкновенной программой для BSD. Сейчас openMosix – это патч для ядра Linux. openMosix позволяет с минимальными временными затратами создать балансировочный кластер.

Зачем тебе нужен openMosix? Путь в твоей сети есть три компьютера: Pentium 233 MMX, Duron 1200 и Athlon XP 2000+. Ты работаешь за самым медленным компьютером – Pentium 233. Тебе нужно преобразовать файл из формата WAV в формат MP3. Ты запускаешь кодек, а дальше в работу включается openMosix. Он смотрит, какой компьютер является самым мощным – это Athlon XP, за ним – Duron 1200. Но Athlon – более загружен, чем Duron 1200, поэтому твой процесс (преобразующий WAV в OGG) мигрирует на Duron 1200. Несмотря на то, что этот компьютер менее мощный, чем Athlon, но в силу его загруженности твой процесс будет быстрее выполнен на менее мощном, но зато почти свободном компьютере Duron. Позже, если ситуация изменится, твой процесс перекочует на Athlon XP. Думаю, основной принцип работы openMosix понятен.

Как все мы знаем, у каждого процесса есть свой PID (Process ID). При работе с openMosix у каждого процесса будет еще один атрибут – UHN (Unique Home Node) – уникальный домашний узел. При миграции процессов процесс разбивается на две части: системную и пользовательскую. Системная всегда остается на UHN – домашнем узле, на котором процесс был изначально запущен, а пользовательская часть может кочевать по всей сети.

Что еще примечательного в openMosix? Его файловая система oMFS! Она позволяет напрямую обращаться к файлам любого узла кластера, причем делается это максимально прозрачно. Например, тебе нужно обратиться к каталогу /home на третьем компьютере - /mfs/3/home – и все!

К остальным преимуществам openMosix следует отнести простоту установки – он не требует никаких дополнительных пакетов, а также тебе не нужно переписывать твои приложения (как в случае с PVM).

Необходимое железо

Для организации кластера тебе нужно минимум два компьютера, оснащенных сетевыми карточками и один 100 Мбит-ный коммутатор (switch). Не нужно экономить – покупай именно коммутатор, тем более что цены довольно низки – 5-ти портовый коммутатор стоит около 20 баксов, а 8-ми портовый – около до 40. Для организации домашнего кластера 5-8 портов вполне достаточно – ведь тут главное не switch, а компьютеры, причем каждый стоит намного больше, чем switch. А теперь о них самих, о компьютерах. Если тебе нужно просто проверить, как работает openMosix, тебе хватит несколько самых обыкновенных компьютеров под управлением Linux, размещенный или у тебя дома или в офисе. Если же ты собираешь настоящий кластер, тем более хочешь получить немного $$$ за творение рук своих, тогда тебе придется немного потратиться. Во-первых, тебе нужна одна (для начала) 19" стойка. Во-вторых, корпуса компьютеров должны быть не обыкновенными, а предназначенными для установки в эту стойку. Сейчас напугаю тебя ценами. Хорошая стойка стоит довольно много. Например, стойка NetBAY42 Rack Standard стоит $1995 (http://network.pricehouse.ru/goods.154.3605.html). Конечно, именно такая стойка тебе, скорее всего, не нужна, поэтому можно ограничится "бюджетной" стойкой, которая стоит в пределах $250-500. Корпус с 300W-ым БП для постановки в 19"-ую стойку стоит от 140 до 240 долларов – если поискать, можно найти и дешевле. Вот теперь считаем: стойка – 500, 5 корпусов – 140х5 = 700. К этой сумме нужно добавить стоимость железа узлов кластера. Хороший системник стоит около 400 вечнозеленых единиц. Отнимем отсюда 30 (стоимость обыкновенного корпуса) и получим 370. Итого: 370x5=1850. Получим ориентировочную стоимость кластера 3100 (вместе с коммутатором). Что делать, если у тебя денег мало, а кластер нужен. Можно попытаться изготовить стойку самостоятельно или, в крайнем случае, вообще отказаться от нее, а компьютеры ставить друг на друга (по два). От покупки серверных корпусов отказываться не нужно – рано или поздно все равно придется покупать стойку. Когда стойка будет приобретена, все что останется сделать – установить в нее компьютеры. Что же касается железа узлов кластеров, то можно найти б/у-шные комплекты: CPU+MB (video int)+RAM+HDD. Хватит Celeron 600-700Mhz, 128 MB, 10-20 GB HDD. Один такой комплект будет стоить около 100$. Стоимость такого кластера составит 700 (корпуса) + 500 (железо) + 50 (коммутатор). Мелкие расходы (витая пара и т.д.) я не считал. Конечно, тебе еще понадобится один монитор для первоначальной настройки узлов кластера, но тебе не придется его покупать – он у тебя уже есть. Можно купить еще один комплект клавиатура+мышка, но это уже нюансы (про коврик не забудьте! :-))

Установка openMosix.

Можно пойти двумя путями: более сложным и более простым. Остановимся на втором. Как я уже говорил, openMosix – это патч для ядра. Соответственно, тебе нужно пропатчить ядро, а потом уже откомпилировать его (собственно, это и есть первый путь). Это занимает довольно много времени. Намного проще (если у тебя RH-совместимая система) скачать уже откомпилированную версию ядра с поддержкой openMosix. Заходим на сайт rpmfind.net и находим нужную нам версию ядра. Затем как обычно – скачиваем rpm-пакет и устанавливаем его. Как устанавливать ядро, надеюсь, ты знаешь, потому что подробно на этом вопросе останавливаться не будем. И еще: если у тебя двухпроцессорные узлы, тебе понадобится SMP-ядро с поддержкой opnMosix, его можно найти с помощью сайта rpmfind.net. После перезагрузки на новом ядре openMosix-узел готов к работе.

Кроме пакета openmosix-kernel тебе еще будет нужен пакет с пользовательскими утилитами – openmosix-tools. Пользовательские утилиты сделают работу с кластером более эффективной: они позволяют запускать/останавливать демон миграции, демон файловой системы, позволяют задавать конкретный узел, на который должен мигрировать процесс (по твоему усмотрению, а не автоматически).

Если уточнить, то установка openMosix сводится к выполнению одной команды:

rpm -Uvh openmosix-kernel-2.4.20-openmosix2.i686.rpm openmosix-tools-0.2.4-1.i386.rpm

Настраиваем кластер

Настал кульминационный момент – сейчас мы запустим кластер. Для начала нужно создать файл /etc/openmosix.map и скопировать его на все узлы нашего кластера. Файл имеет такой формат:

openMosix_ID Name|IP Диапазон

openMosix-ID – это уникальный ID узла кластера. Второе поле – это имя или IP-адрес (рекомендую использовать IP) узла, а последнее поле – это диапазон адреса. Сейчас поясню. Пусть у нас есть пять узлов кластера, тогда файл /etc/openmosix.map будет выглядеть так:


1 	192.168.1.1	1 
2 	192.168.1.2	1
3 	192.168.1.3	1
4 	192.168.1.4	1
5 	192.168.1.5	1

Если IP-адреса узлов следуют по порядку, эти пять строк аналогичны одной строке:

1 192.168.1.5 5

Все, конфигурация завершена, теперь на каждом узле кластера нужно запустить openMosix командой:

setpe -w -f /etc/openmosix.map

Запуск, останов и перезапуск openmosix также можно производить с помощью команд:


/etc/init.d/openmosix stop
/etc/init.d/openmosix start
/etc/init.d/openmosix restart

Если ты при запуске увидишь ошибку:


[root@dhsilabs root]# /etc/init.d/openmosix start
Initializing openMosix...
setpe: the supplied table is well-formatted,
but my IP address (127.0.0.1) is not there!

то это означает, что твоя машина не перечислена в /etc/hosts с тем же IP-адресом, что и в файле opemosix.map. Пусть твоя машина называется dhsilabs.localhost.ru, ее IP-адрес 192.168.1.1. Чтобы у тебя было меньше проблем при старте openMosix, отредактируй свой /etc/hosts следующим образом:


# твой компьютер
192.168.1.1 dhsilabs.localhost.ru
127.0.0.1.1 localhost

# узлы кластера
192.168.1.2 node2.localhost.ru
192.168.1.3 node3.localhost.ru
192.168.1.4 node4.localhost.ru
192.168.1.5 node5.localhost.ru

Теперь будет все нормально. Просмотреть состояние openMosix можно с помощью параметра status сценария openmosix


[root@inspon root]# /etc/init.d/openmosix start
Initializing openMosix...
[root@inspon root]# /etc/init.d/openmosix status
This is openMosix node #1
Network protocol: 2 (AF_INET)
openMosix range 1-1 begins at 192.168.1.1
openMosix range 2-2 begins at 192.168.1.2
Total configured: 2

Файловая система oMFS

Для того чтобы у тебя заработала oMFS, включи опцию CONFIG_MOSIX_FS в своем ядре. Если ты не компилировал ядро самостоятельно, а использовал готовый RPM-пакет, беспокоиться нечего: oMFS уже поддерживается. В файл /etc/fstab нужно добавить строку:

mfs_mnt /mfs mfs dfsa=1 0 0

DFSA (Direct File System Access) – файловая система прямого доступа, позволяющая получить доступ ко всем локальным и удаленным файловым системам узлов кластера. Все, теперь ты можешь получить доступ к файловой системе любого узла с помощью синтаксиса:

/mfs//

Например, получить доступ к каталогу /usr узла 3 можно так:

ls /mfs/3/usr

Из файловой системы MFS исключаются: файловая система /proc и все файлы, которые не являются регулярными файлами, каталогами или символическими ссылками, например, исключаются файлы устройств. Кроме каталогов /mfs/1, /mfs/2/ и т.д. в каталоге /mfs ты найдешь:

Кластер настроен…

Все, кластер работает. Что делать дальше? Можно поэкспериментировать и настроить демон omdiscd – тебе больше не придется редактировать openmosix.map, поскольку демон omdiscd будет заниматься автоматическим обнаружением узлов кластера. Использование этого демона имеет смысл, когда у тебя много узлов и они постоянно обновляются (то есть ты постоянно добавляешь узлы в кластер и удаляешь их). Как настроить этот демон ты узнаешь, если прочитаешь openMosix HOWTO. Все твои вопросы рад буду выслушать по адресу dhsilabs at mail.ru


Cчетчик Linux coutner
Hosted by uCoz