al1e 31.01.2010 22:51
How-to`s — Вычислительный кластер на базе Slackware и LAM/MPI
Статья "заказная", на написание сподвиг многоуважаемый digiwhite своим коментом.Хочу сразу сказать, что матерял не свежий. реализовывал давно и по молодости лет.
Сначала немного лирики, в которой опишу как пришли к окончательному варианту архитектуры кластера.
Дело было вечером, делать было нечего и я с радостью принял предложение одного знакомого помочь ему с настройкой вычислительного кластера. Как раз в тот момент попалась под руку статья в журнале "Системный администратор" за какой-то последний месяц 2007 года. В статье подробно и не сложно был описан процесс поднятия бездискового вычислительного кластера на базе Red Hat 5 Enterprise. Сказано-сделано, ставлю свеже-выкачанный CentOS как точную копию описанной в статье красной шапки и... Не тут то было(((. Вроде и все то и менюшки в гуе те, но образ для загрузки системы по сети не создается. Какие ошибки выдавал CentOS не вспомню, дело было года 2 назад. Пришли к решению использовать Slackware 12, последний на тот момент релиз. По сети слака бойко грузилась, все четко. Помог how-to самого Патрика с описанием працесса установки оси через сеть, но тут возник другой вопрос - как подгрузить нужные мне библиотеки для кластера по сети, и плюс ко всему, у меня не получалось собрать ядро для рабочей системы вместо того, что использовался для инсталяции, были косяки с initrd. Покумекав немного решили отказаться от бездискового варианта, больно молоды мы были для него=), не опытны=))). Так же отказались от dhcp/dns в силу известности точного количества используемых узлов.
Все настройки на всех задействованных машинах идентичны, отличия только в сетевых именах и IP-адресах. Соотвественно имя конкретного узла прописываем в /etc/HOSTNAME, например: n01.cluster. Для маршрутизации надо подправить /etc/hosts, например:
1 |
|
Также необходимо прописать в /etc/hosts.equiv именна узлов, которым будет разрешенн удаленный доступ. Для примера выше, этот файл будет выглядеть следующим образом:
1 |
|
Думаю с этим проблем не должно возникнуть.
Так как сеть у нас стабильна и статична, то я переписал /etc/rc.d/rc.inet1, упростив его до безобразия:
1 |
#! /bin/bash
|
Еще один момент, кластер должен запускаться с права пользователя, на root'а он сругается, посему создаем для этих целей специального юзера. Домашнюю директорию вновь созданного юзера надо расшарить по NFS, сотвественно дописываем в /etc/exports следующую строчку:
1 |
|
Ну и запускаем/перезапускаем NFS:
1 |
|
(По умолчанию в слаке NFS не запущен и скрипт запуска не имеет атрибута исполнения, поправляется командой #chmod +x /etc/rc.d/rc.nfsd)
Для работы LAM/MPI библиотек необходима удаленная консоль, для чего раскоментируем в файле /etc/inetd следующие строчки:
1 |
shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L
|
И сотвественно перезагружаем inatd:
1 |
|
Теперь поколдуем с ssh. Для нормальной работы кластера и соблюдения всех мер предосторожности, настроим безпарольный доступ для всех узлов сети:
Осуществляем вход с консоли кластера: ssh user1@serverПереходим в каталог ssh: cd ~/.sshГенерируем rsa-ключи: ssh-keygen -t rsaНа вопрос задать имя файла жмем Enter - остается имя по умолчанию id_rsa.На просьбу задать пароль жмем Enter два раза (второй раз для проверки).Копируем публичный ключ на узел кластера: scp id_rsa.pub user1@n01:~/.sshЛогинимся к узлу node1: ssh user1@n01Переходим в каталог ssh: cd ~/.ssh Копируем публичный ключ: cat id_rsa.pub >> authorized_keys2 Отключаемся от узла node1Повторяем пункты 6-10 для остальных узлов кластера (n02 ... nN)
Для работы с ssh должен быль запущен соответственно демон sshd, который запускается аналогично nfsd и inetd.
Теперь поставим и настроим LAM, для чего были скачаны и скомпилены последние на тот момент доступные исходники с сайта проекта. Сам процесс компиляции тривиален и сводится к ./configure&make;&make; install, единственное что необходимо учесть, это при выполнении ./configure задать параметры --prefix=/usr --with-rsh="/usr/bin/ssh -x", указав тем самым директорию установки и то, что в качестве средства межузловых коммуникаций будем использовать ssh в место rsh (путь соотвественно варьируется от дистрибутива и версии релиза).
Теперь про настройку самого кластера. Она проста до безобразия и сводится к редактированию файла usr/etc/lam-bhost.def. Хочу отметить, что имя этого файла во многих источниках указанно по разному как и путь у нему, очень сильно зависит от версии библиотек. Сам файл прост, и содержит список узлов, задействованных в кластере, так например для всего сказанного выше, он будет имет следующий вид:
1 |
|
Одна строчка - один узел. В описании узла "n01" в примере был использован модификатор ":2". Это означает, что в качестве четвертого узла используется двухпроцессорная (SMP) машина. Этот файл должен быть одинаков на всех узлах.
Ну вот собственно и все. В итоге мы получаем вычислительный кластер распараллеливающий задачу на n-ое количество узлов.
Ну и на последок пара команд по управлению кластером.
Запуск кластера:
1 |
$lamboot -v lamhosts
|
Просмотреть список запущенных процессом можно следующей командой:
1 |
$ mpitask
|
Компилирование и установка программ написанных под кластер осуществляется командами:
1 |
|
Запуск откомпилированнх приложений осуществляется командой
1 |
|
Останавливается кластер командой lamhalt.
P.S.: На сегодняшний день проект LAM/MPI закрылся, его наследником является Open-MPI. Подробнее о использованной в данной статье технологии MPI пожно прочесть на википедии.
P.P.S.: Вроде ни че не забыл. Если что, извеняйте, давно было, писал по памяти и черновикам=).
digiwhite 01.02.2010 06:34 #
+ 0 -
Кластер (пусть и не большой) был я так понимаю использован как число дробилка?
кластер вообще собирался как макет, какие-то реальные задачи не расчитывались, только примеры из комплекта шедшие с библиотеками.