Ищите

Вычислительный кластер под FreeBSD (cluster freebsd nfs)

Ключевые слова: cluster, freebsd, nfs, (найти похожие документы)

From: Сгибнев Михаил <http://www.dreamcatcher.ru>;
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Вычислительный кластер под FreeBSD

Оригинал: http://www.dreamcatcher.ru/docs/cluster.html

   Вычислительный кластер под 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