Что можно запустить на кластере из разбери. Создаём систему развертывания приложений с помощью Docker. Применение "Малины" в робототехнике и IoT

One popular use of Raspberry Pi computers is building clusters. Raspberry Pies are small and inexpensive so it"s easier to use them to build a cluster than it would be with PCs. A cluster of Raspberry Pies would have to be quite large to compete with a single PC; you"d probably need about 20 Pies to produce a cluster with as much computing power as a PC. Although a Pi cluster may not be that powerful, it"s a great opportunity to learn about distributed computing.

There are several different types of distributed computer which can be used for different purposes. There are super computers that are used for solving mathematical problems like modelling weather conditions or simulating chemical reactions. These systems often use the Message Passing Interface (MPI). A team at the University of Southampton built a 64 node MPI based super computer . This system is used for teaching students about supercomputing.

Another technology that"s often used in distributed computing is Hadoop, which distributes data across many nodes. Hadoop is often used for processing large datasets and data mining. An engineer at Nvidia built a small Hadoop cluster using Raspberry Pies . He uses his cluster to experiment and test ideas before deploying them on more powerful systems.

Using a Raspberry Pi cluster as a web server

Clusters can be used as web servers. Many web sites get too much traffic to run on a single server, so several servers have to be used. Requests from web browsers are received by a node called a load balancer, which forwards requests to worker servers. The load balancer then forwards responses from servers back to the clients.

This site is now hosted on a Raspberry Pi cluster. The worker nodes are standard web servers that contain identical content. I just installed Apache on them and copied my site to each node.

I use an extra Raspberry Pi to host a development copy of this site, and to control the cluster. This Pi is connected to my local network via wifi, so I can access the development copy of my site from my laptop.

The extra Pi also has an ethernet connection to the Pi cluster. When I want to update my site, I can transfer changes from the development site to the live site on the cluster. Site updates are put into .tar.gz files which the worker nodes automatically download from the development site. Once downloaded, updates are then unpacked into the local file system.

Configuring the Raspberry Pi servers

All of the Pies in this system are headless. I can log into the Pi with the development site using the Remote Desktop Protocol, and from that Pi I can log into the worker Pies using SSH.

All the Pies in the cluster use a static IP address. In a larger cluster it would probably be better to set up a DHCP server on the load balancer. The IP addresses used in the cluster are on the 192.168.1.xxx subnet.

For each worker Pi, I set up a 4GB SD card using the latest version of Raspbian. In raspi-config I set the following options:

  • expand fs
  • set the hostname
  • set the password
  • set memory split to 16MB for the GPU
  • overclock the CPU to 800MHz
  • enable ssh

On each card I installed Apache and some libraries required by my CMS, libxml2 and python-libxml2. I used this command to enable mod rewrite, which is also required by my CMS:

$ sudo a2enmod rewrite

Finally, I copied some scripts onto each SD card which allow each Pi to synchronize its contents with the development Pi. In a larger cluster it would be worth creating an SD card image with all of these modifications made in advance.

Building a load balancer

The load balancer must have two network interfaces, one to receive requests from a router, and another network interface to forward requests to the server cluster. The nodes in the cluster are a on a different subnet than the rest of the network, so the IP address of the load balancer"s second interface must be on the same subnet as the rest of the cluster. The load balancer"s first interface has IP address 192.168.0.3 while the second interface"s IP address is 192.168.1.1. All the Pies in the cluster have IP addresses on the 192.168.1.xxx subnet.

I built my load balancer using an old PC with 512MB of RAM and a 2.7GHz x86 CPU. I added a second PCI ethernet card and installed Lubuntu, a lightweight version of Ubuntu. I was going to install Ubuntu, but this PC is pretty old, so Lubuntu is probably a better choice. I used a PC becasue I wasn"t sure if a single Pi would be powerful enough to act as a load balancer, and a Pi only has one ethernet connection. I want both of my load balancer"s network connections to be ethernet for improved performance and stability.

Note that IP forwarding is not enabled. The load balancer isn"t a router, it should only forward HTTP requests and not every IP packet that it receives.

Setting up the load balancer software

There are many different software implementations of load balancing. I used Apache"s load balancer module because it"s easy to set up. First I made sure my PC"s OS was up to date:

sudo apt-get update
sudo apt-get upgrade

Then I installed Apache:

sudo apt-get install apache2

These Apache modules need to be enabled:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer

The next step is to edit /etc/apache2/sites-available/default in order to configure the load balancer. The proxy module is needed for HTTP forwarding, but it"s best not to allow your server to behave as a proxy. Spammers and hackers often use other people"s proxy servers to hide their IP address, so it"s important to disable this feature by adding this line:

ProxyRequests off

Although proxy requests are disabled, the proxy module is still enabled and and acts as a reverse proxy. Next, define the cluster and its members by adding this code:

Balancer manager interface

The balancer module has a web interface that makes it possible to monitor the status of the back end servers, and configure their settings. You can enable the web interface by adding this code to /etc/apache2/sites-available/default:

It"s also necessary to instruct Apache to handle requests to the /balancer-manager page locally instead of forwarding these requests to a worker server. All other requests are forwarded to the cluster defined above.

ProxyPass /balancer-manager ! ProxyPass / balancer://rpicluster/

Once these changes have been saved, Apache should be restarted with this command:

$ sudo /etc/init.d/apache2 restart

when I open a browser and go to http://192.168.0.3 I see the front page of my web site. If I go to http://192.168.0.3/balancer-manager, I see this page in the image on the right.

The last step in getting the cluster online is adjusting the port forwarding settings in my router. I just needed to set up a rule for forwarding HTTP packets to http://192.168.0.3.

Here"s the complete /etc/apache2/sites-available/default for the load balancer:

ServerAdmin webmaster@localhost DocumentRoot /var/www Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .py Order allow,deny Allow from all ProxyRequests Off BalancerMember http://192.168.1.2:80 BalancerMember http://192.168.1.3:80 BalancerMember http://192.168.1.4:80 BalancerMember http://192.168.1.5:80 AllowOverride None Order allow,deny allow from all ProxySet lbmethod=byrequests SetHandler balancer-manager Order allow,deny allow from 192.168.0 ProxyPass /balancer-manager ! ProxyPass / balancer://rpicluster/ ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined

Raspberry Pi 3 возможно назвать по-настоящему универсальным компьютером. Bitcoin, конечно, на нём намайнить не получится, да и в игры с графикой консолей последних поколений поиграть не выйдет, но вот со многим остальным он хорошо справится. Ниже, в свою очередь, будет рассмотрены основные и наиболее популярные варианты применения Raspberry Pi 3.

Мультимедийные возможности Raspberry Pi 3

Возможности Raspberry Pi 3 в области мультимедиа очень велики. В частности, на основе "Малины" можно сделать мультимедийный центр, игровую консоль либо даже всё сразу. В результате с этим одноплатником можно получить на своем телевизоре с HDMI-портом доступ к следующим категориям развлечений:

  • видео в высоком разрешении на YouTube или других хостингах;
  • музыке на стриминговых сервисах;
  • игровым стримам на, например, Twitch;
  • играм, разработанным для старых консолей : NES, SNES, SEGA и др.

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

Для превращения "Малины" в игровую консоль нужно поставить на неё эмуляторы интересующих платформ и заказать игровые Rom-ы. Это делается за пару десятков минут. А еще проще и удобнее - инсталлировать специальный дистрибутив, например, Retro Pie или какой-то другой.

Разработка и работа с документами на RPi

Конечно, "Малина" - не самый мощный компьютер, а значит - не лучшее решение для работы. Но при желании на ней более или менее комфортно можно посмотреть/отредактировать какой-то документ или даже написать скрипт. Конечно, работать с тяжелыми IDE на ней не получится, но этого от RPi никто и не требует.

Также с помощью RPi3 можно «посерфить» в интернете или пообщаться в мессенджерах либо социальных сетях.

Сервер для любых нужд из Raspberry Pi 3

Еще один вариант, как можно использовать Raspberry Pi 3 - это сделать из него сервер. Так, достаточно поставить на него LAMP или просто Apache и Myphpadmin, после чего можно будет разрабатывать и тестировать веб-проекты в условиях достаточно ограниченных ресурсов.

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

Применение "Малины" в робототехнике и IoT

В IoT и робототехнике применение RPi практически безгранично. Из этого устройства можно сделать, например, камеру видеонаблюдения, небольшую метеостанцию, машинку с удаленным управлением и многое другое. Так, Raspberry Pi 3 находит применение в машине в виде видеорегистратора. При желании из данного одноплатника можно сделать даже мобильный телефон или смартфон. Но такое стоит делать либо ради экспериментов, либо, чтобы похвастаться перед друзьями/сообществом. Дело в том, что соответствующее устройство получится как минимум довольно громоздким.

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

Объединение нескольких RPi 3 в кластер

Ещё один способ применения Raspberry Pi 3 - объединение нескольких таких устройств в кластер. Это довольно специфический способ использования, который подойдет далеко не каждому.

Для начала следует дать краткое и понятное объяснение, что такое кластер. В общих чертах под этим термином понимается комплекс однородного оборудования (в данном случае множество RPi), на которых параллельно выполняется какая-то задача.

Делать кластер из "Малины" для реализации чего-то серьезного практического смысла нет, так как есть более дешёвые и удобные решения. Объединение Raspberry Pi 3 в кластер целесообразно по большей части для обучения. Имея несколько одноплатников, можно разобраться с особенностями параллельных вычислений или показать как они работают ребёнку (собственно, RPi и создавался для обучения детей).

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

Введение

Основополагающими затратами в области вычислений являются мощности компьютеров и их энергопотребление. Современные суперкомпьютеры занимают огромное пространство и потребляют сотни тысяч ватт.

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

В данной работе предлагается для решения данной проблемы использовать одноплатные микрокомпьютеры, недавно появившиеся на рынке компьютерной техники (Paspberry Pi и аналоги). На их основе можно собрать недорогой вычислительный кластер и обучать студентов основам параллельного программирования. Таким образом, цель этой работы – создание недорогого учебного кластера из микрокомпьютеров для разработки и внедрения в учебный процесс алгоритмов параллельного программирования. Демонстрируется пример параллельных вычислений в разработанном учебном кластере.

Raspberry Pi – микрокомпьютер разработанный компаний Raspberry Pi Foundation. Маленький, размером с банковскую карту, он представляет собой полноценный одноплатный компьютер (System - on - a - Chip ). Процессор (в модели PI 3): 4 ядра ARM Cortex-A53 x64 . Операционная система по умолчанию Raspberian (основанная на Linux ядре). При цене всего в 35$ у платы есть все нужные интерфейсы (Wi - Fi , Bluetooth , Usb , Ethernet ), а также большой набор готовых программ для любого вида деятельности . Именно поэтому для небольшого учебного вычислительного кластера были выбраны эти микрокомпьютеры.

Понятие кластера и кластерных вычислений

Общеизвестно, что кластер – это группа компьютеров, объединённых высокоскоростными каналами связи, представляющая с точки зрения пользователя единый аппаратный ресурс . С другой стороны, кластер – это слабо связанная совокупность нескольких вычислительных систем, работающих совместно для выполнения общих программных приложений . Для того чтобы связать несколько raspberry PI в кластер, была собрана типовая кластерная вычислительная система (маршрутизатор, кабели Ethernet, USB и др.) на базе процессора PI 3 (рис. 1).

Рисунок 1. Кластерная вычислительная система на базе процессора из двух PI 3

Демонстрация параллельных вычислений

Для наглядной демонстрации возможностей кластера из двух PI 3 была выбрана среда программирования Python 2 и реализация алгоритма сортировка массива методом слияния. Компьютеры были объединены локальной сетью. Для упрощения составления кластера из нескольких R PI существует много готовых программ, одна из которых называется “mpi4py” .

Программный код сортировки массива слиянием на языке Python выглядит следующим образом:

def merge(left,right): #merges 2 sorted lists together

#Goes through both lists

while i < len(left)and j < len(right):

#Adds smaller element of the lists to the final list

if left[i] <= right[j]:

result.append(left[i])

result.append(right[j])

result += left

result += right

def mergesort(lst):

#if there"s only 1 element, no need to sort

if len(lst)< 2:

#breaks down list into 2 halves

middle = len(lst)/ 2

#recursively splits and sorts each half

left = mergesort(lst[:middle])

right = mergesort(lst)

#merges both sorted lists together

return merge(left, right)

Алгоритм работы программы состоит из следующей последовательности действий:

1. На PI 3 (сервер) генерируется случайный массив чисел.

2. Данный массив разбивается на n частей, по количеству процессоров в локальной сети.

3. С помощью модуля socket и локальной сети Pi3 (сервер) передает часть массива Pi3 (клиент).

4. Pi3 (сервер) сортирует свою часть массива и ждет ответа Pi3 (клиент).

5. Pi3 (клиент) сортирует свою часть массива и передает ее Pi3 (сервер).

6. Pi3 (сервер) получает отсортированную часть массива и выполняет конечную сортировку.

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

Заключение

Одноплатные компьютеры лишь недавно вышли за пределы сегмента устройств для автоматизации производства и начали завоевывать массовый рынок. Их небольшие размеры, небольшое энергопотребление и достаточно высокие вычислительные возможности способны сделать их основой для реализации различных проектов, например, обучение параллельному программированию. Особенностью, представленной кластерной вычислительной системы на базе raspberry PI 3, является хорошая масштабируемость, определяемая возможностями коммутационного оборудования, невысокая стоимость, возможность применения бесплатно распространяемого программного обеспечения, что важно при внедрении в учебный процесс. Проведенная демонстрационная работа показывает, что кластер даже из двух PI 3 способен ускорить вычисление простой, но одновременно и объемной задачи, такой как сортировка большого массива данных.

В перспективе планируется увеличить в вычислительной системе число микрокомпьютеров и провести сравнение производительности криптографических алгоритмов, в частности, планирующихся использовать для шифрования/расшифрования изображений (фото-, аеро-, космо- изображений) большого объема и передаче их по сети Интернет.

Список литературы :

  1. Robert Mullins/ Distributed computed //University Cambridge. – 2012. – http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/distributed-computing/ .
  2. Кластер. – Режим доступа. – URL: https://ru.wikipedia.org/wiki/Кластер (дата обращения 25.02.2017).
  3. Лукин В.В., Марчевский И.К. Учебно-экспериментальный вычислительный кластер. Ч. 1. Инструментарий и возможности. – Режим доступа. – URL: https://elibrary.ru/download/elibrary_17091004_33209664.pdf (дата обращения 25.02.2017).