Кластер на OrangePi PC

2016-04-22
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 примерно такая запись:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 имеет такую запись внутри:

1
2
3
4
5
6
7
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:

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

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

1
2
3
4
5
6
7
8
#!/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, если конечно подберете криптовалюту, которую всё еще выгодно майнить на процессоре и выгодно майнить вообще.

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


В массы

В трубу