Pull to refresh

Кластер? Легко!

Reading time 3 min
Views 54K
image Добрый день хабравчане, по роду своей деятельности нередко приходится работать с кластерными решения тех или иных программных продуктов. Но рассказывать о настройках какого либо программного продукта было бы не так информативно, поэтому поискав, и наткнувшись на сайт Юрия (за что ему огромное спасибо), я решил немножко развить эту тему и на конкретном примере посмотреть прирост производительности при вычислении числа Pi в кластерном исполнении.

Итак, у нас в наличии 4 сервера HP, из которых 3 сервера будут объединены в кластер, а один будет консолью управления. На всех серверах будет развернут Linux SLES 10 SP2 и openMPI, также будет организован беспарольный доступ по SSH между консолью и серверами.

Приступим:

Устанавливаем Linux с минимальными настройками системы, необходимые пакеты можно будет доставить позже. Обратим внимание на то, что архитектура компонентов всех узлов кластера должна быть идентична.
Загружаем пакет openMPI на узлы кластера, собираем и устанавливаем их.
./configure
make
make install


После установки openMPI следующим шагом нашей работы будет компиляция программы вычисления числа Pi на каждом узле кластера. Для этого нам понадобится пакет libopencdk, который присутствует в YAST’e и исходный код программы вычисления числа Pi (flops.f). После того как пакет установлен, а программа помещена в ту директорию, которая будет одинакова на всех узлах кластера и узле управления (консоли), приступаем к компиляции программы:
mpif77 flops.f -o flops

Устанавливаем беспарольный доступ по ssh, тут все просто:

1) Заходим на консоль кластера и генерируем rsa-ключ командой:
ssh-keygen -t rsa
2) Копируем публичный ключ консоли (root/.ssh/id_rsa.pub) на все узлы кластера, в моем случае:
scp /root/.ssh/id_rsa.pub server1:/root/.ssh
3) На каждом узле кластера создаем файл доступа:
cat id_rsa.pub >> authorized_keys
Беспарольный доступ готов.

Следующий шаг — формирование файла со списком узлов всех наших кластеров назовем его openmpi.host и положим его в папку с нашей тестовой программой расчета числа Pi. Узлы в файле можно указывать, как по именам, так и просто, по адресам. Например:
192.168.0.1
192.168.0.2
192.168.0.3
Serv1
Serv2
Serv3


Итак, настройка консоли и узлов кластера закончена, переходим к стадии тестирования:

Запускаем программу на 1 сервере, для этого на узле управления запускаем команду:
mpirun -hostfile /var/mpi/openmpi.host -np 1 var/mpi/flops

Где:
–np число узлов кластер используемых при вычислениях.
Calculation time (s) — время вычисления операций.
Cluster speed (MFLOPS) — количество операций с плавающей запятой в секунду.


Получаем следующий результат:

Calculation time = 4.3
Cluster speed = 418 MFLOPS

Добавим еще 1 сервер в кластер:
mpirun -hostfile /var/mpi/openmpi.host -np 2 var/mpi/flops

Получаем следующий результат:
Calculation time = 1.82
Cluster speed = 987 MFLOPS

Добавим последний, 3 сервер в кластер:
mpirun -hostfile /var/mpi/openmpi.host -np 3 var/mpi/flops

Получаем следующий результат:
Calculation time = 1.18
Cluster speed = 1530 MFLOPS

Время вычисления операций (секунды):



Количество операций с плавающей запятой в секунду (MFLOPS):



Проанализировав полученные данные, можно сделать вывод, что при добавлении нового узла в кластер, производительность всей системы в целом возрастает на (1/N) * 100%.

Я не ставил себе целью в этой статье проанализировать варианты решения конкретных прикладных задач на кластерных решениях. Моя цель состояла в том, что бы показать эффективность работы кластерных систем. А также на примере продемонстрировать архитектуру построения кластерного элемента в структуре сети.

UPD: Спасибо за конструктивную критику uMg и 80x86, соответствующие изменения были внесены в статью.
Tags:
Hubs:
+3
Comments 23
Comments Comments 23

Articles