[Из песочницы] Дешёвый сервер из китайских запчастей. Часть 1, железная

Дешёвый сервер из китайских запчастей. Часть 1, железная

header.jpg
Размытая кошка позирует на фоне настраиваемого сервера. На заднем плане — мышка на сервере

Привет, Хабр!

В жизни каждого человека иногда назревает необходимость апгрейда компьютера. Иногда это покупка нового телефона взамен разбитого или в погоне за свежими андроидом или камерой. Иногда — замена видеокарты, чтобы тянула игру на минималках. Иногда — установка SSD в ноутбук, на который вы вкорячили десятую винду, а ей не очень нравится жить на Core2Duo и 2.5 гигабайтах адресуемой памяти, и она всё время выгружает неиспользуемые страницы в файл подкачки, изничтожая и без того не великую скорость обмена с 32-гиговым диском.

Моя история — апгрейд сервера, который был собран ещё на первом курсе института. Мои потребности за прошедшие шесть лет выросли, и он, конечно, получил прибавку как в оперативной памяти, так и в дисковой. Проблема в том, что с новыми знаниями были получены новые амбиции — желание применить эти знания на практике — и он с ними мог уже не совладать.

Сначала будет немного скучного вводного текста, а потом пойдут картинки.


Чисто для того, чтобы было понятно, какой сервер есть сейчас:

CPU: Core i3–2130 4 потока, 3.4 GHz
RAM: DDR3 8 GiB
SSD: 250 GB

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

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


  • Хостинг пары-тройки статических сайтов. Сейчас этим занимается нгинкс, но с не самым лучшим образом оформленными конфигами. Их тоже надо будет поправить, но про это — во второй части.
  • Хостинг просто статических файлов. Например, картинок из этой статьи. Они тоже идкт через нгинкс, но загружаются они через WinSCP, что неудобно. Надо бы накопать подобие myOwnCloud, чтобы можно было легко и непринуждённо заливать картинки на сервер.
  • Билд-сервер для пет-проектов. Сейчас это Дженкинс.
  • Различные стенды для оных проектов: девелоперский, интеграционные тесты и прод. До прода пока дела не дошло, но стенд только один, хотя и в докере.
  • Какие-нибудь игровые сервера, если друзьям приспичит поиграть в что-то, что требует сервера: Starbound, Minecraft, Squad (хотя там нужно минимум человек сорок). Да хоть CS 1.6.
  • Виртуалки для друзей, если им вдруг срочно потребуется что-то где-то хостить. Или для себя, чтобы иметь своеобразный VDI. Чем загрузить — найдётся, было бы железо.

Политически отдалённые планы:


  • Торрентокачалка: чтобы поддерживать редкие раздачи на рутрекере. Правда, надо разобраться с тем, как их автоматизированно скачивать, где их хранить, не будет ли провайдер против постоянного фона раздачи и, главное, не заинтересуются ли дяди в погонах терабайтами целенаправленно распространяемых музыки с книгами.
  • Точка выхода из какого-нибудь TORа: мило, но нет. По той же самой причине.

Тем не менее, можно отдавать часть мощностей под аналог ныне закрытой SETI@Home. Может, знакомый с этим хабраюзер подскажет, куда можно деть пыл?


Выбор платформы

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

На Хабре регулярно упоминается дешёвое б/ушное оборудование: будь то раздача серверов оранжевым человеком или недавняя статья про б/ушные флеш-ускорители. Профессиональное оборудование стоит дорого. Для разработчика в Москве терпимо, но дорого.

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

Итак, цель — собрать сервер из б/ушных (читай — дешёвых) запчастей и оставить пространство для незначительного апгрейда в ближайшие лет пять. Такие запчасти дешевле новых, а ресурса для размеренного домашнего использования в них может быть ещё достаточно. (Эту цель я сочинил уже после того, как собрал сервер. Всё в лучших традициях написания диплома)

Как следствие из цели, оборудование должно иметь одно из лучших соотношений «попугай/рубль», где разрядность попугая зависит от типа оборудования: оперативка — объём (не быстродействие, нет), диск — объём (и быстродействие), процессор — тут сложно. Пусть это будут синтетические попугаи бенчмарка.

Желательно, чтобы сервер стремился к бесшумности. Экзотики в виде кастомных теплотрубок и безвентиляторных кулеров не обещаю, но серверу предначертано стоять в спальне aka удалённом офисе aka моей комнате, так что хотелось бы, чтобы он в режиме простоя не ревел, как реактивный самолёт на взлёте.

Отправная точка — дешёвые китайские ксеоны, о которых я узнал в незапамятные времена, пожалуй, тоже с Хабра. В комментариях к одной из проходных новостей упал уголёк холивара «Intel против AMD». Не сравнить нельзя, вдруг новые райзены действительно лучше интеловских процессоров — я не следил за ними уже лет пять, а то и больше.

Итак, в сравнении участвуют две стороны с примерно одинаковым показателем попугаев по мнению cpubenchmark: Ryzen 7 2700, Ryzen 7 2700x, пара Xeon E5–2689, пара E5–2690, пара E5–2696v2 и текущий Core i3–2130. Конечно, я сравнивал и другие процессоры, например, новые Core i7, новые Ryzen 7 и Ryzen 7 2600, но основной интерес представляет собой именно этот срез: они примерно одинаковы по вычислительной мощности. В конце концов, это не попытка разрешить холивар, а выбор наиболее подходящего мне процессора. E5–2696v2 и i3–2130 представлены лишь для сравнения с другими б/ушными процессорами и текущим сервером.


Таблицу рассматривать скучно, давайте посмотрим на график абсолютных попугаев:
p.png

Я думал опустить этот график, но тогда пришлось бы смотреть глазами в таблицу, а это не все любят делать. Так что это обучающий график. Слева — шкала чего бы то ни было, в этом случае — абстрактных синтетических попугаев. Подписи снизу — процессоры. Слева — пара райзенов, по центру — пара одиночных и парных ксеонов. Путано, да, но это факт. Справа — два ксеона второго поколения и процессор текущего сервера.

Ознакомившись с расположением процессоров, стоит взглянуть на график стоимости одного попугая:
ppr.png

Из него видно, что самое выгодное — брать одиночный ксеон первого поколения. Двойные ксеоны чуть хуже одинарных: стоимость возросла в два раза, а кпд — в 1.7 раза, то есть соотношение снизилось. А вот ксеон второго поколения уже не выгоден: стоимость за попугая уже приближается к райзенам.

А райзены чертовски энергоэффективны в пересчёте на попугая:
ppw.png

Надо признать, в этот момент я испытал гордость за прогресс человечества и AMD. Это уже не экстенсивный путь развития, это попытки выжать максимум из куска кремния. E5–2690 вышел в 2012 году, а Ryzen 7 2700 — в 2018. Троекратный рост энергоэффективности за шесть лет — не возраст для технологии. А, ну и Core i3–2100 где-то совсем незаметен в углу. Не будем про него.

Промежуточный вывод: райзены рвут в соотношении «производительность/потребляемая энергия». Или это былинный разный способ замера TDP у AMD и Intel. А б/ушные ксеоны первого поколения рвут по соотношению «производительность/цена».

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


Прочее сопутствующее железо

На самом деле, выбор AMD vs Intel ограничивает не только применяемый процессор. Процессоры Zen+ используют память стандарта DDR4 (тыц), а Sandy Bridge — DDR3 (тыц). DDR4–2933 теоретически в 1.87 раза быстрее DDR3–1600, если я хоть что-то в этом понимаю. Нет, я помню из институтского курса, как работает DDR, со всеми этими ¬CS, RAS, CAS и прочими. И Burst Mode. Просто не хочу в это углубляться, ибо помню очень смутно, да и DDR3 уже неявно выбран процессором, смысла мучаться нет.

К тому же 16 гигов DDR4–2600 стоит столько же, сколько 32 гига DDR3–1866* с ECC…

*Оно не 1866, а 1778. Понятия не имею, почему сумрачный китайский гений не смог осилить 1866, но и не стал спускаться до стандартных 1600 МГц…

Ограничения по сокету и типу памяти влияют и на выбор материнской платы: за те же 7к рублей можно взять китайскую плату с максимальными 256 гигабайтами оперативки, а любая AM4-сокетная имеет максимум 4 слота под оперативку, то есть ограничена 64 гигабайтами.

Выбор двухсокетной материнской платы ведёт за собой особые требования к блоку питания: у него должны быть два восьмипиновых контакта для питания процессора. Может, от видеокарты и подойдут, но там немного разной формы штырьки, я решил не рисковать и не читать документацию, благо блоки питания с нужными требованиями существуют.

Ещё у этой материнской платы некультурно расположены сокеты: расстояние между ними чуть меньше 10 сантиметров, что затрудняет установку двух кулеров параллельно. Изначально я хотел поставить кулеры так, чтобы забор воздуха происходил из щели между ними, но об этом ниже.

Для хранения данных я изначально хотел взять тот SSD, который уже есть в старом сервере, под систему, но решил взять с разъёмом M2 Crucial P1 на 1TB. На материнской плате есть шесть разъёмов SATA, и в них я планировал подключить шесть жёстких дисков WD Red 2TB, но пока я раздумывал, стоит ли тратить ещё 12к рублей на них, их уже купили. Так что настройка ZFS-рейда во вторую часть статьи не входит. Но это потом, повествование обратно про SSD. Гораздо более профессиональный обзор на него можно прочитать здесь. Его фишка в том, что он дешёвый. Сами посмотрите на этот график записи:

cache.png

На него единовременно можно записать 75 гигабайт, а потом он становится хуже жёсткого диска. Спасибо, что хоть не начинает вращаться. А, и ещё его можно перезаписать всего 200 раз. Из чего он вообще сделан?!

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

Ресурс перезаписи в 200 раз соответствует примерно 109 гигабайтам в день на протяжении пяти лет. 109 гигабайт в день — не то же самое, что 75 гигабайт единовременно. Да и с чтением у него всё нормально. Не лучшая производительность среди M2-дисков, но соответствует тому уровню записи, что он показывает в пределах кеша.


Сборка

Если до этого был преимущественно псевдотехнический текст, перемежаемый графиками, то сейчас пойдут картинки, разбавленные художественным повествованием.

Внезапно утром вторника позвонил курьер Почты России и сказал, что сегодня приедет с посылкой. Я обычно забираю посылки сам, а тут на карантине решили напрячь отдел доставки, видимо.

1parcel.jpg
Внешний вид посылки

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

2stuff.jpg
Содержимое коробки

К материнской плате поставляется целый лист с инструкцией! О сигналах спикера надо догадываться самому. На сайте написано, что оранжевые слоты оперативки — основные, надо ставить именно в них. Инструкция же бесполезна чуть менее, чем полностью. Я кнопку включения по ней подключил. Кстати, на коробке есть единственная надпись — MOTHERBOARD. Она не заслуживала отдельной фотографии, но упоминания определённо заслужила.

Вытаскиваем корпус, пылесосим. На самом деле, не стоило его доставать, от него оказались одни мучения. Но он эстетично выглядит. Выглядел…

4chassis.jpg
Корпус, вид к верху ногами

В корпусе есть сказёвые салазки. (А я планирую 3.5» диски. Придётся вынуть плату)

5scsi.jpg
Место под диски

Ещё на лицевой панели есть быстрозаменяемые вентиляторы. Наверняка шумны.

6fans.jpg
Они управляются чем-то более сложным, чем просто напрямую материнской платой

Снимаем верхнюю крышку и смотрим, что внутри. Если открутить пару винтов, то можно сдвинуть дисковое пространство и освободить место для манипуляций. А материнская плата формата E-ATX, она занимает почти всё место в сервере.

7inner.jpg
Родной блок питания

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

8nopsu.jpg
Вот она слева, злополучная чёрная полоса!

Я уже устал выбирать наиболее удачные фотографии, отсеивать те, которые не нужны для повествования, обрезать картинки и грузить их на сайт. Тем временем наступает следующий день, а у меня на столе только китайские запчасти. Приходится спешно оформлять заказ и мчаться в магазин на другой конец Москвы.

9nix.jpg
У входа в магазин

Торговый зал закрыт, работает только выдача заказов. Хорошо, что была солнечная погода, не знаю, как пришлось бы в дождь. Заказы надо называть через видеодомофон, жаль, что это мало объяснятся. Было бы неплохо напечатать хоть какую-нибудь инструкцию, чем «соблюдайте дистанцию 2 метра». Ожидание не дольше десяти минут, здорово. Едем обратно.

10loot.jpg
Два кулера, один блок питания и махонький SSD

Поскольку кулеры, подходящие по габаритам корпуса были дорогие и шумные, пришлось выбрать негабаритный вариант. Это избавило от мук выбора с блоком питания: тихий ATX-формата, но с ним придётся снять крышку, или одноюнитовый, но шумный и дороже на две тысячи рублей. Начинаем примерять покупки. Изначальная задумка двух кулеров — забирать воздух из центра, но сдвигающаяся ёмкость для дисков внесла коррективы и пришлось переставить вентиляторы на последовательный продув. Будет интересно наблюдать на одном кристалле температуру на пару градусов выше, чем на другом.

11fitting.jpg
Пока ещё без термопасты

Протираем основание кулера и процессор спиртом. Питьевым. Но он уже пару лет как технический, перорально лучше не применять. Равномерно наносим термопасту чем-нибудь плоским. На самом деле, я плохо разбираюсь в процессе нанесения термопасты, но результаты моих работ всегда приносили положительный результат. Видимо, тут сложно напортачить, если даже клей «Момент» способен работать годами, судя по байкам. Обычно я использую кусок ненужной пластиковой карточки, но его под рукой не оказалось. Оказался на её месте новомодный безногий четвёртый пень. Не беспокойтесь, после процедуры я протёр его спиртом и положил обратно на полку.

12pentium.jpg
Что-то странное и беспокоящее
Нанесение неидеальное, да и кулер я прижимал не полностью: видно смещение «лысого» места относительно центра.

13thermo1.jpg
Пристрелка

Добавляем дополнительный слой термоинтерфейса в места, где его явно не хватает и немного по другим местам.

14thermo2.jpg
Йеп, удовлетворительно

Приступаем к установке материнской платы. В сервере явно стояло что-то другого формата, и те… э-э-э… штуцеры, в которые ввинчиваются винты для фиксации материнской платы, располагались не на местах для E-ATX платы. К сожалению, в куске металла, в который ввинчиваются штуцеры, не хватило трёх отверстий напротив тех, что были в материнской плате. К счастью, самих штуцеров тоже не хватило трёх штук.

Из-за этого материнская плата провисает в местах крепления 24-пинового коннектора и PCI-E разъёмов. С одной стороны, это текстолит. С другой стороны, это китайский текстолит, никогда не знаешь, чего от него ждать. Но давить надо аккуратно в любом случае, будь это даже сертифицированный военной приёмкой текстолит. Даже нет, в таком случае надо давить ещё бережнее — он тоже сделан в Китае, но штучная сертификация и приёмка увеличила стоимость устройства в пару десятков раз.

15nopins.jpg
Куча дырок и все не там

Помните блок питания на скотче? История циклична, вот повторение:

16psu.jpg
И да, мне это не нравится

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

Со второго раза выйти в биос тоже не получается. Путём перебирания виновников, приходим к решению: поменяв местами планки оперативки и вынув SSD, можно достучаться до биоса. Вставляем на место SSD и включаем компьютер ещё раз — биос грузится, диск определяется. Видимо, что-то сбросилось при отсутствующей CR2032 батарейке.

Кстати, видите, что блок для жёстких дисков выдаётся вперёд более, чем должен? Он упирается в кулер. Это не идеальный корпус для компьютеров классического форм-фактора, что поделать.

17setup.jpg
Место для первичной настройки

Небольшое отступление по поводу шума: с видеокартой уровень шума был на уровне 27–30 децибел, а после установки операционной системы уровень шума сервера снизился где-то до 8–14 децибел. Точнее измерить было сложно, поскольку фоновый уровень шума был тоже где-то в этом диапазоне: стройка метро на улице, катающиеся шары у соседей сверху, топот кошки и прочее подобное. Сервер будет стоять в икеевском шкафу без дверец, поэтому такой уровень шума подойдёт.  


Бонус

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

Тем не менее, я опишу грабли, на которые наступил в процессе установки ОС.

Windows Server по причине отсутствия лицензии я ставить не стал, да и привык больше взаимодействовать с линуксовыми серверами. На старом сервере стоит Ubuntu, но на паре малоиспользуемых VPS стоит CentOS и на работе — RHEL. Поэтому будем знакомиться ближе с CentOS 8.

Идём на любое зеркало, скачиваем .torrent-файл — и за пару десятков минут выкачиваем семигигабайтный образ.

Вставляем флешку, находим её и копируем образ на неё.

frog@server:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   1  14,6G  0 disk
└─sdb4   8:20   1  14,6G  0 part /media/localadmin/ANACONDA
sda      8:0    0 223,6G  0 disk
├─sda2   8:2    0    24G  0 part [SWAP]
├─sda3   8:3    0   128G  0 part /
└─sda1   8:1    0   243M  0 part /boot/efi
frog@server:~$ dd if=/home/frog/CentOS-8.1.1911-x86_64-dvd1.iso of=/dev/sdb
dd: failed to open '/dev/sdb': Permission denied
frog@server:~$ sudo !!
sudo dd if=/home/frog/CentOS-8.1.1911-x86_64-dvd1.iso of=/dev/sdb

И уходим пить чай. Через час приходим в уверенности, что всё уже давно скопировалось –, но приглашения на ввод не появилось. Значит, всё ещё копируется. Окей, новый терминал, запрашиваем у dd, сколько осталось.

  PID TTY          TIME CMD
 1075 tty5     00:00:00 bash
 1105 tty5     00:00:00 sudo
 1106 tty5     00:00:00 su
 1112 tty5     00:00:00 bash
 1825 pts/18   00:00:00 sudo
 1826 pts/18   00:01:08 dd
 2846 pts/0    1-23:03:42 java
 5956 pts/19   00:00:00 bash
 6070 pts/19   00:42:15 java
 6652 pts/20   00:00:00 ps
 7477 tty4     00:00:00 bash
 7494 tty4     00:00:00 sudo
 7495 tty4     00:00:00 su
 7497 tty4     00:00:00 bash
frog@server:~$ kill -USR1 1826
-bash: kill: (1826) - Operation not permitted
frog@server:~$ sudo !!
sudo kill -USR1 1826

Ответ в старом терминале:

9025993+0 records in
9025993+0 records out
4621308416 bytes (4,6 GB, 4,3 GiB) copied, 13428,4 s, 344 kB/s

И спустя ещё пару десятков минут:

14755840+0 records in
14755840+0 records out
7554990080 bytes (7,6 GB, 7,0 GiB) copied, 14971,5 s, 505 kB/s

Что это было? Оно его побайтно копировало? Бедный ресурс флешки. Или проверяло корректность записи. В любом случае, надо было man dd и использовать большие блоки копирования, и ещё что-нибудь, что пригодилось однажды при копировании 64-гигового HDD на 5400 обротов в минуту. Но даже он копировался с большей скоростью, чем треть USB 1.0.

А потом стандартные выбор флешки как Boot Device, Next, Next, Next, Finish. Никаких манипуляций с разметкой диска, настройкой Ethernet. Самая обычная установка ОС в 2020 году.


Заключение

Эта первая часть рассказа о настройке нового сервера. Я бы выпустил его сразу целиком, но у меня в черновиках лежат ещё две недописанные статьи, которые, как мне кажется, интереснее «yet another server build», а вторая часть про настройку софта грозится закончиться нескоро.

Итоговая стоимость составила 57973 рубля. Вот разбивка детальнее, правда, ссылки на алиэкспресс показывают уже немного иные товары.

Примерная стоимость владения — 3.89 руб/кВт*ч * 0.8 кВт * 24 ч * 31 день = 2315 руб/месяц. Но это если он будет молотить на всю катушку не переставая в течение месяца, в чём я очень сомневаюсь по причинам отсутствия таких задач и живучести железа. Для сравнения, стоимость аренды аналогичного сервера из качественных деталей составляет около 25к руб/месяц.

Думаю, это вполне хороший сервер за свои деньги.

© Habrahabr.ru