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, например:
Также необходимо прописать в /etc/hosts.equiv именна узлов, которым будет разрешенн удаленный доступ. Для примера выше, этот файл будет выглядеть следующим образом:
Думаю с этим проблем не должно возникнуть.
Так как сеть у нас стабильна и статична, то я переписал /etc/rc.d/rc.inet1, упростив его до безобразия:
Еще один момент, кластер должен запускаться с права пользователя, на root'а он сругается, посему создаем для этих целей специального юзера. Домашнюю директорию вновь созданного юзера надо расшарить по NFS, сотвественно дописываем в /etc/exports следующую строчку:
Ну и запускаем/перезапускаем NFS:
(По умолчанию в слаке NFS не запущен и скрипт запуска не имеет атрибута исполнения, поправляется командой #chmod +x /etc/rc.d/rc.nfsd)
Для работы LAM/MPI библиотек необходима удаленная консоль, для чего раскоментируем в файле /etc/inetd следующие строчки:
И сотвественно перезагружаем inatd:
Теперь поколдуем с ssh. Для нормальной работы кластера и соблюдения всех мер предосторожности, настроим безпарольный доступ для всех узлов сети:
Для работы с 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. Хочу отметить, что имя этого файла во многих источниках указанно по разному как и путь у нему, очень сильно зависит от версии библиотек. Сам файл прост, и содержит список узлов, задействованных в кластере, так например для всего сказанного выше, он будет имет следующий вид:
Одна строчка - один узел. В описании узла "n01" в примере был использован модификатор ":2". Это означает, что в качестве четвертого узла используется двухпроцессорная (SMP) машина. Этот файл должен быть одинаков на всех узлах.
Ну вот собственно и все. В итоге мы получаем вычислительный кластер распараллеливающий задачу на n-ое количество узлов.
Ну и на последок пара команд по управлению кластером.
Запуск кластера:
Просмотреть список запущенных процессом можно следующей командой:
Компилирование и установка программ написанных под кластер осуществляется командами:
Запуск откомпилированнх приложений осуществляется командой
Останавливается кластер командой lamhalt.
P.S.: На сегодняшний день проект LAM/MPI закрылся, его наследником является Open-MPI. Подробнее о использованной в данной статье технологии MPI пожно прочесть на википедии.
P.P.S.: Вроде ни че не забыл. Если что, извеняйте, давно было, писал по памяти и черновикам=).
Хочу сразу сказать, что матерял не свежий. реализовывал давно и по молодости лет.
Сначала немного лирики, в которой опишу как пришли к окончательному варианту архитектуры кластера.
Дело было вечером, делать было нечего и я с радостью принял предложение одного знакомого помочь ему с настройкой вычислительного кластера. Как раз в тот момент попалась под руку статья в журнале "Системный администратор" за какой-то последний месяц 2007 года. В статье подробно и не сложно был описан процесс поднятия бездискового вычислительного кластера на базе Red Hat 5 Enterprise. Сказано-сделано, ставлю свеже-выкачанный CentOS как точную копию описанной в статье красной шапки и... Не тут то было(((. Вроде и все то и менюшки в гуе те, но образ для загрузки системы по сети не создается. Какие ошибки выдавал CentOS не вспомню, дело было года 2 назад. Пришли к решению использовать Slackware 12, последний на тот момент релиз. По сети слака бойко грузилась, все четко. Помог how-to самого Патрика с описанием працесса установки оси через сеть, но тут возник другой вопрос - как подгрузить нужные мне библиотеки для кластера по сети, и плюс ко всему, у меня не получалось собрать ядро для рабочей системы вместо того, что использовался для инсталяции, были косяки с initrd. Покумекав немного решили отказаться от бездискового варианта, больно молоды мы были для него=), не опытны=))). Так же отказались от dhcp/dns в силу известности точного количества используемых узлов.
Все настройки на всех задействованных машинах идентичны, отличия только в сетевых именах и IP-адресах. Соотвественно имя конкретного узла прописываем в /etc/HOSTNAME, например: n01.cluster. Для маршрутизации надо подправить /etc/hosts, например:
1 2 3 |
127.0.0.1 localhost |
Также необходимо прописать в /etc/hosts.equiv именна узлов, которым будет разрешенн удаленный доступ. Для примера выше, этот файл будет выглядеть следующим образом:
1 2 3 |
localhost |
Думаю с этим проблем не должно возникнуть.
Так как сеть у нас стабильна и статична, то я переписал /etc/rc.d/rc.inet1, упростив его до безобразия:
1 2 3 4 5 |
#! /bin/bash |
Еще один момент, кластер должен запускаться с права пользователя, на root'а он сругается, посему создаем для этих целей специального юзера. Домашнюю директорию вновь созданного юзера надо расшарить по NFS, сотвественно дописываем в /etc/exports следующую строчку:
/home/USERNAME 192.168.1.0/24(ro,sync,no_root_squash)
Ну и запускаем/перезапускаем NFS:
#/etc/rc.d/rc.nfsd start
(По умолчанию в слаке NFS не запущен и скрипт запуска не имеет атрибута исполнения, поправляется командой #chmod +x /etc/rc.d/rc.nfsd)
Для работы LAM/MPI библиотек необходима удаленная консоль, для чего раскоментируем в файле /etc/inetd следующие строчки:
1 2 |
shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L |
И сотвественно перезагружаем inatd:
#/etc/rc.d/rc.inetd restart
Теперь поколдуем с 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 2 3 |
server |
Одна строчка - один узел. В описании узла "n01" в примере был использован модификатор ":2". Это означает, что в качестве четвертого узла используется двухпроцессорная (SMP) машина. Этот файл должен быть одинаков на всех узлах.
Ну вот собственно и все. В итоге мы получаем вычислительный кластер распараллеливающий задачу на n-ое количество узлов.
Ну и на последок пара команд по управлению кластером.
Запуск кластера:
1 2 3 4 5 6 |
$lamboot -v lamhosts |
Просмотреть список запущенных процессом можно следующей командой:
1 2 3 4 5 |
$ mpitask |
Компилирование и установка программ написанных под кластер осуществляется командами:
$ mpicc -o foo foo.c #для программ написанных на си
Запуск откомпилированнх приложений осуществляется командой
1 2 3 |
$ mpirun -v -np 2 foo |
Останавливается кластер командой lamhalt.
P.S.: На сегодняшний день проект LAM/MPI закрылся, его наследником является Open-MPI. Подробнее о использованной в данной статье технологии MPI пожно прочесть на википедии.
P.P.S.: Вроде ни че не забыл. Если что, извеняйте, давно было, писал по памяти и черновикам=).