= bubbalog =Дневникът на моето стадо

Beowulf клъстър с MPICH2 под FreeBSD 8.0

Saturday 06.02.2010 17:25 EEST · Публикувано от в = Cluster =, = FreeBSD =, = Parallel =

Пътеводител: http://alhabsi.net/freebsd/beowulf.xml

Sol-e-naps е проект за изчислителен клъстер от тип Beowulf изграден на базата на FreeBSD 8.0. Инициалния проект започва на 15.01.2010 като симулация на виртуални машини и в последствие премина в реален (засега твърде малък) вид. Използва се външен DNS сървър, за да се улесни разширението на клъстъра.

Карта на Sol-e-naps

host IP GW DNS Значение
sole00.local 192.168.1.200 192.168.1.1 192.168.1.2 Head node
sole01.local 192.168.1.201 192.168.1.2 node 1
sole02.local 192.168.1.202 192.168.1.2 node 2
sole03.local 192.168.1.203 192.168.1.2 node 3
sole04.local 192.168.1.204 192.168.1.2 node 4
sole05.local 192.168.1.205 192.168.1.2 node 5
sole06.local 192.168.1.206 192.168.1.2 node 6

1. Инсталация на Head Node

1-1. Инсталация на FreeBSD – Инсталирайте системата, като при опцията за дистрибуция изберете user distribution

1-2. Настройка на мрежа – За мрежовите настройки се използва таблицата

1-3. Конфигурация на root парола и потребители – Тези настройки трябва да са еднакви на Head node и на изчислителните нодове! Това е нужно в последствие за свободната и безпроблемна коуникация на всеки нод с всеки друг.

username:    user
pasword:    pass
group:    wheel
UID:    1001
shell:    csh

1-4. Допълнителни настройки – От мрежовите настройки включете

[x] NFS Server

редактира се /etc/exports – добавт се следните редове:

/usr/home/user -alldirs -network 192.168.1.0 -mask 255.255.255.0
/usr/local -alldirs -network 192.168.1.0 -mask 255.255.255.0

[x] SSH

1-5. редакция на /etc/ssh/sshd_config (Alt+F4 -> ee /etc/ssh/sshd_config): декоментират се следните редове:

#RSAAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys

1-6. reboot

1-7. логване като user – Следва малко донастройка на някои работи.

Редактира се .profiles и добавяне на

umask 077

генериране на “public/private key pairs” и копиране в нужната директория

% ssh-keygen -b 768 -f ~/.ssh/id_rsa -t rsa -N “”
% cd ~/.ssh
% cp id_rsa.pub authorized_keys
% chmod 644 ~/.ssh/authorized_keys
% chmod 755 ~/.ssh

1-8. Инсталация на MPICH2 (като root)

# cd /usr/ports/net/mpich2/
# make -DWITHOUT_JAVA install clean

След като се инсталира се логва като user  и се изпълнява следната команда, с която се гарантира, че файловете на MPICH2 ще са достъпни за всеки от изчислителните нодове

% cp -R /usr/local/mpich2/bin ~/

1-9. Редактира се .cshrc файла и в реда за PATH  прибавете $HOME.

С това инсталацията на Head node  е приключена.

2. Инсталация на изчислителните нодове.

Тя е еднаква за всички нодове. Моето решение е една инсталация, настройка, имидж на цялата система и донастройка на определени параметри при прибавян на всеки нов нод. Имено това е и описано тук като процес.

2-1. Инсталация на FreeBSD – minimal distribution

2-2. Конфгуриране на root парола и потребител – (виж 1-3!)

2-3. Настройка на мрежа – без GW, виж таблицата

2-4. Включване на NFS client и sshd

2-5. Рестарт

2-6. Редакция на /etc/fstab – добавяне на следните редове

sole00:/usr/home/sole    /usr/home/sole    nfs    rw    0    0
sole00:/usr/local    /usr/local    nfs    rw    0    0

2-7. Рестарт и тест на системата. Затова дали работи може да се използва един прост тест. Целта е да се изпълни от sole00 през ssh  коанда на изчислителния нод, а резултата да се въне на sole00

% ssh sole01 hostname

След завършване на инсталацията направете бекъп на цялата система. За да прибавите нов нод към клъстъра просто разгънете бекъпа на новия нод и сменете хостнейма и адреса на новия нод. Това става само (в момента на рестор от шела на LiveCD) чрез редакцията данните в /etc/rc.conf.

3. Настройка за работа на MPICH2

3-1. Логнете се като user и направете в хоум директорията файл .mpd.conf като прибавите сления ред:

secretword=lkdfjvhu

където секретната думичка може да бъде каквото си искате. Върнете прмишъна на този файл

% chmod 600 .mpd.conf

3-2. Направете в същата директория файл mpd.hosts който да съдържа имената на всички нодове по един на ред

sole00
sole01
sole02
sole03
sole04
sole05
sole06

Тъй като хоум директорията се монтира на всеки нод, всяко нещо което напавите в хоум директорията автоатично се приема от останалите нодове

3-3. Стартиране на mpd и lam процесите

% mpd &

3-4. Наметере порта, койо е определен за комуникация с командата

% mpdtrace -l

получава с резултат от сорта на

sole00.local_35412 (192.168.100.200)

където 35412 е търсения порт

3-5. Закачете всеки изчислителен нод към клъстъра като изпълните следната дистанционна команда към всеки изчислителен нода:

% ssh sole01 mpd -h sole00 -p 35412 &

3-6. Проверете дали нода е закачен за клъстъра

% mpdtrace

4. Тест за коректна работа [1]

За коректната работа на цялата система може да се използва една малка тестова програмка за изчисляване на пи (3.14), която идва заедно с още няколко такива примера при инсталирането на MPICH2

% cp /usr/local/mpich2/share/mpich2/examples_graphics/cpi.c /usr/home/user/cpi.c

копилирайте

%mpicc -O2 cpi.c -o cpi

и изпълнете. При коректна работа ще получите резултат подобен на това

%mpiexec 1111/cpi
Process 0 on sole00.local
pi is approximately 3.1416009869231254, Error is 0.0000083333333323
wall clock time = 0.022046
%

Ами това е за сега, забавлявайте се с новата играчка и следете бюлетина за разития от моя страна :)

* * * * *

[1] – Добавена редакция на 14.02.2010

5 коментара за “Beowulf клъстър с MPICH2 под FreeBSD 8.0”

  1. Даниел says:

    Бих ти предложил следната идея, която да направи конфигурацията по-смислена:

    Направи изчислителните машини бездискови. Нека зареждат операционната система от тази, която си нарекъл ‘head’.

    Плюсовете са, че не се налага да ги инсталираш и да ги настройваш. Да не говорим, че не се налага да ги синхронизираш като софтуер ако ти хрумне актуализация на нещо.

    За повече информация и примери /usr/share/examples/diskless/

  2. Да, обаче диколкото знам за бездисково буутване трябва да имам опция всяка мрежова карта да може да зарежда от мрежата… Другото което ми хрумва е на вски нод да има по едно CD и да зарежда от него, на флопи това нямам идея дали би могло да се събере. За съжаление нямам такива карти тук :(

    В изпълнението е, че единия изчислителен нод е инсталиан и конфигуриран и са му направени бекъпи на всички слайсове, ако се прибавя нов нод, само се разгъва бекъпа за няколко минути, редактира се rc.conf за мрежовия адрес и се пуска. После новия нод се описва в mpd.hosts и в DNS Forwarder-а (ползвам за целта dnasmasq), рстартира се DNS-a и всичко е ОК. За тая техника която имам толкова можах да измисля са сега… :)

  3. Даниел says:

    10-на лева е едно USB флашче. Кой знае колко бързо не ти е нужно. И все пак, по-добре е да се ограничиш само с началното зареждане от него — инак трябва да ги синхронизираш пак.

    Но дори и така е по-добра идея. Може да си направиш инсталационно флашче с всичкия нужен софтуер и настройките и да си го ‘инсталираш’ с dd.

    На флопи може да събереш кода за дистанционно зареждане. Преди време си бях направил цяла мрежа с “бездискови” графични станции, които зареждаха от флопи BSD/OS. Общо взето, ядро, ifconfig и mount.

    Но при наличие на няколко GB флаш от това упражнение няма смисъл.

  4. Това с флашките е добре. А след като зареди, мойе ли това флашче да се изтръгне, трабва ли още?

    Другия проблем е, че техниката с която се тествам е наистна стара като казвам, няма опция за бутване от флаш, все пак това е началото още и не ми се набутваше с пари за нещо което нямам акво да правя после… В бъдеще мисля да обновя парка, ама кога…

    Има ли някаква граница на броя машини които могат да заредят така ОС по мрежата от една единствена машина?

  5. Даниел says:

    Ограничение няма, а флашката може и да се изхитриш да я махаш, ако след зареждането нямаш нищо отворено от нея — примерно зареждаш само ядро, което след това бездисково зарежда от мрежата /root.

Остави коментар

Писането на кирилица е задължително!
Коментари, които не са на кирилица ще бъдат изтрити без предупреждение.
Всеки коментари съдържащи 1 или повече линка, ще бъдат публикувани след одобрение.