Förra veckan använde jag varenda Raspberry Pi jag hade för att bygga ett HexaPi-datorkluster med sex noder.
Sedan dess har jag fått frågan ett antal gånger: Vad är det bra för? Så jag ska ta en titt på den sista biten i Raspberry Pi Projects – Build an OctaPi, och lägga till ett enkelt eget exempel också.
Oh, och jag lade till ytterligare en Raspberry Pi-server till klustret, samtidigt som jag fortfarande respekterar min regel om att ”inga två servrar är likadana”, så det är faktiskt nu ett HeptaPi-kluster med sju servrar. I slutet av det här inlägget kommer jag att lägga till en beskrivning av en del av den nya hårdvara som jag skaffade och använde för det här projektet.
Först, vad är den bra för? Jag har ett enkelt exempel från min egen erfarenhet. Jag reser ganska mycket, jag gillar att ta många bilder med en digital spegelreflexkamera och jag tar ofta panoramabilder med flera bilder (de schweiziska alperna är särskilt bra motiv för denna typ av fotografering). När jag kommer hem använder jag hugin panorama photo stitcher för att sammanfoga dessa partier av enskilda bilder till mycket större panoramavyer.
Om jag gör denna panoramabearbetning på en enda dator måste jag göra ”schemaläggningen” själv – det betyder att jag måste hålla ett öga på det, och när ett panorama är färdigt måste jag börja med nästa.
Om jag blir lite mer ambitiös kan jag sätta upp ett program för batchstyrning och sedan ställa grupperna av bilder som skall slås ihop i kö, men de blir ändå bara gjorda en efter en. Om jag har fler datorer tillgängliga för uppgiften måste jag då själv sköta distributionen av bilderna och återställningen av panoramabilderna, och återigen måste jag själv sköta ”schemaläggningen” på varje dator. Hur som helst är det en relativt tråkig och tidskrävande process, och tyvärr finner jag ofta att tiden (eller tålamodet) tar slut innan alla mina bilder har behandlats.
Med HeptaPi-klustret skulle jag kunna sätta upp en batchprocessor, baserad på något av Python-exemplen som ingår i OctaPi-klusterprojektet, och sedan installera hugin på var och en av klusterns servrar. Sedan skulle jag kunna mata in grupper av bilder till batch-processorn, som skulle distribuera dem till klusterservrarna för behandling och få den färdiga panoramabilden som retur.
Min investering i detta skulle vara att skriva det applikationsspecifika batch-kontrollprogrammet, och sedan identifiera de grupper av bilder som ska behandlas tillsammans. När det väl var gjort skulle den faktiska tiden tills jag hade alla mina vackra panoramabilder minska dramatiskt – och jag skulle kunna minska den ytterligare genom att helt enkelt lägga till fler Raspberry Pi-system till klustret när som helst!
Ett mer generellt svar på frågan om vad Pi Cluster är bra för är: alla typer av jobb eller uppgifter som kan delas upp i ett antal oberoende delar. Observera att det bara är själva uppgifterna som måste vara oberoende – resultaten kan också vara det, som i fallet med mina panoramafotografier, men det kan också vara så att resultatet av varje uppgift bidrar till ett större resultat. I så fall kan resultaten samlas på klientsystemet och sedan bearbetas ytterligare (kanske till och med genom att skicka tillbaka dem igen som en ny uppgift) för att producera ett slutresultat.
Det här är naturligtvis inte det enda användningsområdet för klusterdatorer. Det finns saker som redundans och feltolerans, som bygger på att din klient skickar arbete till hur många servrar som helst; om en server tas bort för underhåll (eller kraschar, eller vad som helst) kan bearbetningen ändå fortsätta på de återstående servrarna i klustret.
Dessa är alla begrepp som vanligtvis tillämpas på mycket större, mer sofistikerade klustersystem – till och med upp till hela datacenter för molntjänster. Men min poäng här är att du kan bygga ett enkelt kluster med hjälp av mycket billiga Raspberry Pi-system, och inte bara få mycket användbar kunskap och erfarenhet genom att göra det, utan också få en användbar resurs när du är klar.
Nu går vi vidare till den hårdvara som jag använde för det här projektet. Jag nämnde att jag har lagt till ytterligare en server till klustret sedan jag publicerade den ursprungliga skrivelsen. Det hände eftersom jag surfade på webbplatsen Pi-Shop.ch och lade märke till Raspberry Pi 2 v1.2.
De övergripande specifikationerna är desamma som för den ursprungliga Pi 2, men den nya modellen använder samma CPU som Pi 3 (men med en lägre klockfrekvens). Ingen stor sak, och förmodligen inte ens särskilt intressant för de flesta eftersom Pi 3 är mycket populärare nu ändå. Men det var tillräckligt för att motivera mig att skaffa en och lägga till den i klustret.
Det viktiga att notera om detta tillägg var att jag inte behövde göra något åt klientsystemet (controller) eller någon av de andra servrarna. Jag förberedde helt enkelt den nya Pi 2 på exakt samma sätt som jag hade förberett de andra och anslöt den sedan till det dedikerade trådlösa Pi Cluster-nätverket. Nästa gång jag startade ett jobb på klienten märkte den att den nya servern var tillgänglig och började använda den tillsammans med alla andra.
Jag nämnde också i det ursprungliga projektet att jag inte hade tillräckligt med USB-wi-fi-adaptrar för att ansluta alla mina Pi-system, och att lägga till den nya Pi 2 innebar förstås att jag behövde en adapter för den också. Pi-Shop har ett par nya adaptrar listade, så jag tänkte att detta var en bra chans att prova dem.
Det viktigaste kriteriet att ha i åtanke när man köper en USB wi-fi-adapter för en Raspberry Pi är att man vill vara säker på att den fungerar som den ska.
Jag vet att det kan låta dumt, men det är raka motsatsen till det tillvägagångssätt som jag använder när jag köper sådan kringutrustning till resten av mina bärbara och stationära Linux-datorer. Jag utgår från att de flesta människor köper och använder Raspberry Pi-system för något specifikt ändamål – oavsett om det är utbildning, hobbyverksamhet eller för något specifikt projekt eller användning av en enhet. Det är naturligtvis möjligt att få i stort sett vilken USB-adapter som helst att fungera med i stort sett vilken Linuxdistribution som helst, men om du inte vill riskera att behöva spendera en betydande del av din skoltid/hobbytid/arbetstid på att installera drivrutiner, ta den enkla vägen ut och se till att du köper en adapter som redan har testats och fungerar.
Det enklaste sättet att vara säker på detta är att köpa från en auktoriserad Raspberry Pi-distributör, och se till att det står på deras webbsida att adaptern du köper har verifierats fungera med Pi.
Den första som jag provade var Miniature WiFi (802.11b/g/n) 150Mbps-enheten. Jag tror att detta faktiskt är Adafruit Miniature WiFi Module, även om bilderna inte ser likadana ut – kanske är det en specialförpackning eller något sådant. Hur som helst, den jag fick ser ut som bilden som visas här, och den fungerade faktiskt direkt ur lådan, som annonserat. Den kostade bara CHF 9,90 (cirka €8,99/£8,00/$10,50).
Den är baserad på ett Realtek RTL5370-chip, och den har en blå lysdiod för ström/link/status.
Då jag var i ”prova nya saker”-läget, och jag märkte att det fanns en annan USB wi-fi-adapter med högre genomströmning som erbjöds i Pi-Shop, bestämde jag mig för att ge den ett försök också. Den heter helt enkelt ”USB WiFi Adapter for Raspberry Pi (300Mbps)” och ser ut som bilden till höger.
Den är betydligt dyrare, 23,90 CHF (cirka 21,70 euro/ 19,40 pund/ 25 dollar), så det är nog värt att tänka en extra gång innan du köper den i stället för den ovan. Kom ihåg att det är Raspberry Pi-system vi talar om, och de är inte kända för hastigheten och effektiviteten hos sina USB-anslutningar. Så skillnaden i hastighet, som i stort sett är den enda fördelen med den här adaptern, kanske inte är betydande i din verkliga användning av enheten.
Den här enheten är baserad på Realtek 8192SU-chippet, och den har också en lysdiod för ström/link/status.
Den sista nya hårdvaran för det här projektet är den som jag tror kommer att visa sig vara mest allmänt användbar – TP-Link TL WR802N Wireless N Nano Router.
Denna billiga enhet (ca 30 CHF/€27/£24/$32) är mycket liten och lätt och innehåller ett antal fördefinierade och förkonfigurerade lägen för vanliga användningsområden. Jag använde den för att sätta upp ett isolerat WLAN utan internetanslutning (Routerläge), men den kan naturligtvis tillhandahålla internetanslutning antingen via sin RJ45-anslutning för trådbundet nätverk (Access Point-läge) eller via en trådlös WISP-anslutning (Hotspot-läge).
Den kan också användas för att komplettera ett befintligt wifi-nätverk (Range Extender-läge), eller som en wi-fi-adapter för en enhet som endast har en trådbunden nätverksanslutning (Client-läge).
WR802N levereras med en egen strömadapter, men den kan också strömförsörjas av en strömadapter för Raspberry Pi (eller annan MicroUSB-laddare för smarttelefoner), eller till och med genom att anslutas till en USB-port på en dator.
Mina första intryck av den här enheten har varit mycket positiva, och jag förväntar mig att den kommer att vara mycket användbar både hemma och när jag reser.
När jag bestämde mig för att bygga Pi Cluster förväntade jag mig att det skulle vara en gee-whiz-artad intressant sak att göra, men jag antog också att jag skulle plocka isär den igen inom kort. Nu när den är igång upptäcker jag att jag tänker på andra intressanta sätt att använda den och förbättra den.
Håll i minnet att du inte behöver ha ett stort antal Raspberry Pi-system för att sätta upp en sådan – det räcker med två servrar och en klient till att börja med. Men se upp, när du väl har den igång kan du upptäcka att det är en bra ursäkt för att köpa fler och bättre bitar för att utöka den.
- Raspberry Pi:
- Raspberry Pi: Hur jag byggde ett datorkluster i OctaPi-stil
- Raspberry Pi: Hands-on med Fedora 26
- Raspbian GNU/Linux: Ny version innehåller installerbar x86-avbildning
- Raspberry Pi Zero W, hands-on: En mycket välkommen ny medlem i familjen
- Hands-On: Raspberry Pi 7-tums pekskärm och fodral