Видео ролики бесплатно онлайн

Смотреть 365 видео

Официальный сайт interaktiveboard 24/7/365

Смотреть видео бесплатно

31.01.10 22:51 al1e

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
2
3
        127.0.0.1       localhost
        192.168.1.1     n01.cluster    
        192.168.1.2     n02.cluster


Также необходимо прописать в /etc/hosts.equiv именна узлов, которым будет разрешенн удаленный доступ. Для примера выше, этот файл будет выглядеть следующим образом:

1
2
3
        localhost
        n01.cluster
        n02.cluster


Думаю с этим проблем не должно возникнуть.

Так как сеть у нас стабильна и статична, то я переписал /etc/rc.d/rc.inet1, упростив его до безобразия:

1
2
3
4
5
        #! /bin/bash
        /sbin/ifconfig lo 127.0.0.1  
        /sbin/ifconfig eth0 192.168.1.1
        /sbin/route add -net 127.0.0.0/8 lo
        /sbin/route add default gw 192.168.1.1


Еще один момент, кластер должен запускаться с права пользователя, на 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
        login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind

И сотвественно перезагружаем inatd:

        #/etc/rc.d/rc.inetd restart


Теперь поколдуем с ssh. Для нормальной работы кластера и соблюдения всех мер предосторожности, настроим безпарольный доступ для всех узлов сети:
  1. Осуществляем вход с консоли кластера: ssh user1@server
  2. Переходим в каталог ssh: cd ~/.ssh
  3. Генерируем rsa-ключи: ssh-keygen -t rsa
  4. На вопрос задать имя файла жмем Enter - остается имя по умолчанию id_rsa.
  5. На просьбу задать пароль жмем Enter два раза (второй раз для проверки).
  6. Копируем публичный ключ на узел кластера: scp id_rsa.pub user1@n01:~/.ssh
  7. Логинимся к узлу node1: ssh user1@n01
  8. Переходим в каталог ssh: cd ~/.ssh
  9. Копируем публичный ключ: cat id_rsa.pub >> authorized_keys2
  10. Отключаемся от узла node1
  11. Повторяем пункты 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
        192.168.1.3


Одна строчка - один узел. В описании узла "n01" в примере был использован модификатор ":2". Это означает, что в качестве четвертого узла используется двухпроцессорная (SMP) машина. Этот файл должен быть одинаков на всех узлах.

Ну вот собственно и все. В итоге мы получаем вычислительный кластер распараллеливающий задачу на n-ое количество узлов.

Ну и на последок пара команд по управлению кластером.
Запуск кластера:

1
2
3
4
5
6
        $lamboot -v lamhosts

        LAM 7.1.4 - Indiana University

        Executing hboot on n0 (node1.cluster.example.com - 1 CPU)...
        Executing hboot on n1 (node2.cluster.example.com - 1 CPU)...


Просмотреть список запущенных процессом можно следующей командой:

1
2
3
4
5
        $ mpitask
        TASK (G/L)    FUNCTION      PEER|ROOT  TAG    COMM   COUNT   DATATYPE
        0/0 master    Recv          ANY        ANY    WORLD  1       INT
        1 slave       <running>
        2 slave       <running>


Компилирование и установка программ написанных под кластер осуществляется командами:
        $ mpicc -o foo foo.c            #для программ написанных на си


Запуск откомпилированнх приложений осуществляется командой
1
2
3
        $ mpirun -v -np 2 foo
        2445 foo running on n0 (o)
        361 foo running on n1


Останавливается кластер командой lamhalt.

P.S.: На сегодняшний день проект LAM/MPI закрылся, его наследником является Open-MPI. Подробнее о использованной в данной статье технологии MPI пожно прочесть на википедии.

P.P.S.: Вроде ни че не забыл. Если что, извеняйте, давно было, писал по памяти и черновикам=).



digiwhite 01.02.10 06:34 # +0
Кластер (пусть и не большой) был я так понимаю использован как число дробилка?
digiwhite 01.02.10 06:39 # +0
Мда, утро, простите :)
al1e 01.02.10 09:31 # +0
кластер вообще собирался как макет, какие-то реальные задачи не расчитывались, только примеры из комплекта шедшие с библиотеками.
exelens 01.02.10 08:04 # +0
Отлично!
Спасибо!
Username 01.02.10 16:06 # +0
в мемориз

Лучшие блоги (все 105)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2088 из 158 городов)
Топ пользователей Топ блогов
В сети: MaxPv, TiGR, betruger72

Новенькие: residum, ksn135, lestat, warzon, Extender
welinux.ru

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн