Вычислительный кластер под FreeBSD

Перевод статьи "Installing Lam-mpi Cluster on FreeBSD How to", описывающей, как превратить сеть компьютеров под управлением FreeBSD в вычислительный кластер, использующий MPI

[Soup Nazi (soup4you2@bsdhound.com). Перевод Михаил Сгибнев (mixa@dreamcatcher.ru)]

Вычислительный кластер под FreeBSD

Кластер используется для обьединения двух и более компьютеров, работающих как одно целое. Кластеры могут использоваться, чтобы увеличить надежность и/или доступные вычилительные мощности. Кластер Beowulf - группа обычно идентичных компьютеров PC, которые являются сетевыми,обьединены в локальную сеть TCP/IP, и используют общие разделяемые библиотеки и программы. Теперь прежде, чем буден нам счастье, важно знать, что приложения должны быть написаны для mpicc чтобы полностью использовать кластерный ресурс. Вы можете консультироваться с вебсайтом lam для получения информации и обучающих программ на эту тему. Итак, начнем.

Команды, выполняемые на сервере будут оранжевые
Команды, выполняемые на ноде кластера будут зеленые
Команды, выполняемые на всех компьютерах будут синие


Первым, чем Вы должны озаботиться - каждая нода кластера должна иметь DNS имя. Можно не использовать DNS, а пользоваться /etc/hosts.
Здесь не будет рассматриваться конфигурация BIND.
Затем Ваш сервер должен быть сконфигурирован как NFS сервер:

($:~)=> vi /etc/rc.conf

nfs_server_flags="-u -t -n 4 -h 10.0.5.100" #Replace with your internal ip address.
mountd_enable="YES"
mountd_flags="-l -r"
rpcbind_enable="YES"
rpcbind_flags="-l -h 10.0.5.100" #Replace with your internal ip address.
nfs_server_enable="YES"

Затем конфигурируем ноды как NFS клиенты:

($:~)=> vi /etc/rc.conf

nfs_client_enable="YES"

Следующим этапом экспортируем /home:

($:~)=> vi /etc/exports

/home -maproot=0:0 -network 10.0.5.0 -mask 255.255.255.0

теперь клиенты должны примонтировать его:

($:~)=> vi /etc/fstab

10.0.5.100:/home /home nfs rw 0 0

Удостоверьтесь, что NFS работает должным образом перед продолжением.
Следующим этапом устанавливаем lam-mpi. Это должно быть сделано на всех компьютерах кластера.

($:~)=> cd /usr/ports/net/lam
($:~)=> make install clean

Устанавливаем вспомогательное программное обеспечение, которое поможет нам в мониторинге кластера.

($:~)=> cd /usr/ports/sysutils/ganglia-monitor-core
($:~)=> make install clean

На сервере ставим web-интерфейс к ganglia. HTTP сервер должен быть установлен с поддержкой PHP и поддержкой графической библиотеки GD.

($:~)=> cd /usr/ports/sysutils/ganglia-webfrontend
($:~)=> make install clean

Теперь конфигурирование.

($:~)=> cp /usr/local/etc/gmond.conf.sample /usr/local/etc/gmond.conf

($:~)=> vi /etc/gmond.conf

Есть два важных параметра, остальные меняйте по Вашему разумению:

Сперва установите имя кластера:

name "ClusterName"

Затем интерфейс, используемый кластером:

mcast_if xl0

($:~)=> cp /usr/local/etc/gmetad.conf.sample /usr/local/etc/gmetad.conf

Теперь проверьте работу мониторинга кластера. Должна быть запись в web-интерфейсе для каждого компьютера кластера.

data_source "ClusterName"10 node1.yourdomain.com:8649 node2.yourdomain.com:8649

Удостоверьтесь, что ClusterName соответствует названию в gmond.conf файле конфигурации. Значение 10 - интервал опроса компьютеров в кластере.
Теперь, когда мониторинг настроен, приступим к настройке самого кластера.

($:~)=> vi /usr/local/etc/lam-bhost.def

Конфигурируется это легко. Запишите полное имя каждой ноды.

Node1.yourdomain.com
Node2.yourdomain.com

Попробуем запустить все это дело...

($:~)=> mv /usr/local/etc/rc.d/gmetad.sh.sample /usr/local/etc/rc.d/gmetad.sh
($:~)=> mv /usr/local/etc/rc.d/gmond.sh.sample /usr/local/etc/rc.d/gmond.sh
($:~)=> /usr/local/etc/rc.d/gmetad.sh start
($:~)=> /usr/local/etc/rc.d/gmond.sh start

На сервере запускаем из под непривилегированного пользователя:

($:~)=> lambood -dv

Вы должны увидеть примерно такую картину:

    lamboot: boot schema file: /usr/local/etc/lam-bhost.def
    lamboot: opening hostfile /usr/local/etc/lam-bhost.def
    lamboot: found the following hosts:
    lamboot: n0 node1.yourdomain.com
    lamboot: n1 node2.yourdomain.com
    lamboot: resolved hosts:
    lamboot: n0 node1.yourdomain.com --> 10.0.5.100
    lamboot: n1 node2.yourdomain.com --> 10.0.5.105
    lamboot: found 2 host node(s)
    lamboot: origin node is 0 (node1.yourdomain.com)
    Executing hboot on n0 (node2.yourdomain.com - 1 CPU)...
    lamboot: attempting to execute "hboot -t -c lam-conf.lam -d -v -I " -H 10.0.5.100 -P 57552 -n 0 -o 0 ""
    hboot: process schema = "/usr/local/etc/lam-conf.lam"
    hboot: found /usr/local/bin/lamd
    hboot: performing tkill
    hboot: tkill
    hboot: booting...
    hboot: fork /usr/local/bin/lamd
    [1] 44660 lamd -H 10.0.5.100 -P 57552 -n 0 -o 0 -d
    hboot: attempting to execute
    Executing hboot on n1 (node2.yourdomain.com - 1 CPU)...
    lamboot: attempting to execute "/usr/bin/ssh node2.yourdomain.com -n echo $SHELL"
    lamboot: got remote shell /usr/local/bin/bash
    lamboot: attempting to execute "/usr/bin/ssh node2.yourdomain.com -n hboot -t -c lam-conf.lam -d -v -s -I "-H 10.0.5.100 -P 57552 -n 1 -o 0 ""
    hboot: process schema = "/usr/local/etc/lam-conf.lam"
    hboot: found /usr/local/bin/lamd
    hboot: performing tkill
    hboot: tkill
    hboot: booting...
    hboot: fork /usr/local/bin/lamd
    [1] 53214 lamd -H 10.0.5.100 -P 57552 -n 1 -o 0 -d
    topology done
    lamboot completed successfully

И это хорошо... Добавляем клиентов:

($:~)=> lamnodes
n0 node1.yourdomain.com:1
n1 node2.yourdomain.com:1

Поздравляю! Вы кластеризованы :-) Вы можете открыть браузер и просмотреть /usr/local/www/data-dist/ganglia и окончательно донастроить кластер.

Теперь что с этим кластером делать?

Некоторые команды, которые я использую:

($:~)=> tping N
1 byte from 1 remote node and 1 local node: 0.002 secs
1 byte from 1 remote node and 1 local node: 0.001 secs
1 byte from 1 remote node and 1 local node: 0.001 secs

Tping команда - то же самое как утилита ping, но это используется, чтобы прозвонить узлы в кластере. N (верхний регистр) означает все узлы в кластере. Если бы я только хотел прозвонить node2.yourdomain.com, то я использовал бы lamnodes команду, чтобы узнать, что число, связанное с тем узлом тогда выполняет tping n1 (n1 является node2.yourdomain.com)
Другая возможность - я могу находиться на одной машине и говорить кластеру запускать приложения на других машинах и делать вывод на монитор.

Пропробуем. ($:~)=> lamexec N echo "hi"
hi
hi

Пинги, это конечно, дело хорошее, но не совсем то, для чего нужен кластер. Предлагаю заняться самостоятельным изучением lamexec, для оценки всех его возможностей.

Оригинал: http://www.bsdhound.com/newsread.php?newsid=205

Статья взята с сайта DreamCatcher.ru.

[ опубликовано 20/02/2004 ]

Soup Nazi (soup4you2@bsdhound.com). Перевод Михаил Сгибнев (mixa@dreamcatcher.ru) - Вычислительный кластер под FreeBSD   Версия для печати