Свой первый “кластер” из одноплатных компьютеров я построил почти сразу после того, как микрокомпьютер Orange Pi PC начал набирать популярность. “Кластером” это можно было назвать с большой натяжкой, ибо с формальной точки зрения это была всего лишь локальная сеть из четырёх плат, которые “видели” друг друга и могли выходить в Интернет.
Устройство участвовало в проекте SETI@home и даже успело что-то насчитать. Но, к сожалению, никто не прилетел забрать меня с этой планеты.
Однако, за всё время возни с проводами, разъёмами и microSD-картами я многому научился. Так, например, я выяснил, что не стоит доверять заявленной мощности блока питания, что было бы неплохо распределять нагрузку в плане потребления, да и сечение провода имеет значение.
И да, пришлось “колхозить” систему управления питанием, ибо одновременный старт пяти одноплатников может потребовать стартовый ток порядка 8-10а (5*2)! Это немало, особенно для БП, сделанных в подвалах страны, где мы так любим заказывать всякие… интересные гаджеты.
Начну, пожалуй, с неё. Задача свелась к относительно простым действиям — через заданный промежуток времени последовательно включить 4 канала, по которым подаётся 5 вольт. Самый простой способ реализовать задуманное — Arduino (коих у каждого уважающего себя гика в избытке) и вот такая чудо-плата с Али с 4мя реле.
И знаете, оно даже заработало.
Однако, “холодильник-style” щелчки при старте вызывали некоторое отторжение. Во-первых при щелчке пробегала помеха по питанию и нужно было ставить конденсаторы, а во вторых вся конструкция была довольно крупной.
Так что в один прекрасный день я просто заменил блок реле на транзисторные ключи на основе IRL520.
Это решило вопрос с помехами, но поскольку mosfet управляет “нулём”, пришлось отказаться от латунных ножек в стойке, дабы не соединить случайно землю плат.
И вот, решение отлично тиражируется и уже два кластера работают стабильно без всяких сюрпризов. Just as planned.
Но, вернёмся к тиражируемости. Зачем покупать блоки питания за ощутимую сумму, когда буквально под ногами есть много доступных ATX ?
Мало того, на них есть все напряжения (5,12,3.3), зачатки самодиагностики и возможность программного управления.
Ну тут я особо распинаться не буду — статья про управление ATX через Ардуино есть вот здесь.
Ну что, все таблетки подъедены, марки тоже наклеены ? Пора объединить это всё воедино.
Будет один головной узел, который соединяется с внешним миром по WiFi и отдаёт " интернеты" в кластер. Он будет питаться от дежурного напряжения ATX.
Фактически, за раздачу инета отвечает TBNG.
Так что при желании узлы кластера можно спрятать за TOR.
Также, будет хитрая плата, подключенная по i2c к этому головному узлу. Она сможет включать-выключать каждый из 10 рабочих узлов. Плюс, будет уметь управлять тремя вентиляторами 12в для охлаждения всей системы.
Сценарий работы такой — при включении ATX в 220в стартует головной узел. Когда система готова к работе — он последовательно включает все 10 узлов и вентиляторы.
Когда процесс включения закончен — головной узел будет обходить каждый рабочий узел и спрашивать мол, как мы себя чувствуем, какая мол температура. Если одна из стоек греется — увеличим обдув.
Ну и при команде отключения каждый из узлов будет аккуратно погашен и обесточен.
Схему платы я рисовал сам, поэтому выглядит она жутко. Однако, за трассировку и изготовление взялся хорошо обученный человек, за что ему большое спасибо.
Вот она в процессе сборки
Вот один из первых эскизов расположения компонент кластера. Сделан на листке в клетку и увековечен через Office Lens телефоном.
Вся конструкция помещается на листе текстолита, купленного по случаю.
Примерно так выглядит расположение узлов внутри. Две стойки по пять плат.
Тут проглядывается управляющая Arduino. Она соединена с головной Orange Pi Pc по i2c через конвертер уровней.
Ну а вот финальный (текущий вариант).
Итак, все что нужно — это написать несколько утилит на Питоне, которые бы всей этой музыкой дирижировали — включали, включали, регулировали скорость вентилятора.
Не буду утомлять техническими подробностями — выглядит примерно так:
1 |
|
Поскольку узлов у нас уже целых 10, берём на вооружение Ansible, который поможет , например, правильно выключить все узлы. Или запустить на каждом монитор температуры.
1 |
|
Меня часто в пренебрежительном тоне обвиняют, мол это просто локальная сеть одноплатников (как я уже упоминал в самом начале). Мне, в целом, насрать на чужое мнение, но пожалуй, добавим гламура и организуем docker swarm cluster.
Задача весьма простая и выполняется меньше чем за 10 минут. Потом запустим на головной ноде экземпляр Portainer, и вуаля!
Теперь можно реально масштабировать задачи. Так, в данный момент в кластере работает майнер криптовалюты Verium Reserve. И, довольно успешно. Надеюсь, ближайший туземун окупит съеденное электричество ;) Ну или сократить количество вовлеченных узлов и майнить что-нибудь ещё типа Turtle Coin.
Если хочется полезной нагрузки — в кластер можно закинуть Hadoop или устроить балансировку веб-серверов. Готовых образов в интернете много, да и обучающего материала достаточно. Ну а если образ (docker image) отсутствует — всегда можно собрать свой.
Чему меня это научило ? В целом, “стек” технологий очень широкий. Судите сами - Docker, Ansible, Python, прокачка Arduino (прости господи, ни к ночи будет сказано), ну и шелл конечно же. А так же KiCad и работа с подрядчиком :).
Что можно сделать лучше ? Многое. По софтовой части было бы неплохо переписать управляющие утилиты на Go. По железной — make it more steampunkish — КДПВ в начале отлично задирает планку. Так что есть, над чем работать.
Роли исполняли:
- Головной узел — Orange Pi PC с usb wifi.
- Рабочие узлы — Orange Pi PC2 x 10.
- Сеть — 100 мбит TP-link@16ports.
- Мозг — Клон Arduino на базе Atmega8 + конвертер уровней.
- Сердце — контроллер питания АТХ с блоком питания.
- Софт (душа) — Docker, Ansible, Python 3, немного шелла и чуть чуть лени.
- Потраченное время — бесценно.
В процессе экспериментов пострадала пара плат Orange Pi PC2 из-за перепутанного питания (очень красиво горят), ещё одна PC2 лишилась Ethernet (это отдельная история, в которой я не понимаю физики процесса).
Вот вроде бы и вся история “по верхам”. Если кто-то считает её интересной — задавайте вопросы в комментариях. И голосуйте там же за вопросы (плюсуйте — у каждого коммента есть кнопка для этого). Наиболее интересные вопросы будут освещены в новых заметках.
Спасибо, что дочитали до конца.