TV-box - нечто с начинкой дешевого телефона и возможностями мини-сервера ....
Итак, один из самых "навороченных" на начало 2014 года,
Measy E8HDL на чипе Realtek RDT 1185 DD ( по функционалу - аналог "конструктора" Banana Pi )
BusyBox v1.1.3 (2011.08.05-17:05+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ # mount
/dev/root on / type squashfs (rw)
none on /dev type devfs (rw)
none on /proc type proc (rw,nodiratime)
devpts on /dev/pts type devpts (rw)
none on /sys type sysfs (rw)
none on /tmp type ramfs (rw)
/dev/mtdblock/2 on /usr/local/etc type yaffs (rw,noatime)
/dev/rd/0 on /mnt/rd type vfat (rw,nodiratime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
/dev/scsi/host0/bus0/target0/lun0/part3 on /tmp/usbmounts/sda3 type ext3 (ro,recovery)
/dev/scsi/host0/bus0/target0/lun0/part1 on /tmp/usbmounts/sda1 type
ufsd (rw,nodiratime,nls=utf8,nls=utf8,uid=0,gid=0,fmask=0,dmask=0,force)
none on /tmp/usbmounts/hdd type ramfs (rw)
~ # umount /tmp/usbmounts/sda3
~ # mount /dev/scsi/host0/bus0/target0/lun0/part3
mount: Can't find /dev/scsi/host0/bus0/target0/lun0/part3 in /etc/fstab
~ # mount /dev/scsi/host0/bus0/target0/lun0/part3 /tmp/usbmounts/sda3
~ # mount
/dev/root on / type squashfs (rw)
none on /dev type devfs (rw)
none on /proc type proc (rw,nodiratime)
devpts on /dev/pts type devpts (rw)
none on /sys type sysfs (rw)
none on /tmp type ramfs (rw)
/dev/mtdblock/2 on /usr/local/etc type yaffs (rw,noatime)
/dev/rd/0 on /mnt/rd type vfat (rw,nodiratime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
/dev/scsi/host0/bus0/target0/lun0/part1 on /tmp/usbmounts/sda1 type
ufsd (rw,nodiratime,nls=utf8,nls=utf8,uid=0,gid=0,fmask=0,dmask=0,force)
none on /tmp/usbmounts/hdd type ramfs (rw)
/dev/scsi/host0/bus0/target0/lun0/part3 on /tmp/usbmounts/sda3 type ext3 (rw,recovery)
Оговорюсь сразу, поставленная цель — не узнать максимум возможностей
системы, а выяснить принципиальную работоспособность современных
микрокомпьютеров в качестве полноценных веб-серверов и помочь оценить
конкурентноспособность относительно виртуальных хостингов. Поэтому, в
данной статье не рассматриваются вопросы оптимизации и изучения
предельно допустимой нагрузки. Вместо этого эксперимент проводится на
действующих сайтах с реальными посетителями.
Вступление
Вероятно, многие, кто знаком с микрокомпьютерами съедобных
семейств (Raspberry, Banana, Orange...), задумывались о расширении
круга их использования. Изначально предназначенные для систем типа
«умный дом» и робототехники, они становятся всё более быстрыми при
сохранении размеров. Малое энергопотребление с увеличением мощности
процессоров делает их привлекательными для потенциального использования
в роли веб-серверов. Давайте выберем подходящую для этого модель.
Почему Raspberry Pi 2 model B?
Поскольку самое слабое место таких систем с точки зрения
хостинга, — это процессор, обладающий очень низкой относительной
производительностью (о чём чуть дальше), то мы попробуем организовать
веб-сервер на бюджетном варианте, но который, тем не менее, сможет
оказаться достаточно мощным для наших задач — это Raspberry Pi 2 model
B. Он обладает 4-х ядерным процессором, работающим в штатном режиме без
охлаждения на 900 Mhz и возможностью менять эту частоту от 700 до 1200
Mhz. Поднимать тактовую частоту мы не будем, лишь заметим, что для
«разгона» понадобится радиатор и, возможно, вентилятор. Раз так
сложилось, что на сегодняшний день Raspberry Pi 2 model B обладает
самым производительным процессором среди «одноклассников», выбираем его
для тестирования.
Технические особенности рассматриваемой платформы
Процессор
Процессор у нас необычный, семейства RISC. Вкратце можно сказать,
что набор инструкций у такого процессора существенно меньше, чем у
«обычных», зато простые команды он выполняет очень быстро.
Но для выполнения сложных инструкций таких простых команд надо очень
много. Поэтому и тактов уходит больше. Так что если кому показалось,
что 4 ядра по 900 Mhz — это более, чем достаточно для вебсервера, то
стоит сделать поправку —
Broadcom BCM2836 quad core Cortex A7 для нашей задачи окажется не быстрее старенького Pentium 300-400 Mhz.
Правда, в 6 раз обгоняя предыдущую одноядерную модель на Raspberry Pi,
и в 1.9 раза опережая двухядерного соклассника на Banana Pi M2 (который
хоть и рекламируется наличием SATA и гигабитного ethernet, но для
веб-сервера из-за своего процессора подходит в значительной мере
меньше).
Именно по причине неторопливости центрального процессора мы наблюдаем
рекордно низкое потребление микрокомпьютеров. По доступным данным,
Raspberry Pi потребляет от 2 до 3-х ватт, 4 ватта при пиковой нагрузке,
1 ватт при простое. Что ж, 2-3 ватта (5V, 0.4-0.6А) в среднем для всей
системы, за исключением питания носителей информации — это то, за что
стоит побороться на поприще корпоративного или домашнего вебхостинга,
то, что может сделать его выгодным с экономической точки зрения.
Память
Память используется не самая быстрая, это DDR2, но зато имеется вполне достаточный объём — 1GB.
Надо сказать, что это хороший объём для обычных вебсерверов под управлением Linux.
Сетевой интерфейс
100-мегабитный сетевой интерфейс вполне достаточен для передачи
данных. Больше нам и не нужно — подсистема хранения информации и
процессор просто не справятся с большей нагрузкой.
Хранение информации
Переходим к очень интересному моменту — встроенный картридер
позволяет системе загружаться только с него (если только не
перенаправить загрузчик...), а это в штатной ситуации ограничивает
выбор основного носителя микро SD картой. Радует то, что сегодня они
могут быть уже значительного объёма и работать быстро. Хотя недостатки
уже налицо — мы вряд ли захотим держать на ней файлы вебсайтов, базы
данных, swap и логи, во избежании медленной работы и преждевременного
сокращения срока жизни носителя. Для этого у нас будет ещё один
носитель на шине USB. Такой подход не только увеличит
производительность системы, но и даст преимущество модульности — легко
заменить носитель на запасной и делать бэкапы всего образа. Вопрос в
том, что именно мы хотим использовать в качестве внешнего носителя —
SSD диск, HDD или быструю карту памяти. Здесь каждый решает сам для
себя, многое зависит от характера хостируемых сайтов. Следует помнить,
что на Raspberry Pi 2 используется стандарт USB 2.0, ограничивающий
нашу файловую подсистему в скорости передачи данных.
В данном примере в качестве внешнего устройства мы рассмотрим
относительно медленный вариант для записи — это USB-картридер с
подключенной полноформатной SD-картой Lexar Professional, позволяющей
записывать данные на скорости всего лишь около 15Mb/s при этом
подключении. Хотя (в общем случае) нам будет маловажна скорость
носителя выше 100 мегабит как для чтения, так и для записи, так как
связь с внешним миром ограничена этой цифрой. При применении дисковых
подсистем стоит задуматься об их энергопотреблении. Винчестер 2.5"
потребляет ~5 ватт и, вероятно, потребует отдельного источника питания.
Следует также помнить про специфичную организацию ввода-вывода на
Raspberry через USB, очевидно, у нас есть ещё одно узкое место:
Итак, носители для теста:
«Внутренний»: MicoSD 8Gb class 10
«Внешний»: SD 32Gb class 10+ (UHS)
Установка и состав LAMP
Система должна быть простой, но иметь полноценный функционал.
Поэтому одно требование — ничего лишнего, но только Apache спрячем за
Nginx, благо память позволяет.
Операционная система
На «внутреннем» носителе ставится Minibian с образа 2015-02-18-wheezy-minibian.img.
Это — Debian 7.8 в минимальной комплектации для Raspberry. Оговоримся,
в стандартном репозитарии ждут PHP не выше 5.5 и Apache не выше 2.2.
Это никакое не досадное ограничение, но для данной статьи полезно
проверить возможность использования самых свежих версий. Для того,
чтобы установить не входящие в стандартный репозитарий PHP 5.6.x и
Apache 2.4.x, пришлось поменять источник для 8-й версии Raspbian,
система после apt-get upgrade стала иметь версию 8.0.
Apache
Версия 2.4.10 (Raspbian). Включен gzip, подключены все наиболее
часто используемые модули из стандартной поставки, включая mod_rewrite,
mod_cache..., не считая тех, что включены по умолчанию.
PHP
5.6.12-0+deb8u1 (cli). Выполняется в Apache как prefork. Есть php-curl, php-gd и другие популярные библиотеки.
MySQL
5.5.44-0+deb8u1 — (Raspbian).
Nginx
Nginx/1.6.2. Nginx отвечает за статику. Включено сжатие gzip.
Напомню, что все логи пишутся на внешний носитель, база данных MySQL
там же, swap не отключен, но пустой на всё время тестирования.
В качестве вспомогательных утилит использую PhpMyAdmin, htop, iostat и
webmin. Установлен exim4, но только для отправки сообщений из форм. Как
видно, наш сервер вполне современен и функционален. Любителей панели
управления VESTA разочарую — к сожалению, производитель не поддерживает
ARM процессоры и не собирается этого делать в ближайшее время. Поэтому
webmin.
125
Тестирование
Я сразу не собирался делать никаких синтетических тестов, т. к.
они скорее из области очень далёкой теории. На практике же всё сильно
зависит от характера хостируемых сайтов, от распределения нагрузки по
времени, от канала связи, количества просмотров, времени посетителей на
сайте..., а также от настроек. Другими словами, предлагаю посмотреть,
что получается на самом деле, на действующих сайтах.
Тестируемые вебсайты не основаны на какой-либо CMS, но используют
отображение картинок из базы данных на динамических (PHP) страницах,
поэтому может быть довольно интенсивная нагрузка на MySQL. А вот
AJAX-соединений нет вовсе. Поскольку наш хостинг пока не претендует на
профессиональный, то посчитал достаточным для теста размещение на нём
16-ти действующих сайтов с невысокой посещаемостью, из которых около
пяти — около 100-200 человек в сутки, остальные — не более 50-ти
посетителей за это же время. Всего — около 800-900 человек в день, что
сравнимо по допустимой нагрузке с недорогим виртуальным хостингом.
Половина посетителей приходится на вечер, основные посещения случаются
в 20-22 часа (~300 человек за два часа, в среднем 4 просмотра = 10
просмотров в минуту по ~700 кб каждый = 116 килобайт трафика в
секунду). Это время обозначим «час пик» и в это же время проведём
тестирование. Тестов будет всего два вида — оценка производительности с
помощью сторонних сервисов и отчёт утилит htop, iostat по реальной
работе.
1. Время генерации и загрузки пользователем страниц в «часы пик»
Используем всего два основных параметра — время генерации
страницы и время загрузки страницы, для двух типов страниц — «тяжёлых»
(тяжёлой для процессора, т. к. много картинок из MySQL, долгая
генерация) и «лёгких» (обычная динамическая страница PHP). Повторим
каждый тест 10 раз, чтобы уменьшить вероятность случайного результата,
а также будем использовать разные сервисы.
Напомню про географию тестирующих серверов и про их возможную
загруженность. Поэтому абсолютные результаты могут разниться сильно,
это нормально. Повторные замеры делал с перерывами в 5-10 минут, чтобы
попадать в разное время загруженности сервисов. Канал тестируемого
Raspberry — гигабитная оптика, география — Сибирь, 150 гарантированных
мегабит до Москвы. Для того, чтобы убедиться в способности сервера
обслуживать несколько одновременных соединений, тестирование запускал
одновременно на следующих сайтах-сервисах:
`Лёгкая` страница (547 кб, без обращений к MySQL)
PingDom.com, Швеция
Время загрузки страницы (46 запросов): минимум — 925 мс, максимум — 1124 мс, средняя — 955 мс.
Google PageSpeed Insights
Нареканий по скорости нет. Sitespeed.ru
Общее время загрузки страницы 3.9-4.2, среднее 4.0. Время
генерации страницы от 139 до 157, среднее 145 мс. Вот почему у Гугла
нареканий нет — попадаем в допустимые им 200 мс.
`Тяжёлая` страница (843 кб, включая 38 картинок по 10-15 кб из MySQL)
PingDom.com, Швеция
Время загрузки страницы (85 запросов): минимум — 946 мс, максимум — 1001 мс, средняя — 973 мс.
Google PageSpeed Insights
Нареканий по скорости нет.
Sitespeed.ru
Общее время загрузки страницы 5.3-4.2, среднее 4.0. Время генерации страницы от 158 до 169, среднее 162 мс.
2. Отчёт утилиты htop
Как и ожидалось, Htop показал, что основной потребитель
процессорного времени — это процессы mysql. Они «скушали» 98 минут из
последних суток процессорного времени. Что неудивительно — частые и
«тяжёлые» запросы к базе у нас предполагались изначально. Будь картинки
в кэше nginx, мы бы имели прирост в производительности, но тест тем и
интересен, что с запасом моделирует повышенную нагрузку на MySQL,
характерную, кстати, для большинства CMS.
3. Отчёт утилиты iostat
Эта утилита показала средние скорости чтения и записи на носители:
1. «Внутренний» носитель (система) — 0.87 кб / с чтение в
среднем, 15,5 кб / с запись в среднем (скорее всего из-за кеширования
nginx, есть что доработать в конфигурации).
2. «Внешний» носитель (сайты, логи, базы данных) — 2.4 кб / с
чтение и 3 кб / с запись (тут всё нормально, чтение закешировано,
пишутся логи).
4. Распределение ресурсов процессора
Распределение процессорного времени по htop, выборка — ровно двое
суток работы (обслужено ~1600 уникальных посетителей по данным
Яндекс-метрики):
mysql 6.8%
htop 1.8%
nginx 0.75%
apache2 <0.3%
Почти всё остальное время процессор отдыхал.
Как результат, имеем большой запас по свободному процессорному времени,
запас по поднятию частоты процессора, запас по скорости работы
носителей информации на запись. Доступно множество оптимизаций в
настройке как серверных программ (вынести кеш nginx на отдельный
носитель, например), так и самих сайтов. Всё вместе — неплохой
потенциал для увеличения общей производительности.
Итог
Нашему виртуальному посетителю понравилась скорость работы
вебсервера на микрокомпьютере, несмотря на то, что были другие
одновременные визиты. Таким образом, несмотря на узкие места (USB и
процессор), имеем вполне очевидный вывод — полноценный вебсервер на
Raspberry Pi 2 model B реален. Как по программному обеспечению, так и
по техническим параметрам. Исходя из совсем невысокой загруженности в
рассматриваемом варианте, предположу, что он сможет оперативно
обслуживать как минимум пару-тройку тысяч посетителей
среднестатистического сайта (сайтов ?) в сутки.
Многопроцессорность помогает быстрее справиться с запросами, памяти
достаточно для кеширования, передача данных через USB
удовлетворительная, так что сервер-малыш может не только позволить
сэкономить на электричестве, но и осуществлять быструю (плюс
недорогую!) замену вышедшего из строя оборудования. Такая система может
окупать себя при использовании в сети предприятия в качестве
корпоративного сервера (сервер базы данных, веб-сервер, сервер
резервного копирования, файлообменник) по сравнению с другими
популярными решениями. И уж наверняка быть альтернативой виртуальному
хостингу в умелых руках. Скажем, на бюджетном источнике бесперебойного
питания микрокомпьютер в паре с роутером может работать часами, так что
вопрос кратковременного (и не очень) отключения электричества может
быть нивелирован в домашних условиях, если на узле провайдера также
стоят UPS. А ещё можно управлять электричеством, давать команды
различным устройствам, подключить видеокамеру и различные датчики…
Пробуйте, экспериментируйте, микрокомпьютеры — это не только недорого, но и до приятного тихо…
Если Raspberry Pi говорили, о стоимости в 20-25 долл., то Orange Pi заявляли о 15-20.
Несколько примечаний к Orange Pi Lite
Сеть - только Wi-Fi
№ 1 - переходник HDMI - VGA - со звуком или без - это не существенно, но именно такой (6-7$)
№ 2 - режим USB OTG работает после запуска системы и ... у меня клавиатура не пошла .... №
3 - рекомендованный блок питания 5V / 3 А . По привычке пытался через
miniUSB - ан не тут то было, только через разъем питания. Ругань в Инет
о "нестандартном" входе по питанию - в топку! Найти блок питания - не
проблема.
Есть тест на потребление тока, но у меня только на блоках питания
с током 2,5 А плата перестала "чудить". У имевшихся в
продаже блоков питания на 3 А толстый разъем и к нему нужен
переходник на более тонкий. Что оказалось даже удобно. + идет к
центральному проводу. На плате есть светодиод наличия напряжения.
Еще раз - плата
требовательна к блоку питания ! В этой же связи:
№ 4 - радиатор на процессор. На Raspberry Pi (а это ее радиатор)
процессор слабо грелся, на Allwinner без него точно не обойтись - сгорит.
Остальные ИМС вполне могут работать без "медных наклеек".
Из забавного:
блок питания 5V / 2.5A - 2$,
радиатор из кусочка меди - 1$
Почему ?
127
Что с Raspberry Pi, что с Orange Pi - не пошли подобные 2 $ шнуры:
Правый кабель на старый ТВ какую-то картинку пытается выдавать,
но нужна настройка уже установленной системы, а потом возможно подключение к ТВ.
Левый - вообще "ноль", монитор не видит подключения ...
h3disp - вам в помощь ....
128
Характеристики товара
•Производитель:ORANGEPI
•Марка
процессора:Allwinner
•Интерфейс:
Карты ПАМЯТИ,HDMI,2 x
USB2.0
•Объём
памяти:512Мгб
•Модель:Orange Pi
Lite
•Supply
Voltage:5V/3А
•CPU:H3 Quad-core Cortex-A7 H.265/HEVC
4K
•Memory (SDRAM):512M DDR3 (shared with
GPU)
•USB port:2 USB ports+USB-OTG
•IR Receiver :Yes
•Wifi antenna
:Yes
129
....
Заходим на сервер по SSH предварительно посмотрев на роутере какой айпи получил мини сервер, данные для подключения:
Логин: root
Пароль: orangepi
Ставим на мини сервер несколько програм выполнив команду:
#apt-get update && apt-get install vim mc screen nmap htop bmon
130
Запустив программу htop
увидим количество ядер процессора, оперативной памяти и загруженных сервисов мини сервера.
Если установлен образ Raspbian либо Debian на мини сервер, Вам не нужна
графика на сервере, потому удалим файлы графики выполнив несколько
команд:
apt-get remove x11-common midori lxde lxde-common lxde-icon-theme omxplayer
apt-get remove `sudo dpkg --get-selections | grep -v "deinstall" | grep x11 | sed s/install//`
apt-get remove `sudo dpkg --get-selections | grep -v "deinstall" | grep sound | sed s/install//`
apt-get autoremove
rm -rf /root/Desktop
Так как по умолчанию в операционной системе настроено
получение IP автоматически, а сервер необходимо всегда настраивать на
статический IP адрес, настроим сеть по инструкции: Настройка
подключения к Интернет, а также настройка сетевых карт на сервере в
Debian, Ubuntu и их производных
Выполним команды создания rsa, dsa и ecdsa ключей, перезагружаем ssh и перезагружаем наш мини сервер:
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -N '' -t ecdsa
/etc/init.d/ssh restart
reboot
После этого подключившись к мини серверу по SSH можно приступать к дальнейшей настройке.
Сегодня мы установили на мини сервер Orange Pi
операционную систему Debian GNU/Linux настроили сеть на статический
айпи и установили некоторые программы. Теперь Вы можете настроить на
Вашем мини сервере Веб сервер, АТС, либо использовать как качальщик
торентов, dlna или другой нужный для Вас сервис.
Raspbian после установки сразу сделать ресайз флэшки. Смотрим параметры файловой системы. #fdisk запоминаем первый сектор основного раздела. Далее .... Убиваем этот раздел. И сразу же создаем новый с началом в "старой точке" и размером который нам нужен (для 32G делал +16G) Сохраняем изменения, выходим из fdisk, перезагружаемся. После перезагрузки запускаем #resize2fs /dev/sda2 (или что там у нас) Остатки гигабайт - создаем раздел, форматируем и т.д. В моем случае этот раздел монтировался в /var/www - о чем сделана запись в fstab
Установка #apt-get install mc nmap htop #apt-get install apache2 #apt-get install samba #apt-get install vsftpd
132
Raspbian - если при обновлении # apt-get update # apt-get upgrade идут ошибки " .... 301 Moved Permanently. " Это ошибка DNS или непрописаны архивные директории. Делаем и то и другое #nano /etc/resolv.conf - дописываем DNS Google - 8.8.8.8 и 8.8.4.4 #nano
/etc/apt/sources.list , по аналогии прописываем
http://archive.raspbian.org/raspbian/ (посмотрите,
как это делается для Debian)
Странно, но # apt-get update # apt-get upgrade и #aptitude update #aptitude upgrade Вели себя несколько поразному, поэтому их повторял.
133
Узнать сетевой адрес
#hostname -I Посмотреть параметры сетевых карт #ifconfig Временно прописать статический сетевой адрес #ifconfig eth0 192.168.0.100 Для внешней флэшки делаем директорию /media/usb и туда ее монтируем mount /dev/sda1 /media/usb service --status -all service samba restart vsftp настройка в /etc/vsftpd.conf
134
Samba во внутренней сети
[global] workgroup = WORKGROUP #Имя рабочей группы public
= yes
# виден в сети netbios name = OrangePi #видимое имя guest
ok = yes
#разрешить гостевой вход security = share
[www] path = /var/www writable = yes #разрешаем запись browseable = yes #виден в сети create
mask = 777 # без этих записей один раз
был бардак с правами доступа на созданные директории и файлы. directory mask = 777 # для сети без Инета - не вникал, просто дал 777