Создание кластера Beowulf в Ubuntu 12.04

Облачные вычисления и работа с VPS предоставляют ряд возможностей, не доступных для пользователей домашних компьютеров. Одной из них является кластеризация.

Кластеры просты в настройке и их легко расширять при помощи развертываемых экземпляров серверов. В этом руководстве речь пойдёт о настройке кластера Beowulf для распределенной обработки данных между нодами.

Требования

В руководстве используется четыре виртуальных выделенных сервера Ubuntu 12.04: один в качестве ведущей ноды, остальные – ведомые. Большинство конфигураций повторяется на каждом сервере. Потому вы можете выполнить начальную настройку на одном сервере, а затем распространить полученное окружение на другие серверы с помощью снапшотов.

Серверы, использованные в руководстве, имеют 4 Гб памяти, что позволяет воспользоваться преимуществами более высокой вычислительной мощности. Однако для подобной настройки можно использовать и серверы с меньшим объёмом памяти.

Ведущий сервер (Control):

  • Имя хоста: command
  • Внутренний IP-адрес: 1.1.1.1

Ведомый сервер 1 (Worker):

  • Имя хоста: work1
  • Внутренний IP-адрес: 1.1.1.2

Ведомый сервер 2:

  • Имя хоста: work2
  • Внутренний IP-адрес: 1.1.1.3

Ведомый сервер 3:

  • Имя хоста: work3
  • Внутренний IP-адрес: 1.1.1.4

Общие требования:

  • Система Ubuntu 12.04.
  • Пользователь с доступом к sudo (инструкции здесь).
  • Частная сеть.

Начальная настройка ведущей ноды

Создание пользователя

Сначала нужно создать непривилегированного пользователя для управления кластером (не путайте его с пользователем с доступом к sudo, который уже существует в системе). В данном руководстве такой пользователь условно называется cluster:

sudo adduser cluster --uid 900

Параметр –uid указывает id пользователя, который будет связан с данным аккаунтом. Если порядковый номер ниже 1000, то такой пользователь не будет выполнять системных задач.

Установите надёжный пароль для нового пользователя cluster. На остальные запросы можно просто нажать Enter.

Создание учётных данных

Теперь создайте учётные данные SSH для нового пользователя. Ноды кластера будут взаимодействовать по SSH и обмениваться данными путём монтирования NFS. Создайте пару ключей SSH.

Перейдите в сессию пользователя cluster:

su - cluster

Сгенерируйте ключ RSA:

ssh-keygen

Чтобы принять опции по умолчанию, нажмите Enter.

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

ssh-copy-id localhost

Чтобы принять ключ, введите yes и укажите пароль пользователя cluster.

Чтобы вернуться в сессию предыдущего пользователя, введите:

exit

Установка MPI

Ноды кластера будут взаимодействовать с помощью системы MPI (Message Passing Interface), что позволит параллельным процессам легко обмениваться данными о состоянии и рабочей информацией.

В руководстве используется  популярная версия MPICH2.

Чтобы установить её, введите:

sudo apt-get install mpich2

Развёртывание ведомых нод с помощью ведущей

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

Также для дальнейшей работы вам понадобится IP-адрес частной сети для каждой ноды.

Установка NFS

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

Перейдите на ведущий сервер.

Как говорилось ранее, данный кластер будет использовать NFS-монтирование для распространения домашнего каталога между всеми нодами. Сервер NFS будет установлен на ведущей ноде. Для этого запустите команду:

sudo apt-get update && sudo apt-get install nfs-kernel-server

Экспортируйте домашний каталог пользователя cluster на все ноды:

sudo nano /etc/exports

Добавьте в конец файла:

/home/cluster *(rw,sync,no_subtree_check)

Перезапустите сервер NFS:

sudo service nfs-kernel-server restart

Настройка нод

Теперь нужно добавить файл hosts на каждую ноду кластера, чтобы они могли взаимодействовать.

Примечание: Данный раздел нужно выполнить на всех нодах кластера.

Отредактируйте файл /etc/hosts и добавьте данные о нодах в следующем формате.

1.1.1.1     command
1.1.1.2     work1
1.1.1.3     work2
1.1.1.4     work3

Примечание: Замените условные IP-адреса IP-адресами своих серверов.

Откройте файл hosts:

sudo nano /etc/hosts

Вставьте в файл следующие строки:

127.0.0.1       localhost command
1.1.1.1         command
1.1.1.2         work1
1.1.1.3         work2
1.1.1.4         work3

Сохраните и закройте файл.

Настройка ведомых нод

Затем нужно установить и настроить компоненты NFS на ведомые ноды.

Примечание: Выполните данный раздел на всех ведомых нодах кластера.

sudo apt-get install nfs-common -y

Теперь ноды могут получить экспортируемые данные:

sudo showmount -e command
Export list for command:
/home/cluster *

Это значит, что данные были успешно переданы с ведущего сервера command.

Примечание: В случае сбоя или ошибки попробуйте перезапустить сервер NFS на ведущей ноде:

sudo service nfs-kernel-server restart

Вернитесь на ведомую ноду и смонтируйте домашний каталог пользователя cluster.

Введите:

sudo mount command:/home/cluster /home/cluster

Домашний каталог будет смонитрован. Чтобы монтирование каталога выполнялось автоматически, добавьте эту команду в файл /etc/fstab. Откройте файл:

sudo nano /etc/fstab

И вставьте в конец файла следующую строку:

command:/home/cluster /home/cluster nfs

Сохраните и закройте файл.

Заключительные действия

Теперь ведущий сервер передаёт свой домашний каталог на остальные серверы кластера при помощи монтирования NFS.

Проверьте подключения SSH. При создании такого подключения не должен запрашиваться пароль.

Откройте сессию пользователя cluster на ведущей ноде:

su - cluster

Создайте SSH подключение к каждой ноде в кластере:

ssh command

Введите yes, чтобы принять хост. Чтобы вернуться, введите:

exit

Затем повторите это на каждой ведомой ноде по очереди (ssh work1, ssh work2 и т.д.). Убедитесь, что все ноды могут взаимодействовать по SSH.

Создание файла hosts

Теперь нужно создать ещё один файл hosts, в котором будет храниться список рабочих нод кластера.

Для выполнения команд в кластере будет использоваться ведущий сервер. Все команды будут распределяться между ведомыми нодами.

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

su - cluster

Создайте файл hosts:

nano ~/hosts

Добавьте в него список рабочих нод:

work1
work2
work3

Сохраните и закройте файл.

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

mkdir ~/bin

Тестирование кластера

Программа mpich2, которая отправляет сообщения между нодами, включает в себя некоторые приложения, которые можно использовать для тестирования кластера. К сожалению, по умолчанию они не собраны. Их нужно скомпилировать самостоятельно.

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

sudo apt-get build-dep mpich2

Теперь можно получить исходные файлы с веб-сайта проекта:

wget http://www.mpich.org/static/downloads/1.4.1/mpich2-1.4.1.tar.gz

Распакуйте архив и перейдите в полученный каталог:

tar xzvf mpich*
cd mpich*

Теперь запустите:

./configure && make

Выполнение команды займёт некоторое время. После этого откройте сессию пользователя cluster:

su - cluster

Скопируйте программу, скомпилированную в каталоге bin:

cp /home/regular_user/mpich2-1.4.1/examples/cpi /home/cluster/bin

С помощью этой программы можно протестировать кластер.

Для этого нужно сослаться на файл hosts и указать номер процесса, который нужно запустить. Также нужно зажать интерфейс.

mpiexec -f hosts -iface eth1 -n 12 /home/cluster/bin/cpi
Process 6 of 12 is on work1
Process 2 of 12 is on work3
Process 9 of 12 is on work1
Process 11 of 12 is on work3
Process 0 of 12 is on work1
Process 5 of 12 is on work3
Process 8 of 12 is on work3
Process 3 of 12 is on work1
Process 7 of 12 is on work2
Process 10 of 12 is on work2
Process 4 of 12 is on work2
Process 1 of 12 is on work2
pi is approximately 3.1415926544231256, Error is 0.0000000008333325
wall clock time = 0.003485

Как видите, в кластере выполняется 12 процессов. Если проверить каждый процесс в отдельности, вы увидите, что каждый из них работает по принципу round robin.

Заключение

Теперь у вас есть полностью рабочий кластер Beowulf. При необходимости в кластер можно добавить новые ноды.

Tags: , ,

Добавить комментарий