Кластер на OrangePi PC

http://omahs.tumblr.com/post/135658720534/probably-cheapest-cluster-in-the-world-currently

Вполне возможно, что это самый дешёвый и доступный кластер, построенный в домашних условиях. В данный момент он считает задачки seti@home.

Сборка

Сборка не составляет особого труда - вот список материалов для повторения:

  • 4 платы OrangePi PC (One тоже подойдет) с кабелями питания
  • 16 стоек для печатных плат для крепления между собой
  • 4 стойки (коротких) для крепления на подставку или использования в качестве ножек
  • 2 куска оргстекла (верхняя и нижняя крышка)
  • Вентилятор 92 мм
  • 4 уголка для крепления вентилятора
  • 100Mbs Ethernet HUB, желательно с питанием либо 5, либо 12 вольт
  • Патчкорды для соединения Ethernet в необходимом количестве (кстати, поскольку сеть все равно 100 МБит, можно использовать 4х-жильную телефонную лапшу и немного сэкономить на кабеле)
  • Источник питания (об этом позже)
  • Для связи с внешним миром - дешёвый USB WiFi

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

Кластер из OrangePi

А вот так "изделие" выглядит "с тыльной стороны".

Кластер из OrangePi - вид сзади

К сожалению, синей изоленты не было - так что хаб крепим резиночками.

Питание

Каждая из OPI потребляет не меньше ампера (производитель рекомендует источник не меньше 1.5..2A). Вентилятор требует 12 вольт, хаб тоже, хотя бывают и 5-вольтовые модели.

Так что потребуется хороший источник питания с двумя напряжениями.

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

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

Винтажный блок питания

Для "раздачи" 5ти вольт будем использовать модифицированный USB-хаб из дешевых. Для этого можно либо высверлить чип, либо просто отрезать ножки данных, оставив только цепи питания и землю. Я остановился на втором способе, правда внутри проложил еще "толстые" соединения на линии 5В. Ну и повесим ответный molex для соединения с БП. Получается примерно так:

Раздача питания 5в

А вот вся конструкция в сборе:

Кластер OrangePI в сборе

Система

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

Сеть

Самый верхний узел - clunode0, он умеет соединяться по WiFi с внешней сетью, при этом раздает "интернет" на машины clunode1, clunode2, clunode3. Там же работает сервер NFS для общего хранилища и dnsmasq для раздачи DHCP адресов вида 10.x.x.x.

На clunode0 в /etc/network/interfaces примерно такая запись:

auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-scan-ssid 1 wpa-ap-scan 1 wpa-key-mgmt WPA-PSK wpa-proto RSN WPA wpa-pairwise CCMP TKIP wpa-group CCMP TKIP wpa-ssid "MyWiFi" wpa-psk "MyWiFiPassword" post-up /usr/local/bin/masquerade.sh eth0 wlan0 iface default inet dhcp

Ну а masquerade.sh имеет такую запись внутри:

IPTABLES=/sbin/iptables $IPTABLES --table nat --append POSTROUTING --out-interface $2 -j MASQUERADE $IPTABLES --append FORWARD --in-interface $1 -j ACCEPT $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $IPTABLES -A INPUT -i $2 -p tcp --dport 22 -j ACCEPT $IPTABLES -A INPUT -i $2 -j DROP /sbin/sysctl -w net.ipv4.ip_forward=1

Пользователи

На машины clunode1,2,3 импортированы ключи от clunode0, и на каждой из машин заведен пользователь cluster, который в свою очередь имеет запись для sudo:

cluster ALL = (root) NOPASSWD: /sbin/shutdown

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

#!/bin/sh ssh clunode3 'sudo /sbin/shutdown -h now' sleep 3 ssh clunode2 'sudo /sbin/shutdown -h now' sleep 3 ssh clunode1 'sudo /sbin/shutdown -h now' sleep 20 sudo /sbin/shutdown -h now

Полезная нагрузка

В данный момент железка "гоняет" Seti@home в 16 потоков, вполне успешно.

Правда, нельзя так просто взять и поставить Seti@home из репозитариев Debian. Он там чудовищно старый, и нужно собирать из исходных текстов - подходящая от Raspberry Pi 2 инструкция здесь.

Хотя, вроде как там ситуация переломилась и бинарник можно сгрузить с сайта. Не проверял - проще было собрать самому.

Еще можно установить и настроить консольную утилиту boinctui. Выглядит всё вполне пристойно (animated GIF):

Boinctui на OrangePI

Перспективы

Можно развить идею - вот навскидку несколько идеек:

  • Первая плата (clunode0) - load balancer, сlunode2,3 - веб-сервера или приложение, clunode4 - БД ==> микродатацентр :)
  • Hadoop (и такие случаи уже есть, народ строит кластеры на Raspberry)
  • Proxmox кластер, правда я не уверен, что все запчасти доступны для ARM
  • Майнер cryptocurrency, если конечно подберете криптовалюту, которую всё еще выгодно майнить на процессоре и выгодно майнить вообще.

Спасибо, что дочитали до конца.

На корм коту

Магазин открыт!

ещё