**Распределенные вычисления: Часть 3. Развертывание сервера распределенных вычислений**
**1. Введение**
[[ru:chast_1|Первая статья]] этой серии была посвящена распределенным вычислениям по принципу «volunteer computing», в частности, платформе BOINC, приютившей большое количество проектов, имеющих широкую мировую известность. В [[ru:chast_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
{{:ru:chast_3_myapp_list.png|}}
Все эти подкаталоги (и их содержимое) и файлы, а также записи о проекте в базе данных сервера 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**''
{{:ru:pic1.jpg|}}
Это главная страница нашего тестового проекта 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
…
i686-pc-linux-gnu
Linux running on an Intel x86-compatible CPU
…
uppercase
upperCASE
В файле project.xml (здесь представлена только часть его) описаны программно-аппаратные платформы, «известные» проекту. Для каждой из этих платформ можно создать собственную версию программы. В конце файла записана информация о приложении – имя программы, используемое в служебных целях (например, для именования каталогов не используйте в нем зарезервированных системой символов!), а также имя, выводимое на обозрение пользователям. Чтобы занести в базу данных проекта известные платформы и имена приложения, выполните команду
boincadm@boincserver:~/projects/myapp> ./bin/xadd
…
Processing ...
Committed ; 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 ...
Committed ; 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: uppercase). Скопируйте в новый каталог соответствующий исполняемый файл из каталога скомпилированного сервера:
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 version 100 for
: uppercase_1.0_i686-pc-linux-gnu
Вам предложат сформировать электронную подпись для исполняемого файла. Закончиться процесс добавления приложения должен следующими строчками:
Committed:
Touched trigger file to make feeder re-read app_version table from database
Done
Видимый результат ваших действий — следующая картинка по ссылке «Приложения» главной страницы проекта (рисунок 2).
''Р**исунок 2. Список приложений и поддерживаемых платформ**''
{{:ru:pic2.jpg|}}
**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
0
0
in
1
1
Второй файл – upper_case_result, его содержимое:
boincadm@boincserver:~/projects/myapp> more templates/upper_case_result
10000
out
Теперь все готово к созданию рабочего задания нашего проекта. Запускаем следующую команду:
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
{{:ru:chast_3_daemons_list.png|}}
Из вывода утилиты 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. Результат – успешное подключение к проекту**''
{{:ru:pic3.jpg|}}
Следите за сообщениями, которые появляются на вкладке «Сообщения» клиента 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.
----
Статья взята с http://www.ibm.com