Pull to refresh

Green server для PET-проектов на базе Raspberry Pi – часть вторая(большой брат)

Reading time6 min
Views9.5K

После не самого удачного опыта с Raspberry Pi 2 B в качестве домашнего сервера, я на пару лет бросил идею с домашним хостингом. Но количество PET проектов только увеличивалось. Тогда я раздобыл старенькую рабочую лошадку - полноразмерный HP сервер 1U с 8gb оперативной памяти, intel xeon. Разместил этот юнит в колокейшине и платил 35$/месяц за размещение. Помимо Ubuntu Server, там ещё стоял Windows Server для разработки и тестирования ASP.NET сервера. Пока один из проектов приносил прибыль, мне было выгодно размещать сервер в колокейшине. Через год, проект приносящий прибыль - заморозили, а привычка иметь собственный DEV сервер - осталась. Тогда я решил запустить этот сервер дома, даже не задумываясь о том, сколько шума он будет издавать. Чтобы вы понимали, я жил в панельном многоквартирном доме. И ко мне иногда приходили соседи с вопросом: «А чего у вас так долго пылесос работает?». Конечно же, мне это быстро надоело и я отключил сервер, положив на полку как сувенир. А без сервера было скучно…

Через некоторое время, один из моих проектов заинтересовал Швейцарскую компанию, которая занимается продажей золота. Если вкратце, это сервис, который выполняет работу ERP системы(учёт клиентов, контрактов, хранение документов, pdf сервис и всяческие отчёты). Этот проект необходимо было адаптировать под потенциально клиента, попутно переписать с устаревшей версии ASP.NET и всего стека Microsoft, на что-то быстрее и проще. В этот момент я выбрал GoLang, PostgreSQL, S3, Docker и парочку вспомогательных технологий, так как имел опыт работы с ними. Так вот, это эксперимент и клиент может в любой момент сказать, что ему это решение не подходит. Было решено, что хостить буду его - дома, дабы избежать лишних расходов и не тратить время на настройку облачных служб. Ну и хотелось попробовать решить проблему с предыдущей версией малинки.

В качестве решения проблем с производительностью, решил приобрести Raspberry Pi 4B. Но не базовую версию, а сразу раскошелится на 8Gb RAM, а вдруг пригодится(тогда цены были по приятнее, чем сейчас). Малинка пришла спустя пару дней, а переходник с micro HDMI на обычный HDMI - спустя две недели. После чего я установил RaspbianOS и был огорчён тем, что ОС не поддерживала 64-bit(но сейчас она уже вышла из беты - https://habr.com/ru/news/t/649431/). Значит никакой графики и экспериментов с интерфейсом, решил я, устанавливая Ubuntu Server 64-bit. Подключил это дело к роутеру, выставил статический IP-шник и начал устанавливать GoLang, Postgres. Установка занимала очень много времени, а когда доходило время до тестов базы данных - становилось очень больно. Узким местом оказалась SD карта.

Накопитель

Моя microSD карта была маловатой(16GB), в связи с чем решил приобрести карту на 32GB от Samsung с максимальными скоростями чтения и записи. Но добиться хороших показателей в работе с файловой системой - не удалось. Тогда я узнал, что данная модель малинки может запускать OS не только с microSD, а ещё и с USB накопителя. Напомню, что у model 4B есть два порта USB 3.0, помимо стандартных USB 2.0. Куда я подключил карман со стареньким SSD на 64gb, который достался мне с предыдущей работы. Скорости чтения и записи выросли в разы, а точнее в 10 раз. Конечно без танцев с бубном не обошлось, оказалось что не все карманы поддерживаются и корректно работают на скоростях доступных для порта USB 3.0. Мне - повезло, второй карман от AgeStar оказался подходящим, в отличие от noname китайского переходника. Пришлось заклеить изолентой диод на кармане, так как он ночью мог «вызвать приступ эпилепсии», за счёт своей яркости. Недавно наткнулся на сайт где собрали информацию по подходящим моделям карманов: https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for-ssd-flash-drives/

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

Нашел статью на Хабре с использованием NVMe через USB переходник: https://habr.com/ru/company/ruvds/blog/530948/. Скорости таки выше чем у sata, но не в разы:

Результаты тестирования на Samsung 860 Evo-Series 250GB 2.5" SATA III V-NAND (MLC)
Результаты тестирования на Samsung 860 Evo-Series 250GB 2.5" SATA III V-NAND (MLC)

А вот разница между NVMe и SATA в записи на диск файла размером 500 Мб из памяти:

  • NVMe: 524288000 bytes (524 MB, 500 MiB) copied, 2.63385 s, 199 MB/s;

  • SATA: 524288000 bytes (524 MB, 500 MiB) copied, 2.7568 s, 190 MB/s.

Борьба с тротлингом

После того как удалось добиться адекватных скоростей накопителя, с базой данных стало приятно работать. Также npm пакеты быстренько загружались, хотя, кому я вру, всё ещё медленно, но значительно быстрее чем было раньше (кстати, в моём проекте папка node_modules занимает в районе 1.2gb). Во время тестирования сервера замечал притормаживание, сначала предполагал что это процессор сильно перегружен(такое часто встречалось на второй малинке, такое ощущение что расшифровка ssl сертификата заставляла задуматься сервер - но не могу это утверждать). Потом оказалось что это проблема с блоком питания. По какой-то причине, блок питания не выдавал больше 1А, хотя малинке нужно до 3А. Взял блок(20W) от iPad Air(4) с его же кабелем. После чего проблема с питанием пропала, но появился тротлинг из-за перегрева процессора.

Много вариантов радиаторов есть на рынке для малинки. Почитав отзывы, понял что tower вариант - один из самых эффективных, ещё и с активным охлаждением. После установки радиатора с активным охлаждением, проблема с тротлингом - пропала, температура процессора была в районе 35 градусов. Спустя пару недель пришлось разобрать вентилятор охлаждения и отковырять диоды, которые раздражали своим свечением ночью. Помимо этого, раздражал и шум, который издает тот самый вентилятор ночью. Для решения этой задачи, я решил написать миниатюрную программу, которая запускает кулер исключительно днём и при условии достижения пороговой температуры https://github.com/stalko/pi_fan_scheduler. Для управления включением/отключением использовал драйвер двигателя из набора от Arduino проектов. Данная система поработала около 3‑х месяцев, после чего я решил вообще отключить кулер и посадить радиатор на термопасту(вместо термопрокладки), так как температура, без кулера, не поднималась выше 52 градусов. То есть пассивного охлаждения было - достаточно. А с термопастой температура упала до 47 и выше - не поднималась.

Что по софту?

  • Nginx - куда же без него. 

  • Cerbot - создание и авто продление ssl сертификатов. 

  • Minio - по сути это как S3 хранилище, работает просто и библиотеки есть для всего (по крайней мере есть такое ощущение. Для него обязательно платформа 64bit!

  • PostgreSQL 11 - даже без настроек, база работает очень быстро. Единственное что, не могу утверждать будут ли работать все дополнения(например как PostGIS, хотя должны, я потом проверю).

  • Docker - отлично работает, в целом очень рад, что благодаря контейнерной виртуализации, проекты так легко запускать и поддерживать. Там же крутится GoLang, Redis, ReactJS/Typescript, Weasyprint(для генерации PDF из HTML страниц).

  • Github-actions - кто не знает, это возможность использовать собственный сервер для сборки, тестирования и публикации своего github проекта. Github предоставляет ограниченное количество времени в месяц на выполнения Actions в бесплатной подписке. А вот если вы используете свой хостинг, ограничений - нет. Я даже умудрялся билдить проект на малинке под flutter web.

  • Mongodb - собственно, тут тоже нет ничего необычного.

  • Plex Server - использовал не долго, так как нашел возможность поднять его напрямую в NAS.

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

Итог

Данный сервер у меня уже чуть меньше года, около 10 месяцев. За это время у меня и других сотрудников не было ни единой проблемы связанной с тем, что мы используем малинку в качестве DEV сервера. Не было зависаний, как на предыдущей версии Model 2B. Никого из моей семьи не тревожит наличие данного сервера. А его потребление в районе 5W. 

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


Учитывая что вторая Raspberry Pi Model 4B на 4gb лежит без дела, пробовал на ней запускать Windows on ARM. Играл в герои и "наслаждался" зависаниями при работе системы, даже при переходе на SSD, вместо microSD карточки. Также попытался установить Steam, но постоянно выскакивали ошибки. В общем, Windows - не готов ещё для этой модели малинки.

Если вы также не равнодушны к технологиям и алгоритмам, подписывайтесь на мой телеграм канал - https://t.me/stalko_tech. Всем хорошего настроения!

Tags:
Hubs:
Total votes 8: ↑7 and ↓1+6
Comments37

Articles