Перейти к содержимому

Как собрать кластер из компьютеров

  • автор:

Создание кластера для расчета в OpenFOAM

В статье я расскажу, как можно (при необходимости) быстро и дешево собрать кластер Beowulf на основе домашних компьютеров. Выполню я это с помощью компьютеров находящихся в аудитории университета, используя существующую локальную сеть. Используемые программные инструменты: средства численного моделирования механики сплошных сред OpenFOAM, сетевого протокола прикладного уровня SSH и распределенного протокола файловой системы NFS. Все выполнялось под управлением операционной системы ubuntu 20.04.

Предисловие

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

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

Введение

Определение кластера

Кластер – группа компьютеров, объединенных в локальную вычислительную сеть (ЛВС) и способных работать в качестве единого вычислительного ресурса.

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

Кластер Beowulf

Общеизвестный кластер NASA

Общеизвестный кластер NASA

В настоящее время под кластером типа Beowulf понимается система, которая состоит из одного серверного узла и одного или более клиентских узлов, соединенных при помощи Ethernet или некоторой другой сети. Это система, построенная из готовых серийно выпускающихся промышленных компонентов, на которых может работать ОС Linux, стандартных адаптеров Ethernet и коммутаторов. Она не содержит специфических аппаратных компонентов и легко воспроизводима. Серверный узел управляет всем кластером и является файл-сервером для клиентских узлов. Он также является консолью кластера и шлюзом во внешнюю сеть. Большие системы Beowulf могут иметь более одного серверного узла, а также, возможно, специализированные узлы, например консоли или станции мониторинга. Они конфигурируются и управляются серверными узлами и выполняют только то, что предписано серверным узлом.

Вычислительная среда OpenFOAM

OpenFOAM — это бесплатное программное обеспечение CFD с открытым исходным кодом, разработанное, в основном, компанией OpenCFD Ltd с 2004 года. Оно имеет большую базу пользователей в большинстве областей техники и науки, как коммерческих, так и академических организаций. OpenFOAM имеет широкий набор функций для решения любых задач — от сложных потоков жидкости, включающих химические реакции, турбулентность и теплопередачу, до акустики, механики твердого тела и электромагнитных систем.

Настройка рабочей среды

Физическое соединение устройств

Два и более компьютера нужно соединить друг с другом. Самый простой способ это сделать — задействовать коммутатор и соединить их с помощью витой пары.

Выбор операционной системы

Решено использовать систему Linux, конкретный дистрибутив — Ubuntu 20.04, десктопной и серверной версии соответственно.

Это связано с тем, что по состоянию на 2022 год среда вычисления OpenFOAM, выбранная для расчётов, стабильно работает именно на этом дистрибутиве именно этой версии. Также система Linux, будучи системой с распространяемыми исходными кодами, является основой для кластера Beowulf.

Десктоп-версия

Десктоп-версия — это версия системы, имеющая графический интерфейс. Он нужен будет для удобного взаимодействия с файлами, а также для просмотра результатов расчёта. Десктоп-версия будет стоять на главном компьютере.

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Нажимаем install ubuntu;

Выберите язык (предпочтителен English);

Не изменяем предустановленные программы;

Не изменяем типы инсталляторов;

Выбираем время системы;

Введите имя пользователя (в данном случае используется pisi), а также пароль. Пароли и имена серверов должны быть абсолютно одинаковы для всех компьютеров, связанных с кластером.

После перезагрузите систему (вам предложит это сделать система)

Серверная версия

Серверная же версия будет стоять на всех остальных компьютерах. На них не потребуется работать с файлами, или просматривать результаты. Все остальные компьютеры нужны исключительно, как дополнительные ресурсы для вычислений, и поэтому для них достаточно самой компактной системы с самым малым набором функций.

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Не обновляйте установщик;

Не изменяйте настройки клавиатуры;

Не изменяйте настройки сети;

Используйте весь диск для установки и подтвердите его перезапись, если потребуется;

Не изменяйте настройки зеркала;

Не изменяйте настройки файловой системы;

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

Server Snaps оставьте без изменений;

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

Завершения установки

В обоих случаях, вам надо завершить установку, зайдя в директорию Home /home/<user>/, и создать папку OpenFOAM mkdir/OpenFOAM. Должен получиться путь: /home/<user>/OpenFOAM. <user> — это заданное вами имя пользователя (на изображениях в данном документе можно заметить имя «pisi»).

Наличие подкаталогов в текущем каталоге можно проверить с помощью команды ls.

Установка OpenFOAM

Установка OpenFOAM состоит так же из двух этапах и должна производиться всех компьютерах участвующих в объединении, это связано с тем, что OpenFOAM это не программа, а набор библиотек необходимых для произведения расчетов системы.

Для того чтобы установить OpenFOAM необходимо в терминале прописать следующую команду что представлена ниже.

Кратко опишем функционал команды.

curl — команда взаимодействия с интернетом.

-s –- сохранение скачанных фалов в систему.

url — ссылка на скачиваемый файл.

bash — дает возможность создания скриптов.

Примечание: если по каким то причинам не оказалось команды curl, то введите следующую команду в терминал: sudo apt install curl и убедиться что установлена правильная версия системы.

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

Примечания: так как это набор библиотек, то нет практического способа проверить правильность действий, то необходимо проверить их наличие в файловой системе операционной системы.

Для этого необходимо выполнить следующую команду в терминале.

Кратко опишем функционал команды.

cd — это переход в папку по пути.

далее идет путь.

Если в результате выполнения команды не появилось ошибок, то все действия выполнены правильно, в противном случае выполните последовательность действий начиная с скачивания OpenFOAM.

Если проверка прошла успешно, то выполняем команду cd.

Установка и настройка SSH

SSH — это защищенный протокол для удаленного управления операционной системой. Он пригодится для безопасного соединения компьютеров друг с другом.

Десктоп-версия

Десктоп-версия по-умолчанию не имеет встроенного SSH, поэтому его нужно установить, это продемонстрировано на примере ниже.

Других отличий нет. Выполняйте все те шаги, что описаны ниже, для серверной версии.

Серверная версия

В отличие от версии с графическим интерфейсом, серверная версия по-умолчанию имеет в себе предустановленный пакет OpenSSH (точнее, эту опцию можно выбрать при установке), и здесь этап установки не требуется. В противном же случае повторите действия, предназначенные для десктоп-версии.

Следом выполните следующие шаги.

Создаёт директорию SSH. Может выдать ошибку, если директория уже есть.

Назначает права полного доступа для этой директории. Может потребоваться ввести вместе с sudo.

Создаёт новый ключ. Оставьте все поля по-умолчанию.

ssh-copy-id -i /home/<user>/.ssh/id_rsa.pub <user>@<ip>

Копирует ваш ключ на другой компьютер по IP-адресу. Это позволит вам позже входить на этот компьютер без пароля.

<user> — это имя вашего пользователя.

<ip> — это IP-адрес компьютера, куда вы передаёте ключ.

Проверка подключения (должна быть без пароля).

Настройте так все компьютеры. Ключи должны быть переданы каждому сателлиту от сервера, и наоборот.

Примечание: для проверки работоспособности SSH соединение необходимо проверить несколько условий:

Соединение должно работать от каждого устройства к каждому.

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

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

Установка и настройка NFS

Установка NFS для Десктоп-версии

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

Примечание: предварительно необходимо иметь папку в домашнем каталоге, если этого нет, то просмотрите пункт «Завершения установки».

Чтобы установить NFS, необходимо скачать его. Для этого пропишем в терминале следующую команду.

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

Кратко опишем функционал команды.

chown — это изменение владельца файла или папки

nobody:nogroup — сообщает системе что папка не принадлежит не одному владельцу и группе

Предоставим права доступа для папки.

Кратко опишем функционал команды:

777 — это теговое значение прав доступа к последующей папке.

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

Кратко опишем функционал команды:

nano — это встроенный редактор текста, основные команды которого являются: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

В самом редакторе необходимо в конце прописать следующую строку.

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

Примечание: для того чтобы узнать IP-адрес компьютера, в командной строке введите команду ip address, там вы сможете узнать узнать адрес конкретной системы.

После всех вышеописанных действий необходимо произвести монтирование сервера. Для этого пропишем в терминале команду.

Кратко опишем функционал команды:

exportfs — это изменяемый файл.

-a — то применения изменений к нему.

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

Кратко опишем функционал команды:

systemctl — системный диспетчер.

restart — рестарт сервера.

nfs-kernel-server.service — файл сервера .

Настройка утилиты NFS для серверной версии

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

После, по аналогии с десктоп-версией, необходимо изменить файлы настройки сетевой папки. Для этого воспользуемся командой.

После введем в редакторе кода одну строчку, относящуюся к десктоп-версии системы.

Примечание: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

Далее смонтируем точку для того, чтобы сообщить десктоп-версии, что сервер готов к общению.

Примечание: Тут могут возникнуть проблемы, это нормально, значит вы что то сделали не так, как было указано в инструкции, это связано с тем что в Ubuntu нет фиксации ошибок. Для этого необходимо произвести ряд проверок, чтобы определить где произошла ошибка.

Проверьте настройку SSH, произведя подключения со всех устройств ко всем командой: ssh @.

Проверьте отсутствие запрашиваемого пароля при SSH-соединение..

Проверьте правильность файлов, где прописываются IP-адреса.

Проверьте, чтобы не изменились IP-адреса во время настройки (такой случай возможен).

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

Проверьте одинаковость названий синхронизируемой папки.

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

Начало вычислений

Тест проверки ядер

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

Программа написана на языке С. Исходный код этой программы компилируется в исполняемый файл, именуемый «mpi_hello» (тестовое наименование, наподобие «Hello World!»). Команда компиляции в терминале следующая.

Кратко опишем функционал команды:

mpicc — команда запуска компиляции.

mpi_hello.c — файл с исходным кодом.

-o mpi_hello — выходной файл.

Полный исходный код этой программы приведен в приложении 1, здесь описаны основные моменты её работы.

Данный фрагмент кода последовательно получает три параметра: количество ядер, ранг текущего процесса, и имя хоста. Затем эти данные выводятся в терминал.

Программу можно запустить с помощью команды, представленной ниже.

Кратко опишем функционал команды:

mpirun — запуск исполняемого файла.

./mpi_hello — исполняемый файл.

Результат выводится в консоль.

Результаты работы

Результаты работы

Проверка работы программы на нескольких ядрах

Следующий этап — указание количества ядер. Для mpirun это возможно сделать с помощью аргумента «np».

Кратко опишем функционал команды:

-np — указания количества ядер.

Результат работы представлен ниже.

Отчет работы программы по нескольким ядрам

Отчет работы программы по нескольким ядрам

Проверка работы на нескольких компьютерах

С помощью команды “mpirun” в терминале можно также послать скомпилированную программу на несколько компьютеров.

Количество процессоров –- общее для всех компьютеров, а имя файла — это имя файла, где перечислены IP-адреса и количество ядер, которое будет у него использоваться.

Параметр slots отвечает за количество ядер.

Первый адрес, 127.0.0.1, — это локальный адрес компьютера (localhost), с него всегда начинается основная работа. Другие IP-адреса — это IP-адреса других компьютеров.

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

Отчет программы после работы на нескольких компах

Отчет программы после работы на нескольких компах

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

Примечание: предварительно необходимо создать папку -v2006 в папке синхронизируемой системы. Это можно сделать в ручном режиме, если вы создаёте его в десктоп-версии.

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

После необходимо распаковать файл геометрии мотоцикла, для этого воспользуемся командой, описанной ниже, при использовании встроенного разархиватора.

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

Примечание: этот процесс занимает крайне много времени и требует большой объем оперативной памяти. В нашем случае — около 80 ГБ на 3 компьютера. Чтобы не устанавливать дорогостоящую память в компьютер, необходимо увеличить файл подкачки на SSD-диске. Для этого необходимо выполнить команду.

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

Далее, после просчета сетки, можно приступить к запуску самого расчета задачи. Для этого вставим в командную строку текст.

ЗАКЛЮЧЕНИЕ

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

Примечание: точность выводов основана на субъективной оценке в связи с невозможностью составления прогноза работы и скорости вычислений.

Мы провели два теста, на машине из 4-х ядер и одном компьютере и машине из 12 ядер и трех компьютеров. Расчет времени выполнения производился автоматически с записью в файл log, это нужно было для отладки работоспособности кластера, но этот процесс занимает определенное время, которое посчитать не удалось. Однако, так как геометрия была одинаковой и файлы log аналогичные, следовательно приобретенное время в двух тестах было одинаковым и в сравнении друг с другом не будут вносить ошибку. Далее приведена таблица с характеристиками двух тестов, которые мы посчитали уместным.

Как объединить два (или больше) компьютера для увеличения производительности

Что быстрее одного ПК? Два (или больше) ПК? И да, и нет. Как это часто бывает, всё зависит от ваших рабочих нагрузок. И даже если ваши рабочие нагрузки подходят для работы на нескольких ПК, как вы можете объединить их вычислительную мощность?

В этой статье мы рассмотрим различные рабочие нагрузки – от рендеринга до игр – и посмотрим, когда вам выгодно объединять несколько ПК – и как это сделать.

Преимущества объединения вычислительной мощности нескольких ПК

Давайте посмотрим, что вы можете получить от использования ресурсов нескольких ПК, и стоит ли это того для ваших вариантов использования.

Соединение компьютеров и объединение их ресурсов вместе осуществляется по трём основным причинам:

  1. Вы можете продолжать использовать свой основной компьютер без замедлений. То есть, вы можете продолжать работать над своим следующим проектом или даже играть, в то время как, например, рендеринг или другие задачи обработки выполняются на вспомогательном компьютере.
  2. Чтобы ускорить чрезвычайно трудоемкие задачи. Некоторые задачи могут выполняться ужасно долго. На ум сразу приходят «Визуализация» и «Моделирование». Такие задачи обычно можно разделить на подзадачи и назначить их на одновременный запуск на разных компьютерах, что часто приводит к почти линейному уменьшению времени обработки. Однако, узким местом здесь является задержка сетевого подключения, но для хорошо распараллеленных рабочих нагрузок ею можно пренебречь.
  3. Из соображений безопасности и надёжности. Может быть вы ведёте процесс, который вы не хотите прерывать, так почему бы не иметь дополнительный компьютер, который может взять на себя управление, если первый выйдет из строя? Это может уберечь вас от любой потенциальной потери данных или временных задержек, которые могут замедлить проект или текущий процесс (например, сеанс прямой трансляции).

Как объединяется вычислительная мощность (на высоком уровне)

Слово «объединяется» здесь немного вводит в заблуждение. Если бы я действительно объединил 2 ПК, я бы ожидал, что в результате один ПК будет в два раза мощнее. Но, объединение вычислительной мощности не работает таким образом. Вы не собираете и не комбинируете оборудование физически.

Это больше похоже на соединение двух или более ПК, чтобы вы могли «использовать производительность обоих отдельных ПК максимально эффективно, с некоторой простотой использования».

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

Если одному ПК требуется 1 час для рендеринга нашего видео, то двум ПК оптимально потребуется всего 30 минут для завершения рендеринга. Если у вас 10 ПК, то рендеринг видео будет выполнен всего за 6 минут.

Это оптимальный случай.

Теперь, если вы запустите рендеринг видео на своём первом ПК, все остальные ПК не узнают, что они должны помочь с этой задачей. Вам нужно будет соединить их и сказать им, чтобы они говорили друг с другом.

Существует множество способов объединения ПК, но наиболее часто используемым и самым простым является сетевое подключение. Вы идёте, покупаете коммутатор и несколько LAN-кабелей и подключаете их друг к другу.

Так же работают сервера. Сервер – это просто красивое слово для компьютера с другим форм-фактором и предполагаемым вариантом использования, но все они подключены друг к другу через сетевое соединение.

Задержка сетевого соединения

Конечно, сетевое (или любое другое) соединение приводит к задержке.

Чем дальше данные должны перемещаться, тем больше становится задержка (с точки зрения непрофессионала).

Расстояния внутри ПК очень малы, поэтому передача данных чрезвычайно быстрая (например, между ЦП и ОЗУ одного ПК). Но, от одного ПК к другому ПК по неоптимальным проводам (кабелям локальной сети) намного медленнее.

Что нам нужно сделать, чтобы максимально обойти узкое место задержки, это убедиться, что ПК могут выполнять как можно больше работы самостоятельно, прежде чем снова разговаривать по кабелю LAN с другими ПК.

Это также означает, что не все задачи можно легко распараллелить. Только задачи, которые можно легко разделить на независимые подзадачи. Подробнее об этом позже.

Какие виды производительности можно совмещать

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

Варианты использования установки на основе двух компьютеров

Процессор объединенного ПК

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

Лучший процессор для рендеринга – это процессор с большим количеством ядер и высокой тактовой частотой.

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

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

Резюмируем: вы сможете использовать CPU второго ПК, но, в зависимости от его производительности, польза может быть не такой уж большой.

Видеокарта объединенного ПК

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

ПК могут управлять более чем одним графическим процессором. С помощью сборок рабочей станции HEDT, которые могут функционировать как узлы рендеринга, вы можете добавить до 4 видеокарт на (настольный) ПК.

Если рабочие нагрузки рендеринга входят в ваш список ежедневных задач, вы будете рады узнать, что некоторые механизмы рендеринга даже поддерживают гибридный рендеринг. Это означает, что в дополнение к производительности графических процессоров второго ПК вы также можете использовать вычислительную мощность центрального процессора.

Рендеринг на CPU и GPU – что выбрать

Другие элементы объединенного ПК

Хотя вторичный ПК, скорее всего, будет использоваться либо из-за его ЦП, либо из-за видеокарты, в некоторых случаях могут использоваться аппаратные компоненты без прямой обработки.

Хранилище объединенного ПК

Например, вы можете использовать дополнительные устройства хранения для создания системы сетевого хранилища (NAS), конфигурации RAID или того и другого через соединение Ethernet.

Конфигурации хранилища по типам RAID

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

Однако, это может означать не столько объединение «вычислительной мощности», сколько «наилучшее использование независимых ресурсов».

ОЗУ / видеопамять объединенного ПК

В некоторых случаях вы также можете использовать ОЗУ (память) дополнительного устройства.

Оперативная память подключена к ЦП через высокоскоростную шину, поэтому к ней можно получить доступ в одно мгновение.

Если бы ЦП одного компьютера обращался к ОЗУ другого, это заняло бы значительное количество времени, что сделало бы весь процесс бессмысленным.

Однако, если вы назначаете подзадачу второму ПК и ЦП использует ОЗУ этого ПК для выполнения задачи, вы можете освободить память ОЗУ на своём основном компьютере.

Это делается автоматически и идёт рука об руку с использованием вычислительной мощности ЦП или GPU (и его видеопамяти) дополнительного ПК.

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

Какие рабочие нагрузки можно запускать на нескольких ПК

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

  • 3D визуализация
  • Рендеринг видео
  • Симуляторы
  • Пакетная обработка
  • Майнинг криптовалюты
  • Последовательная обработка изображений
  • Машинное обучение
  • Потоковая трансляция

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

Почему подзадачи?

Помните, что мы говорили о задержке выше? Чем меньше «разговоров в сети», тем быстрее могут выполняться процессы.

Если простой задаче требуется 1 секунда для передачи данных по сети, то задача, состоящая из 1 миллиона таких простых задач, займёт целую вечность.

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

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

Мы можем сделать это, взяв большую задачу и разделив её на независимые подзадачи.

Независимые, так что отдельный ПК может работать над этой подзадачей без необходимости какого-либо доступа к сети (до тех пор, пока задание не будет завершено и результат не будет отправлен обратно на хост).

Давайте сделаем пример. Рабочая нагрузка/задача, которую можно легко распараллелить:

Обработка изображений (например, пакетное масштабирование изображений до другого разрешения)

Если вы хотите изменить размер 1000 изображений на 4 компьютерах, нет ничего проще, чем изменить размер 250 изображений на каждом компьютере.

Задачу изменения размера 1000 изображений можно легко разделить на 1000 подзадач. Каждое изменение размера изображения является одной подзадачей.

Рендеринг 3D-анимации

Это работает так же. Рендеринг анимации, состоящей из 100 кадров, можно легко разделить на 100 отдельных подзадач. Рендеринг 1 кадра является подзадачей.

Если бы у вас было 100 ПК, эта анимация из 100 кадров отображалась бы в 100 раз быстрее, чем на одном ПК (оптимально).

Что, если бы у нас был 101 ПК? Или 1000 ПК? Поможет ли это?

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

Это подводит нас к следующему разделу:

Можно ли объединить вычислительную мощность двух ПК для игр

Это пример задачи, которую нельзя разделить на подзадачи:

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

Допустим, вы хотите использовать видеокарту на дополнительном ПК для графических вычислений, а не на основном ПК, на котором запущена ваша игра.

Поскольку графическому процессору требуется доступ к данным 3D-модели, данным сцены, текстурам, анимации заданного уровня в режиме реального времени, 60 раз (или более) в секунду, ваше сетевое соединение слишком медленное и имеет неподходящую задержку для отправки требуемых данных. Вы столкнётесь с ужасным отставанием.

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

Конечно, вы можете просто запустить игру на своём втором ПК, а также удаленно / совместно использовать экран и управлять этим вторым ПК с вашего первого ПК, но это не объединяет вычислительную мощность. Это просто игра на втором ПК и управление им с первого.

Задержка намного меньше, но некоторая задержка всё же есть, так как готовые отрендеренные кадры все равно должны быть отправлены вам по сети для отображения на мониторе вашего первого ПК. Кстати, именно так работают онлайн-игры.

Что насчёт стриминга?

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

Если использовать термины, которые мы ввели выше: запуск игры – это одна (под) задача, запуск потока – другая (под) задача. Хотя это не идеально масштабируется, у вас есть две задачи, и потоковая трансляция может быть передана на второй компьютер без каких-либо проблем.

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

Как настроить дополнительный ПК для потоковой трансляции

Если ваш компьютер выходит из строя, второй компьютер всё ещё может запускать поток в режиме реального времени без перерыва. Зрители по-прежнему будут видеть вас кристально чистыми, даже если игра полностью остановится.

Для потоковой передачи с двух ПК вам понадобится специальное периферийное устройство, называемое картой захвата. Она подключается как к игровому, так и к потоковому компьютеру. Она захватывает аудио и видео с игрового ПК и выводит его на потоковый ПК, чтобы его можно было обработать с помощью потокового приложения, такого как OBS или XSplit.

Как объединить вычислительную мощность нескольких ПК

Допустим, вам нужно объединить компьютеры, как вы можете это сделать? Что ж, есть разные методы, которые вы можете использовать, некоторые из них более прямолинейны и просты, чем другие.

Объединение компьютеров через сеть

Мы уже немного говорили о сетевых соединениях.

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

Это также шаг, который позволяет определенному специализированному программному обеспечению (например, Render Manager Thinkbox Deadline) использовать вычислительную мощность обоих ваших ПК за счёт возможностей конкретного приложения.

Программные возможности для объединения ПК

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

Например, некоторые механизмы 3D-рендеринга, такие как OctaneRender, будут иметь опцию «сетевой рендеринг». Использование этой опции в настройках позволит вам отправлять задачи рендеринга на второй компьютер одним нажатием кнопки (после некоторой настройки).

Менеджеры рендеринга

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

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

Если вы хотите сделать инвестиции и создать собственную рендер-ферму, ваши компьютеры могут стать узлами рендеринга. Эти узлы рендеринга впоследствии контролируются менеджером рендеринга.

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

Одним из таких приложений Render Manager является Deadline от Thinkbox.

Параллельная виртуальная машина

Две широко используемые формы распределенных вычислений: параллельная виртуальная машина (PVM) и интерфейс передачи сообщений (MPI). Они немного сложнее и сложны в настройке.

PVM позволяет вам подключать разнородные компьютеры (в основном, ПК с разной аппаратной архитектурой, например, AMD или Intel) для параллельных операций.

Интерфейс передачи сообщений

Когда дело доходит до MPI, VirtualBox находится там, где он есть. Вы можете использовать это приложение для подключения нескольких гостевых машин к единой виртуальной машине.

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

Например, если вы используете Mac, но приложение, которое вы хотите запустить, работает только в Windows, вы можете установить виртуальную ОС и подключить свои отдельные компьютеры к этой ОС и заставить их выполнять приложение.

Я знаю, это звучит сложно, но на самом деле это проще, чем кажется.

В конце концов, вы всегда ограничены узким местом, которое создает сетевое подключение.

Имеет ли смысл объединение нескольких компьютеров

Как уже говорилось, это зависит от выполняемых вами рабочих нагрузок.

  • Можно ли разделить вашу рабочую нагрузку на независимые подзадачи? (это хорошо для распределения между несколькими ПК). Примеры – пассивные задачи, такие как рендеринг, пакетная обработка.
  • Или ваши рабочие нагрузки сильно зависят от задержки? (это плохо для распределения между несколькими ПК). Примеры – активные задачи, такие как игры, активная работа в программном приложении.

Можно ли объединить ноутбук и ПК

Конечно! Ноутбуки – это просто ПК в другом форм-факторе, поэтому всё вышесказанное относится и к ним.

Однако, их более низкая производительность по сравнению с настольными ПК или серверами не делает их моим первым выбором.

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

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

Выводы

Объединение вычислительной мощности двух или более ПК может значительно повысить вашу эффективность, ускорить рабочие нагрузки и снизить риск потери данных или потери времени.

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

Просто помните: это метод, используемый в основном для разделения процесса на подзадачи и распределения их по разным машинам, чтобы они могли выполняться одновременно.

Как сделать кластер из двух компьютеров. Настольный кластер

В первую очередь определитесь с тем, какие компоненты и ресурсы потребуются. Вам нужен будет один главный узел, минимум десяток идентичных вычислительных узлов, свитч Ethernet, блок распределения питания и стойка. Определите мощность проводки и охлаждения, а также площадь пространства, которые вам потребуются. Также определитесь, какие IP адреса вы хотите использовать для узлов, какое ПО вы поставите и какие технологии потребуются для создания параллельных вычислительных мощностей (подробнее об этом ниже).

  • Хотя «железо» стоит дорого, все приведенные в статье программы распространяются бесплатно, и большинство из них — с открытым исходным кодом.
  • Если вы хотите узнать, насколько быстрым теоретически может быть ваш суперкомпьютер, используйте этот инструмент:

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

  • Выбирайте рамы для серверов с максимально рациональным использованием пространства и энергии, а также с эффективным охлаждением.
  • Или вы можете «утилизировать» десяток или около того б/у серверов, несколько устаревших — и пусть их вес превышает суммарный вес комплектующих, зато вы сэкономите приличную сумму. Все процессоры, сетевые адаптеры и материнские платы должны быть одинаковы, чтобы компьютеры хорошо работали вместе. Конечно, не забудьте о RAM и жесткие диски для каждой ноды, а также как минимум об одном оптическом приводе для главного узла.

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

Установите свитч Ethernet рядом со стойкой. Стоит сразу же сконфигурировать свитч: установите размер джамбо-кадров 9000 байт, установите статический IP адрес, который вы выбрали на шаге 1 и выключите ненужные протоколы, такие как SMTP.

Установите распределитель питания (PDU, или Power Distribution Unit). В зависимости от того, какую максимальную нагрузку выдают ноды в вашей сети, вам может потребоваться 220 вольт для высокопроизводительного компьютера.

Когда все установлено, переходите к конфигурированию. Linux по факту является основной системой для высокопроизводительных (HPC) кластеров – он не только идеально подходит в качестве окружения для научных вычислений, но вам еще и не придется платить за установку системы на сотни и даже тысячи узлов. Представьте, во сколько обошлась бы установка Windows на все ноды!

  • Начните с установки последней версии BIOS для материнской платы и ПО от производителя, которое должно быть одинаковым для всех серверов.
  • Установите предпочитаемый дистрибутив Linux на все ноды, а на главный узел — дистрибутив с графическим интерфейсом. Популярные системы: CentOS, OpenSuse, Scientific Linux, RedHat и SLES.
  • Автор очень рекомендует использовать Rocks Cluster Distribution. В дополнение к установке всех необходимых для кластера программ и инструментов, Rocks реализует отличный метод для быстрого «переноса» множества копий системы на аналогичные сервера с использованием PXE boot и процедуры «Kick Start» от Red Hat.

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

  • Для начала вам понадобится портативная система для работы с bash, например, Torque Resource Manager, который позволяет разделять и распределять задачи на несколько машин.
  • Добавьте к Torque еще Maui Cluster Scheduler, чтобы закончить установку.
  • Дальше вам нужно установить интерфейс передачи сообщений, который необходим для того, чтобы индивидуальные процессы в каждой отдельной ноде использовали общие данные. OpenMP — самый простой вариант.
  • Не забудьте о многопоточных математических библиотеках и компиляторах, которые будут «собирать» ваши программы для распределенных вычислений. Я уже говорил, что вам стоит просто поставить Rocks?

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

  • Используйте частную Ethernet сеть, чтобы соединить все ноды в кластер.
  • Главная нода может также работать в качестве NFS, PXE, DHCP, TFTP и NTP сервера при подключении к Ethernet.
  • Вы должны отделить эту сеть от публичных, чтобы быть уверенным, что пакеты не перекрываются другими в LAN.

Протестируйте кластер. Последнее, что вам стоит сделать перед тем, как дать доступ пользователям к компьютерным мощностям — протестировать производительность. HPL (High Performance Lynpack) benchmark — популярный вариант для измерения скорости вычислений в кластере. Вам нужно скомпилировать ПО из исходников с самой высокой степенью оптимизации, которую позволяет ваш компилятор для той архитектуры, которую вы выбрали.

  • Вы должны, конечно, компилировать со всеми возможными настройками оптимизации, которые доступны для платформы, которую вы выбрали. Например, при использовании AMD CPU компилируйте в Open64 и уровнем оптимизации -0.
  • Сравните полученные результаты с TOP500.org, чтобы сопоставить свой кластер с 500 самыми быстрыми суперкомпьютерами в мире!

Создание кластера на базе Windows 2000/2003. Шаг за шагом

Кластер — это группа из двух или более серверов, действующих совместно для обеспечения безотказной работы набора приложений или служб и воспринимаемых клиентом как единый элемент. Узлы кластера объединяются между собой с помощью аппаратных сетевых средств, совместно используемых разделяемых ресурсов и серверного программного обеспечения.

Microsoft Windows 2000/2003 поддерживает две технологии кластеризации: кластеры с балансировкой нагрузки (Network Load Balancing) и кластеры серверов.

В первом случае (кластеры с балансировкой нагрузки) служба Network Load Balancing придает службам и приложениям свойства высокого уровня надежности и масштабируемости за счет объединения до 32 серверов в единый кластер. Запросы от клиентов в данном случае распределяются среди узлов кластера прозрачным образом. При отказе узла кластер автоматически изменяет свою конфигурацию и переключает клиента на любой из доступных узлов. Этот режим конфигурации кластера также называется active-active режимом, когда одно приложение работает на нескольких узлах.

Кластер серверов распределяет свою нагрузку среди серверов кластера, причем каждый сервер несет свою собственную нагрузку. Если происходит отказ узла в кластере, то приложения и службы, настроенные на работу в кластере, прозрачным образом перезапускаются на любом из свободных узлов. Кластеры серверов используют разделяемые диски для обмена данными внутри кластера и для обеспечения прозрачного доступа к приложениям и службам кластера. Для них требуется специальное оборудование, но данная технология обеспечивает очень высокий уровень надежности, поскольку сам кластер не имеет какой-либо единственной точки отказа. Этот режим конфигурации кластера также называется active-passive режимом. Приложение в кластере работает на одном узле с общими данными, расположенными на внешнем хранилище.

Кластерный подход к организации внутренней сети дает следующие преимущества:

Высокий уровень готовности То есть, если происходит сбой службы или приложения на каком-то узле кластера, настроенного на совместную работу в кластере, кластерное программное обеспечение позволяет перезапустить это приложение на другом узле. Пользователи при этом ощутят кратковременную задержку при проведении какой-то операции либо вообще не заметят серверного сбоя. Масштабируемость Для приложений, работающих в кластере, добавление серверов к кластеру означает увеличение возможностей: отказоустойчивости, распределение нагрузки и т. д. Управляемость Администраторы, используя единый интерфейс, могут управлять приложениями и службами, устанавливать реакцию на сбой в узле кластера, распределять нагрузку среди узлов кластера и снимать нагрузку с узлов для проведения профилактических работ.

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

Требования к программному обеспечению

  • Microsoft Windows 2000 Advanced (Datacenter) Server или Microsoft Windows 2003 Server Enterprise Edition, установленные на всех серверах кластера.
  • Установленная служба DNS. Немного поясню. Если вы строите кластер на основе двух контроллеров домена, то намного удобнее использовать службу DNS, которую вы в любом случае устанавливаете при создании Active Directory. Если вы создаете кластер на основе двух серверов, членов Windows NT домена, то вам придется использовать либо службу WINS, либо заносить соответствие имен и адресов машин в файл hosts.
  • Terminal Services для удаленного управления серверами. Не обязательно, но при наличии Terminal Services удобно управлять серверами со своего рабочего места.

Требования к аппаратному обеспечению

  • Аппаратное обеспечение для узла кластера лучше подбирать, основываясь на Cluster Service Hardware Compatible List (HCL). По рекомендациям Microsoft аппаратное обеспечение должно быть протестировано на совместимость с Cluster Services.
  • Соответственно вам понадобятся два сервера, имеющих по два сетевых адаптера; SCSI-адаптер, имеющий внешний интерфейс для подключения внешнего массива данных.
  • Внешний массив, имеющий два внешних интерфейса. Каждый из узлов кластера подключается к одному из интерфейсов.

Замечание: для создания двухузлового кластера совсем не обязательно иметь два абсолютно одинаковых сервера. После сбоя на первом сервере у вас будет немного времени, чтобы проанализировать и восстановить работу основного узла. Второй же узел будет работать на безотказность системы в целом. Однако это не означает, что второй сервер будет простаивать. Оба узла кластера могут спокойно заниматься своими делами, решать разные задачи. А вот некий критический ресурс мы и можем настроить на работу в кластере, увеличив его (этого ресурса) отказоустойчивость.

Требования к сетевым настройкам

  • Уникальное NetBIOS имя для кластера.
  • Пять уникальных статических IP-адресов. Два для сетевых адаптеров на кластерную сеть, два для сетевых адаптеров на общую сеть и один для кластера.
  • Доменная учетная запись для кластерного сервиса (Cluster service).
  • Все узлы кластера должны быть либо member server в домене, либо контроллерами домена.
  • Каждый сервер должен иметь два сетевых адаптера. Один для подключения в общую сеть (Public Network), второй для обмена данными между узлами кластера (Private Network).

Замечание: по рекомендациям Microsoft ваш сервер должен иметь два сетевых адаптера, один для общей сети, второй для обмена данными внутри кластера. Можно ли строить кластер на одном интерфейсе — наверное, да, но я не пробовал.

Установка кластера

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

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

Установка двухузлового кластера может быть разделена на 5 шагов

  • Установка и настройка узлов в кластере.
  • Установка и настройка разделяемого ресурса.
  • Проверка дисковой конфигурации.
  • Конфигурирование первого узла кластера.
  • Конфигурирование второго узла в кластере.

Это пошаговое руководство позволит вам избежать ошибок во время установки и сэкономить массу времени. Итак, начнем.

Установка и настройка узлов

Мы немного упростим задачу. Поскольку все узлы кластера должны быть либо участниками домена, либо контроллерами домена, то корневым держателем каталога AD (Active Directory) сделаем 1-й узел кластера, на нем же будет работать DNS-служба. 2-й узел кластера будет полноправным контроллером домена.

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

Сетевые настройки

Перед началом установки кластера и Active Directory необходимо выполнить сетевые настройки. Все сетевые настройки хочется разделить на 4 этапа. Для распознавания имен в сети желательно иметь DNS-сервер с уже существующими записями о серверах кластера.

Каждый сервер имеет по две сетевые карты. Одна сетевая карта будет служить для обмена данными между узлами кластера, вторая будет работать на клиентов в нашей сети. Соответственно первый назовем Private Cluster Connection, второй назовем Public Cluster Connection.

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

    My Network Places → Properties

Private Cluster Connection → Properties → Configure → Advanced

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

    Internet Protocol (TCP/IP) → Properties → Use the following IP: 192.168.30.1

(Для второго узла используйте адрес 192.168.30.2). Введите маску подсети 255.255.255.252 . В качестве адреса DNS-сервера для обоих узлов используйте адрес 192.168.100.1 .

Для конфигурирования всех сетевых адаптеров на узлах кластера используйте следующую табличку:

Узел Сетевое имя IP address MASK DNS Server
1 Public Cluster Connection 192.168.100.1 255.255.255.0 192.168.100.1
1 Private Cluster Connection 192.168.30.1 255.255.255.252 192.168.100.1
2 Public Cluster Connection 192.168.100.2 255.255.255.0 192.168.100.1
3 Private Cluster Connection 192.168.30.2 255.255.255.252 192.168.100.1

Установка Active Directory

Поскольку моя статья не преследует цель рассказать об установке Active Directory, то этот пункт я опущу. Всевозможных рекомендаций, книг об этом написано достаточно много. Выберете доменное имя, вроде mycompany.ru, установите Active Directory на первом узле, добавьте второй узел в домен в качестве контроллера домена. Когда все сделаете, проверьте конфигурации серверов, Active Directory.

Установка Cluster User Account

  • Start → Programs → Administrative Tools → Active Directory Users and Computers
  • Добавьте нового пользователя, например, ClusterService.
  • Установите флажки на: User Cannot Change Password и Password Never Expires .
  • Также добавьте этого пользователя в группу администраторов и дайте ему права Log on as a service (права назначаются в Local Security Policy и Domain Controller Security Policy ).

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

Для настройки внешнего массива данных в кластере необходимо помнить, что перед установкой Cluster Service на узлах вы должны сначала сконфигурировать диски на внешнем массиве, только потом устанавливать службу кластера сначала на первом узле, только потом на втором. В случае нарушения порядка установки у вас произойдет сбой, и вы не достигнете цели. Можно ли будет исправить — наверное, да. Когда появится ошибка, у вас будет время, чтобы поправить настройки. Но Microsoft столь загадочная штука, что совсем не знаешь, на какие грабли наступишь. Проще иметь перед глазами пошаговую инструкцию и не забывать нажимать на кнопки. По шагам конфигурирование внешнего массива выглядит так:

  1. Оба сервера должны быть выключены, внешний массив включен, подсоединен к обоим серверам.
  2. Включаем первый сервер. Получаем доступ к дисковому массиву.
  3. Проверяем, чтобы внешний дисковый массив был создан как Basic. Если это не так, то переведем диск с помощью опции Revert to Basic Disk .
  4. Создаем на внешнем диске через Computer Manage-ment → Disk Management небольшой раздел. По рекомендациям Microsoft он должен быть не менее 50 Мб. Я рекомендую создать раздел в 500 Мб. или чуть больше. Для размещения кластерных данных этого вполне достаточно. Раздел должен быть отформатирован в NTFS.
  5. На обоих узлах кластера этот раздел будет назван одной буквой, например, Q. Соответственно при создании раздела на первом сервере выберем пункт Assign the following drive letter — Q .
  6. Оставшуюся часть диска вы можете разметить по своему желанию. Конечно, крайне желательно использовать файловую систему NTFS. Например, при настройке служб DNS, WINS основные базы служб будут перенесены на общий диск (не системный том Q, а второй, созданный вами). И по соображению безопасности вам будет удобнее использовать именно NTFS-тома.
  7. Закрываем Disk Management и проверяем доступ к вновь созданному разделу. Например, можно создать на нем текстовый файл test.txt , записать и удалить. Если все прошло нормально, то с конфигурацией внешнего массива на первом узле мы закончили.
  8. Теперь выключаем первый сервер. Внешний массив должен быть включен. Включаем второй сервер и проверяем доступ к созданному разделу. Также проверим, чтобы буква, назначенная первому разделу, была идентична выбранной нами, то есть Q.

На этом конфигурация внешнего массива завершена.

Установка Cluster Service Software

Конфигурация первого узла кластера

Перед началом установки Cluster Service Software все узлы кластера должны быть выключены, все внешние массивы должны быть включены. Перейдем к конфигурации первого узла. Внешний массив включен, первый сервер включен. Весь процесс установки происходит с использованием Cluster Service Configuration Wizard:

Конфигурация второго узла кластера

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

  1. В диалоговом окне Create or Join a Cluster выберите The second or next node in the cluster и нажмите далее.
  2. Введите имя кластера, которое мы задали ранее (в примере это MyCluster), и нажмите далее.
  3. После подключения второго узла к кластеру Cluster Service Configuration Wizard автоматически заберет все установки с основного узла. Для запуска службы Cluster Service используйте имя, которые мы создавали ранее.
  4. Введите пароль вашей учетной записи и нажмите далее.
  5. В следующем диалоговом окне нажмите Finish для завершения установки.
  6. Cluster service будет запушен на втором узле.
  7. Закройте окно Add/Remove Programs .

Для установки дополнительных узлов кластера используйте эту же инструкцию.

Постскриптум, благодарности

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

Шаг Узел 1 Узел 2 Внешний массив

тБВПФБФШ ОБ ПДОПК НБЫЙОЕ ХЦЕ ОЕ НПДОП
ЙМЙ ДЕМБЕН ЛМБУФЕТ Ч ДПНБЫОЙИ ХУМПЧЙСИ.

1. чЧЕДЕОЙЕ

2. лБЛ,ЮФП Й ЗДЕ.

3. хУФБОПЧЛБ РТПЗТБННОПЗП ПВЕУРЕЮЕОЙС.

4. оБУФТПКЛБ

зДЕ РЕТЧЩК РБТБНЕФТ ПВПЪОБЮБЕФ ОПНЕТ ОБЮБМШОПЗП ХЪМБ, ЧФПТПК — IP БДТЕУ РЕТЧПЗП ХЪМБ Й РПУМЕДОЙК — ЛПМЙЮЕУФЧП ХЪМПЧ У ФЕЛХЭЕЗП. ф.Е. УЕКЮБУ Х ОБУ Ч ЛМБУФЕТЕ ПМХЮБЕФУС РСФШ ХЪМПЧ, IP БДТЕУБ ЛПФПТЩК ЪБЛБОЮЙЧБАФУС ОБ 1, 2, 3, 4 Й 5.
йМЙ ДТХЗПК РТЙНЕТ:

оПНЕТ ХЪМБ IP ЛПМЙЮЕУФЧП ХЪМПЧ У ФЕЛХЭЕЗП
______________________________________
1 10.152.1.1 1
2 10.150.1.55 2
4 10.150.1.223 1

ч ЬФПК ЛПОЖЙЗХТБГЙЙ НЩ РПМХЮЙН УМЕДХАЭЙК ТБУЛМБД:
IP 1-ПЗП ХЪМБ 10.150.1.1
IP 2-ПЗП ХЪМБ 10.150.1.55
IP 3-ПЗП ХЪМБ 10.150.1.56
IP 4-ПЗП ХЪМБ 10.150.1.223
фЕРЕТШ ОХЦОП ОБ ЧУЕИ НБЫЙОБИ ВХДХЭЕЗП ЛМБУФЕТБ ХУФБОПЧЙФШ MOSIX Й УПЪДБФШ ЧЕЪДЕ ПДЙОБЛПЧЩК ЛПОЖЙЗХТБГЙПООЩК ЖБКМ /etc/mosix.map .

фЕРЕТШ РПУМЕ РЕТЕЪБРХУЛБ mosix ЧБЫБ НБЫЙОБ ХЦЕ ВХДЕФ ТБВПФБФШ Ч ЛМБУФЕТЕ, ЮФП НПЦОП ХЧЙДЕФШ ЪБРХУФЙЧ НПОЙФПТ ЛПНБОДПК mon. ч УМХЮБЕ, ЕУМЙ ЧЩ ХЧЙДЙФЕ Ч НПОЙФПТЕ ФПМШЛП УЧПА НБЫЙОХ ЙМЙ ЧППВЭЕ ОЕ ХЧЙДЙФЕ ОЙЛПЗП, ФП, ЛБЛ ЗПЧПТЙФУС — ОБДП ТЩФШ. уЛПТЕЕ ЧУЕЗП Х ЧБУ ПЫЙВЛБ ЙНЕООП Ч /etc/mosix.map.
оХ ЧПФ, ХЧЙДЙМЙ, ОП ОЕ РПВЕДЙМЙ. юФП ДБМШЫЕ? б ДБМШЫЕ ПЮЕОШ РТПУФП:-) — ОХЦОП УПВТБФШ ХФЙМЙФЩ ДМС ТБВПФЩ У ЙЪНЕОЕООЩН /proc ЙЪ РБЛЕФБ mproc. ч ЮБУФОПУФЙ Ч ЬФПН РБЛЕФЕ ЙДЕФ ОЕРМПИБС НПДЙЖЙЛБГЙС top — mtop, Ч ЛПФПТЩК ДПВБЧЙМЙ ЧПЪНПЦОПУФШ ПФПВТБЦЕОЙС ХЪМБ(node), УПТФЙТПЧЛЙ РП ХЪМБН, РЕТЕОПУБ РТПГЕУУБ У ФЕЛХЭЕЗП ХЪМБ ОБ ДТХЗПК Й ХУФБОПЧМЕОЙС НЙОЙНБМШОПК ЪБЗТХЪЛЙ РТПГЕУУПТБ ХЪМБ, РПУМЕ ЛПФПТПК РТПГЕУУЩ ОБЮЙОБАФ НЙЗТЙТПЧБФШ ОБ ДТХЗЙЕ MOSIX — ХЪМЩ.
ъБРХУЛБЕН mtop, ЧЩВЙТБЕН РПОТБЧЙЧЫЙКУС ОЕ УРСЭЙК РТПГЕУУ (ТЕЛПНЕОДХА ЪБРХУФЙФШ bzip) Й УНЕМП ДБЧЙН ЛМБЧЙЫХ «g» ОБ ЧБЫЕК ЛМБЧЙБФХТЕ, РПУМЕ ЮЕЗП ЧЧПДЙН ОБ ЪБРТПУ PID ЧЩВТБООПЗП Ч ЛБЮЕУФЧЕ ЦЕТФЧЩ РТПГЕУУБ Й ЪБФЕН — ОПНЕТ ХЪМБ, ЛХДБ НЩ ИПФЙН ЕЗП ПФРТБЧЙФШ. б ХЦЕ РПУМЕ ЬФПЗП ЧОЙНБФЕМШОП РПУНПФТЙФЕ ОБ ТЕЪХМШФБФЩ, ПФПВТБЦБЕНЩЕ ЛПНБОДПК mon — ФБ НБЫЙОБ ДПМЦОБ ОБЮБФШ ВТБФШ ОБ УЕВС ОБЗТХЪЛХ ЧЩВТБООПЗП РТПГЕУУБ.
б УПВУФЧЕООП mtop — Ч РПМЕ #N ПФПВТБЦБФШ ОПНЕТ ХЪМБ, ЗДЕ ПО ЧЩРПМОСЕФУС.
оП ЬФП ЕЭЕ ОЕ ЧУЕ — ЧЕДШ ЧБН РТБЧДБ ОЕ ИПЮЕФУС ПФРТБЧМСФШ ОБ ДТХЗЙЕ ХЪМЩ РТПГЕУУЩ ЧТХЮОХА? нОЕ ОЕ ЪБИПФЕМПУШ. х MOSIX ЕУФШ ОЕРМПИБС ЧУФТПЕООБС ВБМБОУЙТПЧЛБ ЧОХФТЙ ЛМБУФЕТБ, ЛПФПТБС РПЪЧПМСЕФ ВПМЕЕ-НЕОЕЕ ТБЧОПНЕТОП ТБУРТЕДЕМСФШ ОБЗТХЪЛХ ОБ ЧУЕ ХЪМЩ. оХ Б ЧПФ ЪДЕУШ ОБН РТЙДЕФУС РПФТХДЙФУС. дМС ОБЮБМБ С ТБУУЛБЦХ, ЛБЛ УДЕМБФШ ФПОЛХА ОБУФТПКЛХ (tune) ДМС ДЧХИ ХЪМПЧ ЛМБУФЕТБ? Ч РТПГЕУУЕ ЛПФПТПК MOSIX РПМХЮБЕФ ЙОЖПТНБГЙА П УЛПТПУФСИ РТПГЕУУПТПЧ Й УЕФЙ:
ъБРПНОЙФЕ ТБЪ Й ОБЧУЕЗДБ — tune НПЦОП ЧЩРПМОСФШ ФПМШЛП Ч single-mode. йОБЮЕ ЧЩ МЙВП РПМХЮЙФЕ ОЕ УПЧУЕН ЛПТТЕЛФОЩК ТЕЪХМШФБФ, МЙВП ЧБЫБ НБЫЙОБ НПЦЕФ РТПУФП ЪБЧЙУОХФШ.
йФБЛ, ЧЩРПМОСЕН tune. рПУМЕ РЕТЕЧПДБ ПРЕТБГЙПООПК УЙУФЕНЩ Ч single — mode ОБРТЙНЕТ ЛПНБОДПК init 1 ЙМЙ init S ЪБРХУЛБЕН УЛТЙРФ prep_tune, ЛПФПТЩК РПДОЙНЕФ cЕФЕЧЩЕ
ЙОФЕТЖЕКУЩ Й ЪБРХУФЙФ MOSIX. рПУМЕ ЬФПЗП ОБ ПДОПК ЙЪ НБЫЙО ЪБРХУЛБЕН tune, ЧЧПДЙН ЕНХ ОПНЕТ ДТХЗПЗП ХЪМБ ДМС ОБУФТПКЛЙ Й ЦДЕН ТЕЪХМШФБФБ — ХФЙМЙФБ ДПМЦОБ ЧЩДБФШ ЪБРТПУ ОБ ЧЧПД ЫЕУФЙ ЮЙУЕМ, РПМХЮЕООЩИ ПФ ЧЩРПМОЕОЙС ЛПНБОДЩ tune -a ОБ ДТХЗПН ХЪМЕ. уПВУФЧЕООП ПРЕТБГЙА РТЙДЕФУС РПЧФПТЙФШ ОБ ДТХЗПН ХЪМЕ ЛПНБОДПК tune -a , Б ТЕЪХМШФБФ ЙЪ ЫЕУФЙ ЮЙУЕМ ЧЧЕУФЙ ОБ РЕТЧЩК ХЪЕМ. рПУМЕ РПДПВОПЗП ФАОЙОЗБ Ч ЧБЫЕК УЙУФЕНЕ ДПМЦЕО РПСЧЙФУС ЖБКМ /etc/overheads, УПДЕТЦБЭЙК ЙОЖПТНБГЙА ДМС MOSIX Ч ЧЙДЕ ОЕЛЙИ ЮЙУМПЧЩИ ДБООЩИ. ч УМХЮБЕ, ЕУМЙ РП ЛБЛЙН-ФП РТЙЮЙОБН tune ОЕ УНПЗ УДЕМБФШ ЕЗП, РТПУФП УЛПРЙТХКФЕ ЙЪ ФЕЛХЭЕЗП ЛБФБМПЗБ ЖБКМ mosix.cost Ч /etc/overheads. ьФП РПНПЦЕФ;-).
рТЙ ФАОЙОЗЕ ЛМБУФЕТБ ЙЪ ВПМЕЕ ЮЕН ДЧХИ НБЫЙО ОХЦОП ЙУРПМШЪПЧБФШ ХФЙМЙФХ, ЛПФПТБС ФБЛЦЕ РПУФБЧМСЕФУС У MOSIX — tune_kernel. дБООБС ХФЙМЙФБ РПЪЧПМСЕФ
ЧБН Ч ВПМЕЕ РТПУФПН Й РТЙЧЩЮОПН ЧЙДЕ ОБУФТПЙФШ ЛМБУФЕТ, ПФЧЕФЙЧ ОБ ОЕУЛПМШЛП ЧПРТПУПЧ Й РТПЧЕДС ФАОЙОЗ У ДЧХНС НБЫЙОБНЙ ЛМБУФЕТБ.
лУФБФЙ, РП УПВУФЧЕООПНХ ПРЩФХ НПЗХ УЛБЪБФШ, ЮФП РТЙ ОБУФТПКЛЕ ЛМБУФЕТБ С ТЕЛПНЕОДХА ЧБН ОЕ ЪБЗТХЦБФШ УЕФШ, Б ОБПВПТПФ — РТЙПУФБОПЧЙФШ ЧУЕ БЛФЙЧОЩЕ ПРЕТБГЙЙ Ч МПЛБМШОПК УЕФЙ.

5. хРТБЧМЕОЙЕ ЛМБУФЕТПН

mosctl — ЛПОФТПМШ ОБД ХЪМПН. рПЪЧПМСЕФ ЙЪНЕОСФШ РБТБНЕФТЩ ХЪМБ — ФБЛЙЕ, ЛБЛ block, stay, lstay, delay Й Ф.Д
дБЧБКФЕ ТБУУНПФТЙН ОЕУЛПМШЛП РБТБНЕФТПЧ ЬФПК ХФЙМЙФЩ:
stay — РПЪЧПМСЕФ ПУФБОБЧМЙЧБФШ НЙЗТБГЙА РТПГЕУУПЧ ОБ ДТХЗЙЕ ХЪМЩ У ФЕЛХЭЕК НБЫЙОЩ. пФНЕОСЕФУС РБТБНЕФТПН nostay ЙМЙ -stay
lstay — ЪБРТЕЭБЕФ ФПМШЛП МПЛБМШОЩН РТПГЕУУБН НЙЗТБГЙА, Б РТПГЕУУЩ У ДТХЗЙИ НБЫЙО НПЗХФ РТПДПМЦБФШ ЬФП ДЕМБФШ. пФНЕОСЕФУС РБТБНЕФТПН nolstay ЙМЙ -lstay.
block — ЪБРТЕЭБЕФ ХДБМЕООЩН/ЗПУФЕЧЩН РТПГЕУУБН ЧЩРПМОСФУС ОБ ЬФПН ХЪМЕ. пФНЕОСЕФУС РБТБНЕФТПН noblock ЙМЙ -block.
bring — ЧПЪЧТБЭБЕФ ПВТБФОП ЧУЕ РТПГЕУУЩ У ФЕЛХЭЕЗП ХЪМБ ЧЩРПМОСЕНЩЕ ОБ ДТХЗЙИ НБЫЙОБИ ЛМБУФЕТБ. ьФПФ РБТБНЕФТ НПЦЕФ ОЕ УТБВБФЩЧБФШ, РПЛБ НЙЗТЙТПЧБЧЫЙК РТПГЕУУ ОЕ РПМХЮЙФ РТЕТЩЧБОЙЕ ПФ УЙУФЕНЩ.
setdelay ХУФБОБЧМЙЧБЕФ ЧТЕНС, РПУМЕ ЛПФПТПЗП РТПГЕУУ ОБЮЙОБЕФ НЙЗТЙТПЧБФШ.
чЕДШ УПЗМБУЙФЕУШ — Ч УМХЮБЕ, ЕУМЙ ЧТЕНС ЧЩРПМОЕОЙС РТПГЕУУБ НЕОШЫЕ УЕЛХОДЩ УНЩУМ РЕТЕОПУЙФШ ЕЗП ОБ ДТХЗЙЕ НБЫЙОЩ УЕФЙ ЙУЮЕЪБЕФ. йНЕООП ЬФП ЧТЕНС Й ЧЩУФБЧМСЕФУС ХФЙМЙФПК mosctl У РБТБНЕФТПН setdecay. рТЙНЕТ:
mosctl setdecay 1 500 200
ХУФБОБЧМЙЧБЕФ ЧТЕНС РЕТЕИПДБ ОБ ДТХЗЙЕ ХЪМЩ 500 НЙММЙУЕЛХОД Ч УМХЮБЕ, ЕУМЙ РТПГЕУУ ЪБРХЭЕО ЛБЛ slow Й 200 НЙМЙУЕЛХОД ДМС fast РТПГЕУУПЧ. пВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП РБТБНЕФТ slow ЧУЕЗДБ ДПМЦЕО ВЩФШ ВПМШЫЕ ЙМЙ ТБЧЕО РБТБНЕФТХ fast.

mosrun — ЪБРХУЛБЕФ РТЙМПЦЕОЙЕ Ч ЛМБУФЕТЕ. ОБРТЙНЕТ mosrun -e -j5 make ЪБРХУФЙФ make ОБ 5-ПН ХЪМЕ ЛМБУФЕТБ, РТЙ ЬФПН ЧУЕ ЕЗП ДПЮЕТОЙЕ РТПГЕУУЩ ВХДХФ ФБЛЦЕ ЧЩРПМОСФУС ОБ 5-ПН ХЪМЕ. рТБЧДБ ЪДЕУШ ЕУФШ ПДЙО ОАБОУ, РТЙ ЮЕН ДПЧПМШОП УХЭЕУФЧЕООЩК:
Ч УМХЮБЕ, ЕУМЙ ДПЮЕТОЙЕ РТПГЕУУЩ ЧЩРПМОСАФУС ВЩУФТЕЕ ЮЕН ХУФБОПЧМЕООБС ХФЙМЙФПК mosctl ЪБДЕТЦЛБ (delay) ФП РТПГЕУУ ОЕ ВХДЕФ НЙЗТЙТПЧБФШ ОБ ДТХЗЙЕ ХЪМЩ ЛМБУФЕТБ. Х mosrun ЕЭЕ ДПЧПМШОП НОПЗП ТБЪМЙЮОЩИ ЙОФЕТЕУОЩИ РБТБНЕФТПЧ, ОП РПДТПВОП ХЪОБФШ
П ОЙИ ЧЩ УНПЦЕФЕ ЙЪ ТХЛПЧПДУФЧБ РП ЬФПК ХФЙМЙФЕ. (man mosrun)

mon — ЛБЛ НЩ ХЦЕ ЪОБЕН, ЬФП НПОЙФПТ ЛМБУФЕТБ, ЛПФПТЩК Ч РУЕЧДПЗТБЖЙЮЕУЛПН ЧЙДЕ ПФПВТБЦБЕФ ЪБЗТХЪЛХ ЛБЦДПЗП ТБВПЮЕЗП ХЪМБ ЧБЫЕЗП ЛМБУФЕТБ, ЛПМЙЮЕУФЧП УЧПВПДОПК Й ЪБОСФПК РБНСФЙ ХЪМПЧ Й ЧЩДБЕФ НОПЗП ДТХЗПК, ОЕ НЕОЕЕ ЙОФЕТЕУОПК ЙОЖПТНБГЙЙ.

mtop — НПДЙЖЙГЙТПЧБООБС ДМС ЙУРПМШЪПЧБОЙС ОБ ХЪМБИ ЛМБУФЕТБ ЧЕТУЙС ЛПНБОДЩ top. пФПВТБЦБЕФ ОБ ЬЛТБОЕ ДЙОБНЙЮЕУЛХА ЙОЖПТНБГЙА П РТПГЕУУБИ, ЪБРХЭЕООЩИ ОБ ДБООПН ХЪМЕ, Й ХЪМБИ, ЛХДБ НЙЗТЙТПЧБМЙ ЧБЫЙ РТПГЕУУЩ.

mps — ФПЦЕ НПДЙЖЙГЙТПЧБООБС ЧЕТУЙС ЛПНБОДЩ ps. дПВБЧМЕОП ЕЭЕ ПДОП РПМЕ — ОПНЕТ ХЪМБ, ОБ ЛПФПТЩК НЙЗТЙТПЧБМ РТПГЕУУ.

чПФ ОБ НПК ЧЪЗМСД Й ЧУЕ ПУОПЧОЩЕ ХФЙМЙФЩ. оБ УБНПН ДЕМЕ ЛПОЕЫОП НПЦОП ПВПКФЙУШ ДБЦЕ ВЕЪ ОЙИ. оБРТЙНЕТ ЙУРПМШЪХС ДМС ЛПОФТПМС ОБД ЛМБУФЕТПН /proc/mosix.
фБН ЛТПНЕ ФПЗП, ЮФП НПЦОП ОБКФЙ ПУОПЧОХА ЙОЖПТНБГЙА П ОБУФТПКЛБИ ХЪМБ, РТПГЕУУБИ ЪБРХЭЕООЩИ У ДТХЗЙИ ХЪМПЧ Й Ф.Д.,Б ФБЛЦЕ РПНЕОСФШ ЮБУФШ РБТБНЕФТПЧ.

Как собрать кластер из компьютеров

Ранние суперкомпьютеры использовали параллельную обработку данных и распределенные вычисления для того, чтобы соединить процессоры вместе в одну машину. Сегодня же это возможно повторить буквально в домашних условиях используя подручные инструменты и некоторое количество недорогих материнских плат с процессорами и памятью – такой подход к созданию мощных машин называется «создать кластер». Глену Гарднеру понравилась эта идея, поэтому он решил построить самостоятельно у себя дома массивный кластер из параллельно соединенных компьютеров на основе материнских плат Mini-ITX. В кластере используется двенадцать 800 Мегагерцовых кластерных узлов.

Оригинальная конфигурация из шести узлов.

Завершенный кластер состоящий из двенадцати узлов.

На фотографии показано, сколько мощности потребляют шесть узлов в режиме бездействия – всего-то 60 ватт (по 10 ватт на каждый узел).
На тот момент, когда я закончил работу над кластером, весь кластер с 12-ю узлами потреблял в режиме бездействия приблизительно 140 Ватт (это, считай, 12 полноценных компьютеров), пиковая нагрузка составляла приблизительно 200 Ватт. Никаких проблем с чрезмерным выделением тепла и перегревами замечено не было. Контролирующий узел обладал оперативной памятью объемом в 256 Мегабайт, и, как я уже говорил, винчестером объемом 160 Гигабайт. Официальных тестов на этой машине я еще не проводил, но на первый взгляд с простыми задачами мини-кластер справлялся быстрее, чем четыре машины с процессорами P4 2.4 GHz объединенные в одну сеть с параллельной обработкой данных, это еще не учитывая энергопотребление и цену!

Питание и охлаждение

Платы Mini-ITX обладают очень малым рассеянием мощности по сравнению с большинством популярных комбинаций современных материнских плат с процессорами. Это означает, что кластер построенный на материнских платах Mini-ITX с, например, шестнадцатью вычислительными узлами не потребует абсолютно никакого специального охлаждения. Маленькое рассеяние мощности также означает, что кластер будет потреблять минимальное количество электроэнергии (примеры я приводил выше), что в свою очередь означает, что можно использовать всего одну недорогую UPS-ку для обеспечения «чистого» и стабильного питания всему кластеру.

Как говорится, все познается в сравнении, поэтому я приведу контрастный пример использования 12-16 вычислительных узлов построенных на основе процессоров от Intel или AMD, которые будут генерировать достаточно тепла для того, чтобы помещение пришлось охлаждать кучей кондиционеров. В добавок ко всему для питания такой монструозной системы вам понадобится стабильная электрическая линия выдерживающая пиковую нагрузку в два-три киловатта (сравниваем с 200 Ваттами пиковой нагрузки кластера построенного на матплатах Mini-Itx (что как минимум в 10 раз меньше)), которые будет потреблять ваш кластер состоящий всего-то из 12 вычислительных узлов на пентиумах. Так что если вы будете использовать процессоры от Intel или AMD, то готовьтесь к дополнительным счетам за электричество и кондиционирование…

Конструкция с точки зрения «железа»

Кластер построен на двух приблизительно одинаковых «шкафах». В каждом «шкафу» установлено два отдельных стеллажа – на каждом стеллаже по три материнские платы и по три адаптера dc-dc (постоянный ток – постоянный ток), которые установлены на алюминиевых стержнях-ножках.

Также поверх каждого стеллажа крепился стек с адаптерами IDE -> CompactFlash, также по три адаптера на один стеллаж. Каждый стек с платами крепился между двух алюминиевых листов (размерами 18 см на 25 см) толщиной 1,6 мм. В общей сложности на каждый «шкаф» использовалось семь алюминиевых панелей.


На верхней крышке я закрепил кронштейн с шестью кнопками (включить-выключить-перезагрузить).


Плата установленная ниже играла роль терминала раздачи электропитания. Кабель, подающий напряжение на каждый шкаф, естественно был достаточно мощным – многожильный (под номером 14) в поливинилхлоридной изоляции. Кабели, забирающие питание с терминала и подводящие его к каждому вычислительному узлу (вернее к dc-dc адаптеру) были попроще – обычный (номер 18) многожильный подвесной монтажный провод с поливинилхлоридной изоляцией. Кабели шедшие от кнопок сброса/включения питания были совсем простыми многожильными проводами (номер 24), также облаченными в поливинилхлоридную изоляцию.


В первом «шкафу» кластера содержится шесть узлов (с первого по шестой), причем первый узел является управляющим узлом, остальные узлы являются вычислительными. В основании первого «шкафа» также крепится винчестер на 160 Гигабайт, который используется управляющим узлом. Все остальные узлы подключаются к накопителям IBM Microdrive. Узел номер три имеет отдельный адаптер Compact Flash, который может использоваться для дублирования накопителей Microdrive, что достаточно заметно упрощает обслуживание.


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


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


Провода также вручную припаивались к выключателям и кнопкам обыкновенным паяльником. Другая сторона подключалась к стандартному 2,5 миллиметровому коннектору, который в свою очередь подключался к материнской плате.
Сеть


Что можно сказать по поводу сети? Да здесь тоже нет ничего необычного. Для соединения компьютеров я использовал обыкновенные встроенные в материнские платы сетевые адаптеры (fast Ethernet, 100 Мегабит). Сетевой концентратор (ну если по-простому, то свитч или хаб), который установлен между двух шкафов представлял собой простой дешевый сетевой концентратор на 16 портов, приобретенный в обычном магазине офисного оборудования всего за 80$. Сетевой кабель я обжал вручную, использовалась хорошая, высококачественная витая пара (8 жил) пятой категории.

Некоторые соображения по поводу питания

Конвертеры DC-DC требуют чистое и точное напряжение в 12 вольт постоянного тока, лишенное каких-либо помех, перепадов и скачков. Для подачи такого напряжения я выбрал мощный импульсный блок питания на 60 ампер, выдающий стабильное ровное напряжение в 12 вольт. Блок питания выдает до 60 ампер в пике. Для обеспечения ровного переменного тока на входе (у нас напряжение не совсем стабильное и бывают перепады) я выбрал UPS на 1 КВА. Этот монстр заодно будет обеспечивать питанием компьютеры в то время, когда местная компания отключит электричество. Вообще я думаю, что иногда стоит заранее подумать об электропитании – мой «мод» вышел далеко недешевым и я не согласен жить с мыслью, что в один прекрасный день весь кластер погорит к чертям. После того, как я обеспечил своему мини-кластеру такую отличную защиту, я могу быть спокойным за безопасность и отказоустойчивость оборудования.

delirium_00

Журнал физика-программиста

Мой домашний компьютерный кластер на MPI

Наконец, нашлось время перевести мою многопоточную программу на рельсы MPI и сделать ее «многопроцессовой». В данный момент она исполняется на домашнем компьютерном кластере, состоящем из 4 компьютеров. Теоретически, точно также она должна работать и на 1000 компьютерах и на суперкомпьютере. Как мне это удалось?

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

Для начала нужно установить на всех компьютерах кластера библиотеку MPI. Я использовал реализацию MPICH. Уточню, что я работаю пока почти исключительно в ОС Windows. Для успешной совместной работы, необходимо, чтобы на всех компьютерах были заведены пользовательские аккаунты с одинаковыми именами и паролями. Также при установке MPICH спросит кодовое слово, оно должно быть одно для всех компьютеров кластера.
Лучшая статья о том, как начать работу с MPICH в Windows.
smpd -install
mpiexec -remove
mpiexec -register
mpiexec -validate (it should return SUCCESS )
smpd -status (it should return ‘smpd running on ‘)
И вот, в конфигураторе я вижу:

А значит все узлы кластера готовы к работе.
Теперь нужно переписать программу для использования MPI.
Организовать вычисления я решил максимально просто. Инициализируются все процессы с помощью конфигурационных файлов совершенно одинаково. Процесс с нулевым рангом (назовем его координатором) не участвует в непосредственных вычислениях, а ожидает сообщений с результатами от остальных процессов и накапливает статистику(объединяет результаты). В ответ на сообщение с результатом, координатор посылает вычислительному процессу сообщение с указанием, стоит ли ему продолжить вычисления или завершить работу. Затем, после окончания расчетов, процесс-координатор запускает GUI, где отрисовывает результаты.
Решено было оставить возможность работы программы в обычном многопоточном режиме, также как возможность компиляции программы без зависимости от библиотеки MPI. Для этого использовались директивы типа

И выбор типа «параллизма» через перечисления:

Из всего многообразия функций MPI понадобятся только эти:

MPI_Recv и MPI_Send для получения и отправки сообщений соответственно.

Здесь от вычислительного потока получается структура TMPISendResultStruct result, а обратно отправляется значение типа boolean. Также здесь прописано условие завершения вычислений. А вот так выглядит код на «другом конце».

Не обошлось и без проблем. Например, с инициализацией генератора случайных чисел. Раньше можно было просто привязаться ко времени. Теперь же есть вероятность инициализации нескольких процессов в один момент времени. Решено было добавлением в информацию для инициализации зависимости от номера процесса. Следующая проблема была связана с выводом GUI. Оказалось, что такая возможность предусмотрена, но только на том компьютере, откуда происходит запуск программы. Для этого в команду нужно добавить параметр -localhost.
А вот так выглядит сама команда для исполнения программы на моем импровизированном кластере:

Домашний кластер на Dask

Я недавно проводил исследование, в рамках которого было необходимо обработать несколько сотен тысяч наборов входных данных. Для каждого набора — провести некоторые расчеты, результаты всех расчетов собрать вместе и выбрать «лучший» по некоторым критериям. По сути это bruteforce перебор. Тоже самое происходит при подборе параметров ML моделей с помощью GridSearch .

Однако, с некоторого момента размер вычислений может стать для одного компьютера великоват, даже если запускать ее в несколько процессов с помощью joblib . Или, если сказать точнее, он становится слишком долгим для нетерпеливого экспериментатора.

И поскольку в современной квартире сейчас можно найти больше одного «недогруженного» компьютера, а задача явно подходит для массового параллелизма — пора собрать свой домашний кластер и запускать такие задачи на нем.

Для построения «домашнего кластера» прекрасно подойдет библиотека Dask (https://dask.org/). Она проста в установке и не требовательна к узлам, что серьезно понижает «уровень входа» в кластерные вычисления.

Для настройки своего кластера нужно на всех компьютерах:

  • установить интерпретатор python
  • установить пакеты dask и прикладные пакеты вашего распределенного приложения
  • сконфигурировать запуск планировщика (scheduler) на одном из компьютеров и работников (worker) на всех доступных

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

Развертывание кластера

Официальная документация (https://docs.dask.org/) хорошо описывает процесс установки. Приведу ниже некоторые неочевидные аспекты, с которыми столкнулся сам.

Версии python

Поскольку Dask в своих операциях зависит от pickle, на клиенте, шедулере и рабочих узлах необходимо держать версии одинаковые или очень близкие версии python.
Версии 3.6 и 3.7 вместе работают, хотя и выдается предупреждение о различии версий. Узлы с 3.8 вместе с предыдущими работать не будут из-за новой версии pickle.

Если все ставится «с нуля», то, очевидно, лучше ставить везде одну версию.

Пакеты Dask

Dask и необходимые зависимости устанавливается как стандартные пакеты с помощью pip или conda

В документации под dask, последний пакет bokeh упоминается как опциональный, но не говориться, что без него «по-тихому» не будет работать прекрасная функция dask dashboard.
Без нее проводить мониторинг кластера и наблюдать как задачки разбегаются по узлам будет невозможно. А это очень поможет при оптимизации приложения для работы в распределенной среде.

Для сборки необходим gcc, потому:

  • на MacOS должен быть установлен xcode
  • если собираете docker image для запуска docker-worker, то начать с «тонкого» имиджа, типа python:3.6-slim-buster может не получиться. Прийдется либо доставлять необходимые пакеты, либо взять полноразмерный исходный имидж python:3.6 .

Запуск dask кластера

Процесс-планировщик создается один на кластер. Запускать его можно на любой машине. Единственная очевидная рекомендация — машина должна быть максимально доступна.

Процессы-работники запускаются на всех компьютерах, ресусами которых вы планируете пользоваться.

  • nprocs / nthreads — количество процессов, которые будут запущены, и количество потоков в каждом из них. Поскольку GIL присутствует и на стороне процессов-работников, запускать обработку на многих потоках имеет смысл только если распределенный процесс реализован на чем-то низкоуровневом, как numpy. В противном случае нужно масштабироваться за счет количества процессов.
  • memory-limit — объем памяти, доступный каждому процессу. Ограничивать доступную память процесам нужно очень аккуратно — при достижении предела по памяти процесс-работник перестартовывает, что может вызвать остановку процесса обработки. Я сначала ставил ограничение, но потом убрал.
  • death-timeout — время в секундах, в течении которого процессы-работники будут ждать, пока планировщик перезапустится. Это время нужно подбирать в соответствии с ожидаемым временем перезагрузки компьютера-планировщика. Как ни странно, похоже, этот параметр не всегда учитывается.
  • name — префикс имени процесса-работника, как он будет отображаться в отчетах планировщика. Это удобно, чтобы видеть «человеческие» имена сервисов-работников.
  • local-directory — директория, которая будет использоваться для создания временных файлов
Запуск процессов-работников на Windows в виде сервиса

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

Решений задачи «запустить батник как сервис» множество. Я в последнее время использую утилиту NSSM (https://www.nssm.cc/).

NSSM, в частности, позволяет настроить рестарт пакетного файла, в случае его завершения. Это удобно для обработки ситуации, когда планировщик недоступен в течение длительного времени, и процессы-работники завершаются и останавливаются. В этом случае NSSM просто будет их перезапускать.

Также NSSM позволяет перенаправить консольный вывод из пакетного файла в ротируемый файл журнала. Бывает удобно для «разбора полетов»

Проверка Firewall

Также необходимо проверить правила firewall: планировщик должен иметь возможность достучаться до процесса-работника.

Неприятно, что если на узле, где запущен процесс-работник, блокируются входящие соединения — то об этом станет известно только при запуске приложения. В этом случае, если даже до одного узла не получится достучаться — весь клиентский процесс упадет. До этого будет казаться, что все в порядке, поскольку все узлы будут выглядеть как подключенные.

По умолчанию каждый процесс-работник открывает случайный порт. При запуске можно указать прослушиваемый порт, однако в этом случае будет запустить только один процесс.

Использование Dask в собственном приложении

Подключение к кластеру

Подключение к распределенному кластеру происходит очень просто:

Если не указать расположение планировщика — запустится «локальный» кластер в пределах одной машины, но это не то что нужно.

Общие прикладные пакеты

Важно иметь ввиду, что все пакеты, которые необходимы для работы распределенного приложения должны быть установлены и на рабочих узлах кластера. Это касается pandas, numpy, scikit-learn, tensorflow.
Особо критично совпадение версий пакетов на всех узлах кластера для объектов, которые сериализуются.

Что делать, если на узлах кластера отсутствует необходимый пакет? Можно воспользоваться стандартной функцией удаленного запуска функций — и запустить pip

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

Пакеты и модули приложения

Если в состав приложения входят разработанные пакеты или модули, и вы хотите, чтобы программный код из них выполнялся распределенно — то эти пакеты и модули также должны быть распространены на все узлы кластера перед запуском приложения.
Это довольно серьезное неудобство, если вы все еще дорабатываете приложение и пытаетесь его структурировать, и попутно запуская его в распределенной среде Dask кластера.

Есть задокументированный трюк с передачей пакетов и модулей на узлы кластера во время исполнения. Класс Client предлагает метод передачи файлов на узлы upload_file() . После передачи, файл размещается в пути поиска и может быть импортирован процессом работником.

Файл-модуль можно передать непосредственно, а пакет прийдется предварительно запаковать в zip.

Масштабирование joblib

Я использую библиотеку joblib для удобного параллельного выполнения операций в рамках одного компьютера. Поскольку joblib позволяет подменить движок — модификация кода получается довольно простой:

Версия с joblib + dask

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

Работают только два из доступных 16 работников, огромные промежутки между интервалами загрузки.

Время на выполнение одного батча — 10-20 мс, а интервалы между работами может достигать 200мс.

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

Имеет смысл подбирать размер пакета параметром batch_size . Он должен быть не очень маленький — чтобы время обработки на узле кластера было значительно больше времени передачи пакета по сети, но и не очень большим, чтобы десериализация не занимала много времени.
Иногда также помогает подготовить чуть большее количество пакетов с помощью параметра pre_dispatch .

На картинке отмечены области, где процесс вычисления все еще неоптимален.

  • Красные области — простой узла. Они остались, но доля простоя существенно сократилась.
  • Синие области — десериализацию (большие объекты загружаются в память)
  • Черные области — сброс части данных на диск

Теперь время выполнения вычислений для пакета работы занимает 3.5-4 сек, а время на простой измеряется десятками милисекунд. Стало гораздо лучше: видно, что увеличение размера батча и количества пред-запланированных задач увеличили время, выделенное на выполнение, и не добавили много оверхеда.

Этот простой эксперимент показывает, для достижения ожидаемой производительности вычислений параметры batch_size и pre_dispatch очень важны. Одна только их настройка может дать прирост пропускной способности в 8-10 раза за счет полной утилизации узлов кластера.

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

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

Масштабирование GridSearchCV

Поскольку scikit-learn также использует joblib для реализации параллельной работы, масштабирование обучения моделей достигается ровно также — подменой движка на dask

В результате выполнения:

Каждый перебираемый вариант преобразуется в отдельную задачу для dask. Таким образом все варианты распределяется случайным образом по всем доступным процессам-работникам.
При наличии достаточного количества работников в кластере — все работы начинают выполняться параллельно.

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

Заключение

Библиотека Dask — прекрасный инструмент для масштабирования для определенного класса задач. Даже если использовать только базовый dask.distributed и оставить в стороне специализированные расширения dask.dataframe, dask.array, dask.ml — можно существенно ускорить эксперименты. В некоторых случаях можно добиться почти линейного ускорения рассчетов.

И все это — на базе того, что у вас уже есть дома, и используется для просмотра видео, прокрутки бесконечной новостной ленты или игр. Используйте эти ресурсы на полную!

Как создать кластер из двух ноутбуков?

У меня родилась «гениальная» идея: создать соединить мощности двух компов.
Погуглил, такая технология есть, существует и активно используется людьми со всего мира.
Погуглил ещё, оказывается, что это можно сделать на Windows Server и Linux
Ну и соответственно, вопросы:
1.1 Можно ли комфортно работать на Сервере — играть в игры, отвечать на Тостере, смотреть кино? В том числе на кластеризированном?
1.2 Будет ли на кластеризированном линуксе нормально работать Wine и\или подобные средства запуска windows — программ?
Погуглил еще — оказывается, что скорости моего инета для нормального функционирования кластера не хватит, а надо для таких вещей кабельного сообщения компьютеров.
Ну и вопросы:
2.1 Можно ли просто напрямую соединить два компа каким-нибудь таким lan кабелем?
2.2 Если я захочу к этой бандуре подключить еще нетбук, то можно ли просто всё присоединить к подобному Avaya_ERS-5520-48T-PWR-Front.jpgсвитчу и радоваться жизни?

Хар-ки компьютеров:
2.40 Ghz | 2.27 Ghz — оба двухядерные, от intel
4 Gb RAM- одинаково
512 Mb GPU — одинаково, от nvidia
Dell|Asus

  • Вопрос задан более трёх лет назад
  • 12285 просмотров
  • Facebook
  • Вконтакте
  • Twitter

Для того, для чего вы хотите — никак не создать.
Кластер — это даже согласно статье из Википедии, которую вы приводите — это слабо связанная вычислительная система.
Попробую объяснить, используя аналогию.
Вы считаете, что компьютеры можно объединять также, как можно объединять усилия людей, наполняющих бочку водой, таская ее ведрами. Один человек наполнит за час, два — за полчаса, и так далее. Но это процесс, который распараллеливается элементарно.

А на самом деле, кластер работает подобно команде сценаристов, которые пишут сценарий сериала из двадцати серий, работая удаленно по бумажной почте: сначала главный сценарист придумывает персонажей и общий сюжет, записывает это, потом ему нужно разбить его на серии и отослать каждому из сценаристов, указав, какую серию тому нужно прописать в подробностях. Если бы он писал все сам, ему бы понадобилось по неделе на серию, итого — двадцать недель. А съемки можно начинать, когда готова первая серия (через неделю). Поскольку съемки одной серии занимают три дня, съемочная группа будет простаивать четыре дня из каждой недели, пока не будет готова следующая серия (деньги во время простоя тоже расходуются, хотя ничего не производится). Съемки будут, таким образом, завершены через 20*7+3=143 дня.

Наемным сценаристам тоже нужно по неделе на написании серий, но начальная работа главного сценариста тоже занимает неделю, плюс — три дня на доставку «каркаса сценария» наемным сценаристам, три дня на доставку сценария серий обратно, еще пять дней на проверку и исправление нестыковок. Итог — начинать съемки можно только через 25 дней, а не через семь, но продолжать их можно уже непрерывно. Съемки будут завершены через 25+3*20=85 дней.

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

Чтобы всё «летало» в реальном времени в игре, вам нужен один мощный компьютер с многоядерным процессором, мощной видеокартой и быстрой шиной, которая всех их объединяет. А собрать кластер из сотни древних ноутов на медленном Ethernet и получить производительность в сто раз больше в играх — это фантастика из дурацких фильмов про хакеров.

Создание кластера для расчета в OpenFOAM

В статье я расскажу, как можно (при необходимости) быстро и дешево собрать кластер Beowulf на основе домашних компьютеров. Выполню я это с помощью компьютеров находящихся в аудитории университета, используя существующую локальную сеть. Используемые программные инструменты: средства численного моделирования механики сплошных сред OpenFOAM, сетевого протокола прикладного уровня SSH и распределенного протокола файловой системы NFS. Все выполнялось под управлением операционной системы ubuntu 20.04.

Предисловие

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

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

Введение

Определение кластера

Кластер – группа компьютеров, объединенных в локальную вычислительную сеть (ЛВС) и способных работать в качестве единого вычислительного ресурса.

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

Кластер Beowulf

Общеизвестный кластер NASA

Общеизвестный кластер NASA

В настоящее время под кластером типа Beowulf понимается система, которая состоит из одного серверного узла и одного или более клиентских узлов, соединенных при помощи Ethernet или некоторой другой сети. Это система, построенная из готовых серийно выпускающихся промышленных компонентов, на которых может работать ОС Linux, стандартных адаптеров Ethernet и коммутаторов. Она не содержит специфических аппаратных компонентов и легко воспроизводима. Серверный узел управляет всем кластером и является файл-сервером для клиентских узлов. Он также является консолью кластера и шлюзом во внешнюю сеть. Большие системы Beowulf могут иметь более одного серверного узла, а также, возможно, специализированные узлы, например консоли или станции мониторинга. Они конфигурируются и управляются серверными узлами и выполняют только то, что предписано серверным узлом.

Вычислительная среда OpenFOAM

OpenFOAM — это бесплатное программное обеспечение CFD с открытым исходным кодом, разработанное, в основном, компанией OpenCFD Ltd с 2004 года. Оно имеет большую базу пользователей в большинстве областей техники и науки, как коммерческих, так и академических организаций. OpenFOAM имеет широкий набор функций для решения любых задач — от сложных потоков жидкости, включающих химические реакции, турбулентность и теплопередачу, до акустики, механики твердого тела и электромагнитных систем.

Настройка рабочей среды

Физическое соединение устройств

Два и более компьютера нужно соединить друг с другом. Самый простой способ это сделать — задействовать коммутатор и соединить их с помощью витой пары.

Выбор операционной системы

Решено использовать систему Linux, конкретный дистрибутив — Ubuntu 20.04, десктопной и серверной версии соответственно.

Это связано с тем, что по состоянию на 2022 год среда вычисления OpenFOAM, выбранная для расчётов, стабильно работает именно на этом дистрибутиве именно этой версии. Также система Linux, будучи системой с распространяемыми исходными кодами, является основой для кластера Beowulf.

Десктоп-версия

Десктоп-версия — это версия системы, имеющая графический интерфейс. Он нужен будет для удобного взаимодействия с файлами, а также для просмотра результатов расчёта. Десктоп-версия будет стоять на главном компьютере.

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Нажимаем install ubuntu;

Выберите язык (предпочтителен English);

Не изменяем предустановленные программы;

Не изменяем типы инсталляторов;

Выбираем время системы;

Введите имя пользователя (в данном случае используется pisi), а также пароль. Пароли и имена серверов должны быть абсолютно одинаковы для всех компьютеров, связанных с кластером.

После перезагрузите систему (вам предложит это сделать система)

Серверная версия

Серверная же версия будет стоять на всех остальных компьютерах. На них не потребуется работать с файлами, или просматривать результаты. Все остальные компьютеры нужны исключительно, как дополнительные ресурсы для вычислений, и поэтому для них достаточно самой компактной системы с самым малым набором функций.

После того, как вы с загрузочного диска запустите установщик, следуйте серии шагов:

Выберите язык (предпочтителен English);

Не обновляйте установщик;

Не изменяйте настройки клавиатуры;

Не изменяйте настройки сети;

Используйте весь диск для установки и подтвердите его перезапись, если потребуется;

Не изменяйте настройки зеркала;

Не изменяйте настройки файловой системы;

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

Server Snaps оставьте без изменений;

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

Завершения установки

В обоих случаях, вам надо завершить установку, зайдя в директорию Home /home/<user>/, и создать папку OpenFOAM mkdir/OpenFOAM. Должен получиться путь: /home/<user>/OpenFOAM. <user> — это заданное вами имя пользователя (на изображениях в данном документе можно заметить имя «pisi»).

Наличие подкаталогов в текущем каталоге можно проверить с помощью команды ls.

Установка OpenFOAM

Установка OpenFOAM состоит так же из двух этапах и должна производиться всех компьютерах участвующих в объединении, это связано с тем, что OpenFOAM это не программа, а набор библиотек необходимых для произведения расчетов системы.

Для того чтобы установить OpenFOAM необходимо в терминале прописать следующую команду что представлена ниже.

Кратко опишем функционал команды.

curl — команда взаимодействия с интернетом.

-s –- сохранение скачанных фалов в систему.

url — ссылка на скачиваемый файл.

bash — дает возможность создания скриптов.

Примечание: если по каким то причинам не оказалось команды curl, то введите следующую команду в терминал: sudo apt install curl и убедиться что установлена правильная версия системы.

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

Примечания: так как это набор библиотек, то нет практического способа проверить правильность действий, то необходимо проверить их наличие в файловой системе операционной системы.

Для этого необходимо выполнить следующую команду в терминале.

Кратко опишем функционал команды.

cd — это переход в папку по пути.

далее идет путь.

Если в результате выполнения команды не появилось ошибок, то все действия выполнены правильно, в противном случае выполните последовательность действий начиная с скачивания OpenFOAM.

Если проверка прошла успешно, то выполняем команду cd.

Установка и настройка SSH

SSH — это защищенный протокол для удаленного управления операционной системой. Он пригодится для безопасного соединения компьютеров друг с другом.

Десктоп-версия

Десктоп-версия по-умолчанию не имеет встроенного SSH, поэтому его нужно установить, это продемонстрировано на примере ниже.

Других отличий нет. Выполняйте все те шаги, что описаны ниже, для серверной версии.

Серверная версия

В отличие от версии с графическим интерфейсом, серверная версия по-умолчанию имеет в себе предустановленный пакет OpenSSH (точнее, эту опцию можно выбрать при установке), и здесь этап установки не требуется. В противном же случае повторите действия, предназначенные для десктоп-версии.

Следом выполните следующие шаги.

Создаёт директорию SSH. Может выдать ошибку, если директория уже есть.

Назначает права полного доступа для этой директории. Может потребоваться ввести вместе с sudo.

Создаёт новый ключ. Оставьте все поля по-умолчанию.

ssh-copy-id -i /home/<user>/.ssh/id_rsa.pub <user>@<ip>

Копирует ваш ключ на другой компьютер по IP-адресу. Это позволит вам позже входить на этот компьютер без пароля.

<user> — это имя вашего пользователя.

<ip> — это IP-адрес компьютера, куда вы передаёте ключ.

Проверка подключения (должна быть без пароля).

Настройте так все компьютеры. Ключи должны быть переданы каждому сателлиту от сервера, и наоборот.

Примечание: для проверки работоспособности SSH соединение необходимо проверить несколько условий:

Соединение должно работать от каждого устройства к каждому.

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

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

Установка и настройка NFS

Установка NFS для Десктоп-версии

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

Примечание: предварительно необходимо иметь папку в домашнем каталоге, если этого нет, то просмотрите пункт «Завершения установки».

Чтобы установить NFS, необходимо скачать его. Для этого пропишем в терминале следующую команду.

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

Кратко опишем функционал команды.

chown — это изменение владельца файла или папки

nobody:nogroup — сообщает системе что папка не принадлежит не одному владельцу и группе

Предоставим права доступа для папки.

Кратко опишем функционал команды:

777 — это теговое значение прав доступа к последующей папке.

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

Кратко опишем функционал команды:

nano — это встроенный редактор текста, основные команды которого являются: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

В самом редакторе необходимо в конце прописать следующую строку.

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

Примечание: для того чтобы узнать IP-адрес компьютера, в командной строке введите команду ip address, там вы сможете узнать узнать адрес конкретной системы.

После всех вышеописанных действий необходимо произвести монтирование сервера. Для этого пропишем в терминале команду.

Кратко опишем функционал команды:

exportfs — это изменяемый файл.

-a — то применения изменений к нему.

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

Кратко опишем функционал команды:

systemctl — системный диспетчер.

restart — рестарт сервера.

nfs-kernel-server.service — файл сервера .

Настройка утилиты NFS для серверной версии

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

После, по аналогии с десктоп-версией, необходимо изменить файлы настройки сетевой папки. Для этого воспользуемся командой.

После введем в редакторе кода одну строчку, относящуюся к десктоп-версии системы.

Примечание: Ctrl+S (сохранение файла) и Ctrl+X (выход из редактора).

Далее смонтируем точку для того, чтобы сообщить десктоп-версии, что сервер готов к общению.

Примечание: Тут могут возникнуть проблемы, это нормально, значит вы что то сделали не так, как было указано в инструкции, это связано с тем что в Ubuntu нет фиксации ошибок. Для этого необходимо произвести ряд проверок, чтобы определить где произошла ошибка.

Проверьте настройку SSH, произведя подключения со всех устройств ко всем командой: ssh @ .

Проверьте отсутствие запрашиваемого пароля при SSH-соединение..

Проверьте правильность файлов, где прописываются IP-адреса.

Проверьте, чтобы не изменились IP-адреса во время настройки (такой случай возможен).

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

Проверьте одинаковость названий синхронизируемой папки.

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

Начало вычислений

Тест проверки ядер

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

Программа написана на языке С. Исходный код этой программы компилируется в исполняемый файл, именуемый «mpi_hello» (тестовое наименование, наподобие «Hello World!»). Команда компиляции в терминале следующая.

Кратко опишем функционал команды:

mpicc — команда запуска компиляции.

mpi_hello.c — файл с исходным кодом.

-o mpi_hello — выходной файл.

Полный исходный код этой программы приведен в приложении 1, здесь описаны основные моменты её работы.

Данный фрагмент кода последовательно получает три параметра: количество ядер, ранг текущего процесса, и имя хоста. Затем эти данные выводятся в терминал.

Программу можно запустить с помощью команды, представленной ниже.

Кратко опишем функционал команды:

mpirun — запуск исполняемого файла.

./mpi_hello — исполняемый файл.

Результат выводится в консоль.

Результаты работы

Проверка работы программы на нескольких ядрах

Следующий этап — указание количества ядер. Для mpirun это возможно сделать с помощью аргумента «np».

Кратко опишем функционал команды:

-np — указания количества ядер.

Результат работы представлен ниже.

Отчет работы программы по нескольким ядрам

Отчет работы программы по нескольким ядрам

Проверка работы на нескольких компьютерах

С помощью команды “mpirun” в терминале можно также послать скомпилированную программу на несколько компьютеров.

Количество процессоров –- общее для всех компьютеров, а имя файла — это имя файла, где перечислены IP-адреса и количество ядер, которое будет у него использоваться.

Параметр slots отвечает за количество ядер.

Первый адрес, 127.0.0.1, — это локальный адрес компьютера (localhost), с него всегда начинается основная работа. Другие IP-адреса — это IP-адреса других компьютеров.

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

Отчет программы после работы на нескольких компах

Отчет программы после работы на нескольких компах

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

Примечание: предварительно необходимо создать папку -v2006 в папке синхронизируемой системы. Это можно сделать в ручном режиме, если вы создаёте его в десктоп-версии.

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

После необходимо распаковать файл геометрии мотоцикла, для этого воспользуемся командой, описанной ниже, при использовании встроенного разархиватора.

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

Примечание: этот процесс занимает крайне много времени и требует большой объем оперативной памяти. В нашем случае — около 80 ГБ на 3 компьютера. Чтобы не устанавливать дорогостоящую память в компьютер, необходимо увеличить файл подкачки на SSD-диске. Для этого необходимо выполнить команду.

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

Далее, после просчета сетки, можно приступить к запуску самого расчета задачи. Для этого вставим в командную строку текст.

ЗАКЛЮЧЕНИЕ

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

Примечание: точность выводов основана на субъективной оценке в связи с невозможностью составления прогноза работы и скорости вычислений.

Мы провели два теста, на машине из 4-х ядер и одном компьютере и машине из 12 ядер и трех компьютеров. Расчет времени выполнения производился автоматически с записью в файл log, это нужно было для отладки работоспособности кластера, но этот процесс занимает определенное время, которое посчитать не удалось. Однако, так как геометрия была одинаковой и файлы log аналогичные, следовательно приобретенное время в двух тестах было одинаковым и в сравнении друг с другом не будут вносить ошибку. Далее приведена таблица с характеристиками двух тестов, которые мы посчитали уместным.

How to setup a local Linux cluster with VirtualBox on windows

Okezie Okpara

In this tutorial, we will learn how to build a cluster of Linux machines on our local environment using Virtualbox running on a windows machine. We will them assign private static IP address and connect to them from our host windows machine via SSH.

This is necessary If you want to try out a clustered application which requires multiple Linux machines like kubernetes on your local/dev environment.

Ordinarily, you could easily spin new virtual machines in the cloud with digitalocean or simply use a managed kubernetes solution like digitalocean.

But if you are like me who like to have a local version handy as a fallback.

Goals

In this tutorial, we are going to create a cluster of four Linux virtual machines.

  1. Each machine is capable of connecting to the internet and able to connect with each other privately as well as can be reached from the host machine.
  2. Our machines will be named kube-master,kube-node-one, kube-node-two, kube-node-three.
  3. The first machine: kube-master will act as a master node and will have 2vCPUs, 2GB of RAM and 10 GB hard disk.
  4. The other machines: kube-node-one, kube-node-two, kube-node-three will act as worker nodes will have 1vCPUs, 1GB of RAM and 10 GB hard disk.
  5. We will assign our machines static IP address: 192.168.0.50, 192.168.0.51, 192.168.0.52. 192.168.0.53.

Prerequisites

  • A windows machine with at least 8GB of RAM. for windows installed.
  • Familiarity with setting up virtual machines with Virtualbox.
  • An SSH client for windows eg putty, git bash or windows subsystem for Linux (WSL). But in this tutorial, we will be using WSL with a Cmder as a command line tool.
  • An Ubuntu server 64-bit image (16.04+). In this tutorial, we use 16.04.

Step 1 — Create virtual machines on Virtualbox

Create the master virtual machine which we will name kube-master with 2vCPUs, 2GB of RAM and 10 GB hard disk. Make sure to set up the network as follows:

  1. On “Adapter 1” Change the “Attached To” field to “Bridged Adapter” and for “Name” select the primary network adapter of the host computer (in this case Intel dual band wireless).
  2. Select “Adapter 2” Tab and make sure “Enable Network Adapter” is enabled. Use same settings from 1 above.

Adapter 1 will be the primary network adapter with a dynamically assigned IP address while adapter 2 will be the secondary adapter with a statically assigned IP address which we will assign to it.

Then go ahead and create the other virtual machines kube-node-one, kube-node-two, kube-node-three using the above steps. Giving them 1vCPUs, 1GB of RAM and 10 GB hard disk.

Step 2 — Boot the virtual machines

When you start the virtual machines for the first time you are prompted to instal and setup Ubuntu. Follow through with the installation until you get to the “configure network prompt”.

When you get to the configure network prompt, select the first network adapter as the primary adapter.

Also, enable open ssh server in the software selection prompt

Start the newly created machine and make sure it is running. Repeat this for all your virtual machines.

Step 2 — Configure the network adapters

When your VM is all set up, log in to the VM and test the network by pinging any public site. e.g `ping google.com`. If all works well, this should be successful.

You can check the DHCP-assigned IP address by entering the following command:

You will get an output similar to this:

This is the default IP address assigned by your network DHCP. Note that this IP address is dynamic and can change or worst still, get assigned to another machine. But for now, you can connect to this IP from your host machine via SSH.

Next, we will configure the secondary network adapter with a static IP. To do this we will:

1. Edit the `/etc/network/interfaces` file. Using your favourite text editor, open this file as root user (we use nano here).

The initial content of the file will look similar to this:

From the original file contents, you will notice that there are two sections starting with # comments. The first is The loopback network interface and the second is The primary network interface. Now we will add another section that configures the secondary network adapter assigning a static IP address for us.

Append the following snippet to the end of the document.

The important part of this snippet is that it targets our secondary network adapter named enp0s8, it is static and assigns the IP address 192.168.0.50 to our host. Save the file and exit.

2. Run `sudo service networking restart` for the changes to take effect.

3. Verify that both network interfaces are now configured and IP addresses assigned to them by running: `hostname -I` again. Now you will get an output similar to below:

4. Do same for the other virtual machines assigning them 192.168.0.51, 192.168.0.52, 192.168.0.53 respectively.

5. Now try to SSH from one node to the other using their newly assigned static IP address. If all goes well this should be successful.

Step 3 — Setup host machine network

But at this point, you won’t be able to SSH or ping any of the virtual machines from the host using their respective static IP addresses. To do this:

  1. Go to your windows command prompt and run the command:

You will get an output similar to:

From the output, you will notice the currently active network adapter (in this case its the “Wireless LAN adapter Wi-Fi”) has some basic details take note of these details especially the IPv4 Address value.

2. Now go to **Network and sharing centre** from your control panel. Make sure you are currently connected to the internet.

3. Click on the value of Connections which is basically your wifi. This reveals the WiFI status modal popup.

4. Click Properties to reveal you the WiFi Properties modal.

5. Scroll and select Internet Protocol Version 4 (TCP/IPv4) from the list and click Properties.

6. Now edit your network IPv4 settings as follows:

7. By default Obtain an address automatically is checked. Change this to Use the following IP address which will enable the other fields for editing.

8. For IP Address, use the IP address you got from Step 1 above. Also for Subnet Mask, Default Gateway etc.

9. Click Ok to close. Note you may be temporarily disconnected from the internet for a few seconds.

10. Now go back to that modal we just closed, making sure all our settings are still intact.

11. Now click on the Advanced.. button to reveal the Advanced TCP/IP Settings.

12. In the IP addresses section click Add and enter the following:

13. For the IP Address, field enter 192.168.0.49 and for the Subnet Mask field enter 255.255.255.0. This effectively joins our host machine to our cluster’s private network.

14. Click Ok, save all your changes and close out of the modal.

Conclusion

Now we have 4 Linux virtual machines in our cluster each can connect to the other using a static IP, can access the internet and can be accessed from the host machine. With this setup, you can run any clustered application like kubernetes locally.

We can take things further by assigning DNS names to the machines and creating our own local DNS server with dnsmasq but this is beyond the scope of this tutorial.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Школа онлайн с государственным аттестатом