Распределенные вычисления: Часть 3. Развертывание сервера распределенных вычислений

Развертывание и запуск собственного полноценного сервера распределенных вычислений на платформе BOINC

Евгений Ивашко, Сотрудник Института РАН, Институт прикладных математических исследований Карельского научного центра РАН.

Сотрудник Института прикладных математических исследований Карельского научного центра РАН. Имеет степень магистра математики.



02.11.2010

1. Введение

Первая статья этой серии (ищите ссылку на нее в разделе «Ресурсы», п. 1) была посвящена распределенным вычислениям по принципу «volunteer computing», в частности, платформе BOINC, приютившей большое количество проектов, имеющих широкую мировую известность. В прошлой статье (см. раздел «Ресурсы», п. 2) мы подробно разобрали архитектуру сервера BOINC. Вся эта информация пригодится нам для развертывания и запуска собственного полноценного сервера распределенных вычислений на платформе BOINC – этому и посвящена статья.

2. Подготовительные шаги

Перед тем как приступать к собственно установке требующегося программного обеспечения, необходимо выполнить ряд предварительных шагов. Прежде всего, под сервер должен быть отведен достаточно производительный компьютер. На сайте разработчиков BOINC указываются следующие требования:

«Компьютер должен иметь достаточно производительный процессор (например, двухъядерный Xeon или Opteron) и, как минимум, 2 ГБ оперативной памяти. Для проектов с высокой нагрузкой необходимо не менее 8 ГБ оперативной памяти и более производительный процессор.»

Для более или менее серьезных проектов, как и положено серверу, должны быть проведены мероприятия по повышению отказоустойчивости (подключение источника бесперебойного питания, настройка RAID, контроль и поддержание температурного режима и т.д.).

Удостоверившись в выполнении необходимых аппаратных требований – обеспечении достаточной производительности и хорошей отказоустойчивости, можно приступать к подготовке системного программного обеспечения.

На компьютере, выделенном вами в качестве сервера BOINC, должна быть установлена операционная система GNU/Linux (подойдет любой понравившийся вам дистрибутив). В системе должны присутствовать средства разработки (компилятор, компоновщик связей и т.д.), сервер баз данных и Web-сервер, а также некоторые дополнительные библиотеки и вспомогательные утилиты, которые можно устанавливать по мере возникновения необходимости. При написании этой статьи в качестве сервера использовался компьютер на основе двухъядерного процессора Intel Xeon 2.80 ГГц с 2 ГБ оперативной памяти. Аппаратные ресурсы управлялись OpenSUSE Linux 11.1.

Позаботьтесь о том, чтобы хорошо защитить свой сервер на программном уровне – необходимо своевременно устанавливать обновления безопасности, настроить межсетевой экран, отключить ненужные сетевые сервисы и т.д. Большую помощь в этом могут также оказать средства обеспечения мандатного контроля доступа AppArmor, TOMOYO Linux или даже SELinux.

Все стандартные рекомендации по обеспечению защищенности и отказоустойчивости аппаратных ресурсов и программной системы имеют особую важность при организации распределенных вычислений «volunteer computing», так как напрямую отражаются на популярности проекта. Если ваш сервер будет периодически «пропадать» или станет распространителем спама и руткитов, то вряд ли найдется много желающих отдавать ресурсы своих компьютеров такому проекту!

Теперь нужно установить необходимое для работы BOINC вспомогательное программное обеспечение. Для развертывания сервера понадобятся СУБД MySQL, Web-сервер Apache, интерпретаторы и стандартные библиотеки языков python и php. Объяснение такому разнообразию необходимых инструментов можно найти в прошлой статье – помните, там говорилось о том, что Web-сервер – это составная часть сервера BOINC, а база данных несет на себе огромную функциональность.

Кроме того, для получения и сборки исходного кода потребуются клиент системы управления версиями Subversion (svn), компилятор gcc и средства разработки из состава GNU Tools, а также открытый криптографический пакет OpenSSL и вспомогательная утилита pkg-config.

Установив вспомогательное программное обеспечение, создайте пользователя-администратора проекта BOINC, (например, boincadmin), от имени которого будут работать служебные скрипты сервера. Этот пользователь должен иметь возможность работать с базой данных, а также создавать и удалять файлы в каталогах Web-сервера Apache.

Еще одно важное требование – сервер BOINC должен иметь доменное имя и «белый» IP-адрес. Однако необходимость в «белом» IP-адресе отпадает, если BOINC-сервер – и все размещаемые на нем проекты – должен быть виден только в рамках локальной сети, например, университета. Однако в любом случае для комфортной работы IP-адрес должен быть статическим.

Теперь, когда выполнены все вспомогательные шаги и предварительные условия, можно переходить непосредственно к сборке программных компонент сервера BOINC.


3. Установка сервера шаг за шагом

Для развертывания сервера BOINC, необходимо его прежде всего... скомпилировать. Скачайте исходный код с помощью команды

svn co http://boinc.berkeley.edu/svn/branches/server_stable

Если все дополнительные инструменты установлены, то можно приступать к компиляции (исходный код уже должен находиться в подкаталоге server_stable домашнего каталога пользователя boincadm).

	boincadm@boincserver:~/server_stable> ./_autosetup				
	boincadm@boincserver:~/server_stable> ./configure
		 --disable-client --disable-manager

Из опций скрипта configure понятно, что компилировать мы будем только серверные компоненты и дополнительные библиотеки – об этом скажет последняя строчка, выведенная скриптом (если все прошло нормально, конечно):

--- Build Components: ( libraries server) ---

Внимательно просмотрев сообщения, выдаваемые по ходу работы configure, вы, возможно, обнаружите какие-нибудь предупреждения наподобие этого:

checking if CFLAG '-include fcgi_stdio.h' works... no
configure: WARNING:  fcgi-stdio.h not found.
------------------------------------------------------------
Disabling FCGI.  Will not build components that require FCGI
------------------------------------------------------------

Такие зависимости, не приводящие к ошибкам скрипта, являются необязательными. Вы можете либо проигнорировать предупреждения, либо установить недостающие компоненты, чтобы получить дополнительную функциональность.

Однако если не будут найдены, например, библиотеки mysql, то скомпилировать сервер не удастся!

В итоге, возможно, что после непродолжительной борьбы с зависимостями придет время запустить на выполнение команду

	boincadm@boincserver:~/server_stable> make

и пойти выпить кружку чая – компиляция компонент сервера займет некоторое время...


4. Запуск тестового проекта

Теперь можно перейти к созданию первого тестового проекта под управлением сервера BOINC.

Прежде всего убедитесь, что запущены фоновые процессы, отвечающие за работу Apache и MySQL, и последовательно выполните все этапы, описанные ниже.

4.1. Создание инфраструктуры проекта

Для выполнения всей необходимой работы, связанной с созданием нового проекта распределенных вычислений, разработчиками BOINC создан специальный скрипт make_project. Найти его можно в подкаталоге tools каталога скомпилированного сервера.

Запустите этот скрипт с именем нового проекта:

boincadm@boincserver:~/server_stable> ./tools/make_project myapp

Сообщения, которые выводит скрипт во время своей работы, помогут понять, что происходит при создании нового проекта.

Прежде всего устанавливаются параметры, связанные с доступом к Web-странице проекта (здесь boincserver.domain.ru – это имя сервера в сети):

Creating project 'myapp' (short name 'myapp'):
  PROJECT_ROOT = /home/boincadm/projects/myapp/
  URL_BASE = http://boincserver.domain.ru/
  HTML_USER_URL = http://boincserver.domain.ru/myapp/
  HTML_OPS_URL = http://boincserver.domain.ru/myapp_ops/
  CGI_URL = http://boincserver.domain.ru/myapp_cgi/
  KEY_DIR = /home/boincamd/projects/myapp/keys/
  DB_NAME = myapp
  DB_HOST =

Затем создаются необходимые каталоги...

Setting up server: creating directories

… и генерируются криптографические ключи

Keys don't exist in /home/boincadm/projects/myapp/keys/; generate them? [Y/n]  y
Setting up server files: generating keys

Наконец, копируются необходимые файлы, создаются таблицы базы данных и файлы настроек, а также устанавливаются службы, которые не зависят от приложения:

Setting up server files: copying files
Setting up database
Setting up server files: writing config files
Setting up server files: linking cgi programs
update_translations finished
Done installing default daemons.

Скрипту make_project при желании можно указать набор параметров для изменения стандартных настроек. Поначалу, скорее всего, наиболее востребованными параметрами окажутся --delete_prev_inst и --drop_db_first, позволяющие переписать (или просто удалить) данные уже существующего проекта. Об остальных возможностях можно узнать, использовав параметр --help.

В домашнем каталоге администратора проекта BOINC (в примере, приведенном в статье, это /home/boincadm) вы обнаружите подкаталог projects/myapp со следующим содержимым:

boincadm@boincserver:~/server_stable> ls ~/projects/myapp
apps/bin/cgi-bin/
config.xmldb_dump_spec.xmldb_revision
download/html/keys/
local.revisionlog_linuxserver/myapp.cronjob
myapp.httpd.confmyapp.readmeproject.xml
py/templates/upload/

Все эти подкаталоги (и их содержимое) и файлы, а также записи о проекте в базе данных сервера BOINC, созданы скриптом make_project. Назначение большей части из этих файлов и каталогов станет понятно при дальнейшем прочтении статьи (а что хранится в одном из этих каталогов, вы уже знаете, верно?).

В дальнейшем основным рабочим каталогом для нас будет являться каталог /home/boincadm/projects/myapp – перейдите в него.

4.2. Web-страница проекта

Необходимые настройки Web-сервера Apache для нового проекта содержатся в файле myapp.httpd.conf. Его содержимое можно либо подключить в основном файле настроек, либо напрямую перенести настройки (и то, и другое делается с правами root):

root@boincserver:/home/boincadm/projects/myapp>
	cat myapp.httpd.conf >> /etc/apache2/httpd.conf

Теперь нужно перезапустить сервер Apache:

root@boincserver:/home/boincadm/projects/myapp> 
	apache2ctl restart

Если все настроено верно, то при вводе в браузер адреса http://localhost/myapp (с компьютера, на котором находится проект) или http://boincserver.domain.ru/myapp (с сетевого компьютера локальной или глобальной сети, в зависимости от области видимости домена domain.ru) вы увидите картинку, как на рисунке 1.

Рисунок 1. Главная страница тестового проекта BOINC
Рисунок 1. Главная страница тестового проекта BOINC

Это главная страница нашего тестового проекта BOINC, она является основной контактной точкой с будущими пользователями вашего сервера. Разработчики BOINC поработали на славу, давая вам возможность воспользоваться шаблоном сайта. При желании шаблон можно изменить, кардинально переработав интерфейс и функционал, как это сделано, например, в проекте SETI@HOME (http://setiathome.berkeley.edu/), или оставить все как есть, только наполнив сайт содержанием (например, Einstein@HOME – http://einstein.phys.uwm.edu/).

4.3. Периодический запуск фоновых процессов

Теперь необходимо обеспечить запуск периодически выполняемых вспомогательных служб (таких, например, как служба освоения результатов – assimilator). Делается это посредством системной службы cron: чтобы установить необходимую периодичность, достаточно выполнить команду

boincadm@boincserver:~/projects/myapp/> crontab myapp.cronjob

В файле myapp.cronjob записано указание службе cron на запуск скрипта ~/projects/myapp/bin/start каждые пять минут:

boincadm@boincserver:~/projects/myapp/> more myapp.cronjob
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/boinc/projects/myapp/bin/start --cron

Этот скрипт, в свою очередь, вызывает все утилиты сервера BOINC, предназначенные для периодического выполнения.

4.4. Известные платформы и имя приложения

В качестве приложения, которое будет запускаться участниками распределенного проекта, воспользуемся примером, распространяемым все с тем же BOINC. Некоторые подготовительные шаги для этого уже сделаны разработчиками. Взгляните на файл project.xml, находящийся в корне каталога проекта:

boincadm@boincserver:~/projects/myapp> more project.xml
<boinc>
    <platform>
…
    <platform>
        <name>i686-pc-linux-gnu</name>
 <user_friendly_name>Linux running on an Intel x86-compatible CPU</user_friendly_name>
    </platform>
   …
    <app>
        <name>uppercase</name>
        <user_friendly_name>upperCASE</user_friendly_name>
    </app>
</boinc>

В файле project.xml (здесь представлена только часть его) описаны программно-аппаратные платформы, «известные» проекту. Для каждой из этих платформ можно создать собственную версию программы. В конце файла записана информация о приложении – имя программы, используемое в служебных целях (например, для именования каталогов не используйте в нем зарезервированных системой символов!), а также имя, выводимое на обозрение пользователям. Чтобы занести в базу данных проекта известные платформы и имена приложения, выполните команду

boincadm@boincserver:~/projects/myapp> ./bin/xadd
…
Processing <Platform#None i686-pc-linux-gnu> ...
  Committed <Platform#3 i686-pc-linux-gnu> ; values:
{'_dirty': False,
 '_lazy_lookups': {},
 'create_time': 1258736642L,
 'deprecated': 0,
 'id': 3L,
 'name': 'i686-pc-linux-gnu',
 'user_friendly_name': 'Linux running on an Intel x86-compatible CPU'}
…
Processing <App#None uppercase> ...
  Committed <App#1 uppercase> ; values:
{'_dirty': False,
 '_lazy_lookups': {},
 'beta': 0,
 'create_time': 1258736642L,
 'deprecated': 0,
 'homogeneous_redundancy': 0,
 'id': 1L,
 'min_version': 0L,
 'name': 'uppercase',
 'target_nresults': 0,
 'user_friendly_name': 'upperCASE',
 'weight': 1.0}
...

4.5. Исполняемые файлы распределенного приложения

В подкаталоге apps/ каталога проекта должны содержаться файлы приложения, которое будет выполняться на компьютерах участников проекта. Создайте в каталоге apps/ подкаталог по имени приложения (это имя должно совпадать с тем, что записано в файле project.xml: <name>uppercase</name>). Скопируйте в новый каталог соответствующий исполняемый файл из каталога скомпилированного сервера:

boincadm@boincserver:~/projects/myapp> 
	cp ~/server_stable/apps/upper_case 
	./apps/uppercase/uppercase_1.0_ i686-pc-linux-gnu

Помните, что имя исполняемого файла должно строго соответствовать следующему формату:

<имя>_<версия>_<платформа>[.<расширение>]

Именно этот формат используется для записи имени в нашем случае:

имя приложения: uppercase;
версия: 1.0;
платформа: i686-pc-linux-gnu.

Важно, чтобы название платформы совпадало с каким-нибудь из названий, определенных в файле project.xml. В дальнейшем, когда клиент BOINC соединится с сервером проекта, планировщик передаст клиентскому приложению именно тот исполняемый файл из каталога apps/, платформа которого совпадает с платформой клиентского компьютера.

В каталоге ~/server_stable/apps содержится не только исполняемый файл для платформы i686-pc-linux-gnu, но и исходный код приложения uppercase, поэтому, при желании, вы можете собрать этот тестовый проект для любой интересующей вас платформы.

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

boincadm@boincserver:~/projects/myapp> ./bin/update_version

Утилита update_version должна идентифицировать исполняемый файл и подобрать для него подходящую платформу:

Found <App#1 uppercase> version 100 for 
	<Platform#3 i686-pc-linux-gnu>: uppercase_1.0_i686-pc-linux-gnu

Вам предложат сформировать электронную подпись для исполняемого файла. Закончиться процесс добавления приложения должен следующими строчками:

Committed:
    <AppVersion#1 uppercase 100 i686-pc-linux-gnu>
Touched trigger file to make feeder re-read app_version table from database
Done

Видимый результат ваших действий — следующая картинка по ссылке «Приложения» главной страницы проекта (рисунок 2).

Рисунок 2. Список приложений и поддерживаемых платформ
Рисунок 2. Список приложений и поддерживаемых платформ

4.6. Создание рабочих единиц проекта

Итак, завершен этап создания проекта. Следующий этап – создание рабочей единицы (Work Unit) этого проекта.

Прежде всего создадим текстовый файл в каталоге download – этот файл будет содержать исходные данные для приложения uppercase:

boincadm@boincserver:~/projects/myapp> echo 
	"My first BOINC-project is working" > download/in

Теперь нужно создать шаблоны (в подкаталоге templates каталога проекта), описывающие рабочее задание и требуемый результат. Первый файл называется upper_case_wu и содержит текст:

boincadm@boincserver:~/projects/myapp> more templates/upper_case_wu
<file_info>
  <number>0</number>
</file_info>
<workunit>
  <file_ref>
    <file_number>0</file_number>
    <open_name>in</open_name>
  </file_ref>
  <min_quorum>1</min_quorum>
  <target_nresults>1</target_nresults>
</workunit>
Второй файл – upper_case_result, его содержимое:
boincadm@boincserver:~/projects/myapp> more templates/upper_case_result
<file_info>
  <name><OUTFILE_0/></name>
  <generated_locally/>
  <upload_when_present/>
  <max_nbytes>10000</max_nbytes>
  <url><UPLOAD_URL/></url>
</file_info>
<result>
  <file_ref>
    <file_name><OUTFILE_0/></file_name>
    <open_name>out</open_name>
  </file_ref>
</result>

Теперь все готово к созданию рабочего задания нашего проекта. Запускаем следующую команду:

boincadm@boincserver:~/projects/myapp> ./bin/create_work 
	-appname uppercase -wu_name test -wu_template templates/upper_case_wu 
	-result_template templates/upper_case_result in

Обратите внимание на то, какие параметры необходимо поменять, если вы использовали отличные названия файлов и проекта:

  • --appname <название> – название приложения;
  • --wu_name <название> – название рабочего задания;
  • --wu_template <имя файла> – относительный путь и имя файла шаблона рабочего задания, относящегося к проекту. Обычно шаблоны хранят в подкаталоге templates/ каталога проекта;
  • --result_template <имя файла> – относительный путь и имя файла шаблона результата, относящегося к проекту. Обычно также хранится в подкаталоге templates/ каталога проекта.

Утилита create_work имеет большое количество дополнительных необязательных параметров. Узнать подробнее о них (а также о других возможностях по генерации заданий) можно из страниц wiki-проекта BOINC (по адресу http://boinc.berkeley.edu/trac/wiki/JobSubmission).

4.7. Запуск фоновых процессов

Следующий этап – запуск проекта, точнее, его фоновых процессов:

 boincadm@boincserver:~/projects/myapp/> bin/start
Entering ENABLED mode
Starting daemons
  Starting daemon: feeder -d 3
  Starting daemon: transitioner -d 3
  Starting daemon: file_deleter -d 3

Убедимся, что проект работает:

boincadm@boincserver:~/projects/myapp> bin/status
BOINC is ENABLED
DAEMONpidstatuslockfiledisabledcommandline
12066runninglockednofeeder -d 3
22068runninglockednotransitioner -d 3
32071runninglockednofile_deleter -d 3
TASKlast runperiodnext runlock filedisabledcommandline
1?24 hours NOWunlockedyesdb_dump -d 2 -dump_spec ../db_dump_spec.xml
2?1 daysNOWunlockedyesrun_in_ops ./update_uotd.php
3?1 hourNOWunlockedyesrun_in_ops ./update_forum_activities.php
4?7 daysNOWunlockedyesupdate_stats -update_users -update_teams -update_hosts
5?24 hoursNOWunlockedyesrun_in_ops ./update_profile_pages.php
6?24 hoursNOWunlockedyesrun_in_ops ./team_import.php
7?24 hoursNOWunlockedyesrun_in_ops ./notify.ph

Из вывода утилиты status проекта видно, какие фоновые процессы запущены и какие файлы используются.

В случае, если что-то пошло не так (например, не хватает какой-либо из служб), то можно просмотреть в поисках наводящих сообщений лог-файлы, которые хранятся в подкаталоге log_<имя компьютера>/ каталога проекта. Там вы найдете лог-файлы каждой из служб в файлах с названиями <имя службы>.log.

4.8. Подключение к проекту

Все готово! Теперь можно запускать клиент BOINC (его можно скачать по ссылке на главной странице разработчиков BOINC – см. п. 3 раздела "Ресурсы") и подключать его к проекту. В клиенте BOINC (лучше всего запускать его не на том же компьютере, где располагается сервер) нажмите кнопку AddProject (в Simple view) или выберите в меню Сервис пункт «Attach to project or account manager» (в Advanced view) и в диалоговом окне введите адрес вашего проекта: http://boincserver.domain.ru/myapp.

Если все предыдущие шаги были выполнены правильно, то вам предложат зарегистрироваться в проекте и, наконец, вы увидите сообщение об успешном подключении к проекту (рисунок 3).

Рисунок 3. Результат – успешное подключение к проекту
Рисунок 3. Результат – успешное подключение к проекту

Следите за сообщениями, которые появляются на вкладке «Сообщения» клиента BOINC в Advanced view: клиент должен успешно подключиться к серверу, соединиться с планировщиком, получить от него исполняемый файл (соответствующий клиентской платформе) и файл исходных данных. После этого клиент должен провести необходимые преобразования (буквально несколько секунд!) и отправить файл с результатом серверу проекта.

Подтверждение успеха – выходной файл, который должен лежать в каталоге upload вашего проекта:

boincadm@boincserver:~/projects/myapp> more upload/ba/test_0_0
MY FIRST BOINC-PROJECT IS WORKING

Сравните его с исходным файлом, хранящимся в каталоги download/.


Заключение

Возможно, вам неоднократно потребуется повторить описанные в статье этапы... В этом нет ничего страшного: спотыкаясь на каждом шаге, вы получаете требуемый бесценный опыт! Именно преодоление трудностей поможет вам лучше понять внутреннее устройство и логику работы сервера BOINC. Кроме того, вы всегда сможете задать вопрос и получить необходимую помощь.

Эта статья является продолжением серии статей, посвященных высокопроизводительным распределенным вычислениям на базе платформы BOINC. Теперь вы можете не только участвовать в проектах типа ClimatePrediction@HOME, но и сами создать площадку для проектов BOINC!

Однако успешная работа проекта невозможна без хорошего понимания принципов функционирования сервера BOINC. В следующей статье мы исследуем закоулки созданного в рамках этой статьи проекта myapp.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


  • Bluemix

    Узнайте больше информации о платформе IBM Bluemix, создавайте приложения, используя готовые решения!

  • Библиотека документов

    Более трех тысяч статей, обзоров, руководств и других полезных материалов.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=563237
ArticleTitle=Распределенные вычисления: Часть 3. Развертывание сервера распределенных вычислений
publish-date=11022010