Я построил 28-ядерный гигабитный кластер Kraken, состоящий из 7 Raspberry Pi 3 Model B.

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

Окто боли

В октябре 2018 года, более чем через год после построения моего первого кластера Octopi, я официально перерос кластер. Я начал замечать, что узкие места в производительности начались, когда я попытался запустить на нем WordPress, когда загрузка одной страницы только что установленного блога WordPress занимала около 10 секунд! Тем не менее, все это неудивительно, учитывая жалкий одноядерный процессор 700 МГц на каждом узле.

Я тогда окончил университет и получил работу специалиста по данным + инженера полного цикла в стартапе, и я подумал про себя: Что может быть лучше, чтобы построить себе новый кластер?

Kraken

Мой второй кластер был назван Kraken.

кракен (/ ˈkrɑːkən /) [1] - это легендарное морское чудовище гигантских размеров, напоминающее головоногих в скандинавском фольклоре. - Википедия

Кракен - в основном гораздо более крупный и чудовищный осьминог; отсюда и название, символизирующее эволюцию первого кластера. Он был построен из семи Raspberry Pi 3B, питаемых от одного зарядного устройства USB.

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

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

Технические характеристики кластера

Общий ущерб, нанесенный моему кошельку от Kraken, составил 626,63 сингапурских доллара или 449,73 доллара, что было практически всем, что у меня осталось за месяц после вычета расходов и выплат по кредиту на образование.

Список деталей

Примечательно то, что я выбрал карту MicroSD на 32 ГБ в качестве хранилища для первого узла, поскольку я планировал, что она будет основным узлом установки роя Docker, и ожидал, что мне понадобится дополнительное хранилище для создания и развертывания образов Docker.

Обновление Kraken Gigabit

Год спустя, в сентябре 2019 года, я обнаружил, что регулярно превышаю предел пропускной способности в 100 Мбит / с на встроенных Ethernet-портах Raspberry Pi 3B, особенно при передаче больших файлов на машины или из них, когда скорость передачи колеблется около печально 8 МБ / с.

Я огляделся и нашел сообщение в блоге Джеффа Герлинга, в котором узнал, что могу использовать гигабитные адаптеры Ethernet для увеличения пропускной способности до чуть более 200 Мбит / с. Поэтому я купил кучу дешевых китайских USB-гигабитных сетевых адаптеров и гигабитный коммутатор и приступил к обновлению.

Список дополнительных деталей

После обновления Кракен выглядел так:

Это обновление увеличивает общую стоимость кластера до 708,99 сингапурских долларов или 508,84 доллара.

Контрольные точки

Запустив iperf перед обновлением, мы видим максимальную пропускную способность 93,1 Мбит / с.

~ ❯ iperf -c 192.168.3.11
------------------------------------------------------------
Client connecting to 192.168.3.11, TCP port 5001
TCP window size:  129 KByte (default)
------------------------------------------------------------
[  4] local 192.168.3.71 port 57041 connected with 192.168.3.11 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   111 MBytes  93.1 Mbits/sec

Запустив iperf после установки гигабитного адаптера, мы видим максимальную пропускную способность 224 Мбит / с.

~ ❯ iperf -c 192.168.3.11
------------------------------------------------------------
Client connecting to 192.168.3.11, TCP port 5001
TCP window size:  145 KByte (default)
------------------------------------------------------------
[  4] local 192.168.3.71 port 57298 connected with 192.168.3.11 port 5001
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec   268 MBytes   224 Mbits/sec

С помощью этого простого мода я получил 131 Мбит / с на узел. Однако это все еще только теоретические скорости, поскольку типичные сценарии использования включают запись данных, полученных из сети, на диск, но iperf принимает данные только из сети и не записывает данные на диск.

Некоторые предостережения

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

Кроме того, фактическая пропускная способность по-прежнему ограничена пресловутой общей шиной USB 2.0 в моделях Raspberry Pi с 1 по 3.

Для непосвященных теоретическая однонаправленная пропускная способность 480 Мбит / с на одной шине USB 2.0 распределяется между портом Ethernet, слотом для SD-карты и всеми портами USB.

Распределение пропускной способности может выглядеть так:

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

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

Стоит ли строить этот кластер?

Эта сборка для вас, если вы:

  • Вы хотите изучить Docker и связанные с ним фреймворки
  • Вы не хотите тратить целое состояние на приобретение нескольких Raspberry Pi 4B для создания кластера.
  • Хотите изучить Kubernetes

Эта сборка не для вас, если вы:

  • Уже знакомы с экосистемой Docker
  • Ищете высокопроизводительные домашние установки

Мои два цента

Я настоятельно рекомендую создать этот кластер всем, кто хочет погрузиться в Docker и Kubernetes по двум основным причинам.

Во-первых, этот кластер совместим с последними версиями официально поддерживаемых образов Docker. Raspberry Pi 3B работают на архитектуре ЦП armv7, которая на сегодняшний день является самым низким общим знаменателем среди процессоров Arm.

Последние процессоры Arm (arm64) обратно совместимы со всем кодом, написанным и скомпилированным на armv7. Напротив, процессоры arm64 не имеют обратной совместимости с процессорами armv6 (Raspberry Pi 1 и 2), поэтому они, по сути, выводятся из сообщества.

Во-вторых, этот кластер идеально подходит для всех приложений, кроме наиболее требовательных к пропускной способности, от размещения вашего собственного блога, службы синхронизации файлов, менеджеров медиабиблиотек, средств сокращения ссылок, приложений для создания заметок и т. Д. Единственный раз, когда он не будет работать так, как задумано, - это когда ваше приложение требует интенсивной постоянной записи, например, при кодировании видео, учитывая узкие места шины USB 2.0 в Raspberry Pi 3, проблема решена только в Raspberry Pi 4.

В целом, создание кластера Raspberry Pi 3, на мой взгляд, является наиболее экономичным способом изучения Docker и кластеризации в целом и останется таковым в обозримом будущем. Так что, если вы только начинаете знакомиться с Docker, я настоятельно рекомендую эту сборку.

Что дальше?

В следующем посте из этой серии я представлю кластер Leviathan, который я построил специально для приложений с большим количеством операций ввода-вывода и может транскодировать видео в реальном времени и передавать видео в формате HEVC - ›h264.

Первоначально опубликовано на ikarus.sg 6 июля 2020 г.